Sina-Soltani / Parbad

A free, open-source, integrated and extensible library which connects your web applications to online payment gateways. Gateways can be added or developed by you.
GNU Lesser General Public License v3.0
371 stars 81 forks source link

Update ZarinPal to use the REST APIs #303

Closed AliDeV7 closed 2 years ago

AliDeV7 commented 2 years ago

درگاه زرین پال رو پیاده سازی کردم و همه چیز در حالت SandBox = true درست کار میکنه ولی زمانی که Sandbox = false میکنم با خطای

"درخواست مورد نظر يافت نشد." از تابع RequestAsync مواجه میشم!

از داخل کدهای ZarinPal که داخل پکیج بود دیدم کد خطای -11 برمیگرده از طرف درگاه بانک.

داخل داکیومنت های زرین پال، کد خطای -11 : "مرچنت کد فعال نیست لطفا با تیم پشتیبانی ما تماس بگیرید." است.

من درگاه زرین پال رو به صورت مستقیم پیاده سازی کردم و این مرچنت کدی که داشتم رو امتحان کردم ولی مشکلی نداشت و فعاله

میدونین مشکل چیه؟

Sina-Soltani commented 2 years ago

از داخل کدهای ZarinPal که داخل پکیج بود دیدم کد خطای -11 برمیگرده از طرف درگاه بانک.

احتمال داره که متن خطاها تغییر کرده باشن از سمت زرین پال. به هر حال حق با شماست و این مورد باید داخل کدهای پَرباد به روز رسانی بشه.

من درگاه زرین پال رو به صورت مستقیم پیاده سازی کردم و این مرچنت کدی که داشتم رو امتحان کردم ولی مشکلی نداشت و فعاله

میدونین مشکل چیه؟

تنها راهی که من میتونم درگاه حقیقی رو تست کنم اینه که اکانت داشته باشم. در صورت تمایل میتونید اطلاعات اکانت زرین پال رو به آدرس زیر بفرستید تا تست کنم. parbad@outlook.com

AliDeV7 commented 2 years ago

ارسال کردم براتون

Sina-Soltani commented 2 years ago

من درگاه زرین پال رو به صورت مستقیم پیاده سازی کردم و این مرچنت کدی که داشتم رو امتحان کردم ولی مشکلی نداشت و فعاله

از کدوم نسخه برای پیاده‌سازی استفاده کردید؟ REST یا SOAP

AliDeV7 commented 2 years ago

من از پکیج داخل Nuget استفاده کردم. با Asp.Net Core 3.1 داخل Backend دارم انجام میدم. از همون تابع هایی که توی پکیج هست استفاده میکنم، فکر میکنم کدهاش REST باشه

Sina-Soltani commented 2 years ago

با توجه به اینکه این پکیج حدود ۳ سال قبل پیاده‌سازی شده، این احتمال وجود داره که نسخه SOAP در زرین پال دچار تغییراتی شده از سمت خودشون و شاید دیگه درست کار نمیکنه. به همین خاطر بهتره که این پکیج این درگاه به روز رسانی بشه و با REST پیاده‌سازی بشه

Sina-Soltani commented 2 years ago

@AliDeV7

نمونه کد REST که پیاده‌سازی شده باشه و جواب بده سراغ دارید؟ چون روشی که در مستنداتشون ارائه دادن ظاهرا کار نمیکنه و خطای ۵۰۰ میده https://docs.zarinpal.com/paymentGateway/guide

AliDeV7 commented 2 years ago

من با پکیج خودشون انجام دادم قبلا

فردا صبح نمونه کد هارو ارسال میکنم براتون الان دسترسی ندارم به کدها

AliDeV7 commented 2 years ago

نمونه کد با Asp.Net Core 3.1 نوشتم

https://github.com/AliDeV7/Zarinpal-REST

Sina-Soltani commented 2 years ago

سپاس برای آپلود فایل‌ها.

آیا امکانش هست براتون از پشتیبانی درگاه زرین پال بپرسید که آیا دسترسی به درگاه تست و عملیاتی (حقیقی) رو برای آی پی های خارج از ایران قطع کردن یا نه؟ چون من دقیقا طبق مستنداتشون و یا همین مثالی که شما آپلود کردید انجام دادم برای درگاه تست. اما مرتبا خطای ۵۰۰ رو میگیرم که متاسفانه هیچ اطلاعاتی هم نمیفرسته که آدم بدونه مشکل از چی بوده.

Sina-Soltani commented 2 years ago

در صورت امکان لطفا تستی که خودتون انجام دادید رو در درگاه تستی زرین پال هم انجام بدید ببینید کار میکنه یا خیر.

AliDeV7 commented 2 years ago

ببخشید دیر جواب دادم

تست کردم بدون مشکل لینک واریز رو بهم میده توی کدوم قسمت ارور 500 میخورید؟

image

AliDeV7 commented 2 years ago

در ضمن من با فیلترشکن هم تست کردم ، فکر نمیکنم مشکل از این باشه، حالا به پشتیباتی پیام میدم ببینم چی میگن

AliDeV7 commented 2 years ago

پشتیبانی زرین پال :

درگاه تست در حال حاضر غیر فعال می باشد دسترسی برای ای پی ها خارجی و داخلی مشکلی نمی باشد

Sina-Soltani commented 2 years ago

سپاس از شما برای پیگیری. پس مشکل همونطور که گفتم از سمت درگاه زرین پال بود و درگاه تست خراب بوده.

AliDeV7 commented 2 years ago

خب الان باید چیکار کنیم؟ هنوز مشکل اصلی من برطرف نشده

مشکل من با درگاه اصلی بود :(

Sina-Soltani commented 2 years ago

این درگاه رو من به زودی با REST پیاده‌سازی میکنم و با توجه به اینکه درگاه تست کار نمیکنه، یک نسخه بتا منتشر میکنم تا توسط شما تست بشه. در صورت موفقیت آمیز بودن،‌ نسخه نهایی منتشر میشه.

Sina-Soltani commented 2 years ago

درود نمونه کدی که شما قرار دادید، از آدرس ها و مقادیری داره استفاده میکنه که با مستندات فعلی خود زرین پال متفاوت هست.

مستندات فعلی: https://docs.zarinpal.com/paymentGateway/guide

لطفا از پشتیبانی زرین پال بپرسید، کدوم API رو باید استفاده کرد و یا جدیدترین کدوم هست؟

AliDeV7 commented 2 years ago

سلام

ببخشید من چند روز درگیر بودم، امروز یا فردا حتما انجامش میدم

از اون Packageی که زرین پال گذاشتن نمیخواین استفاده کنید؟

Sina-Soltani commented 2 years ago

کدوم پکیج؟

AliDeV7 commented 2 years ago

Zarinpal-sdk (0.0.8)

AliDeV7 commented 2 years ago

الان از طرف زرین پال بهم پیام دادن، گفتن که این لینک مستندات که دادید آخرین ورژن هست

اینم نمونه کد : https://github.com/erfanad1992/zarinpalasp.netcore

Sina-Soltani commented 2 years ago

پس در واقع چه پروژه‌ای که شما آپلود کردید و چه نوگتی که خود زرین پال درست کرده هر دو قدیمی هستن و چیزی که در مستنداتشون قرار دادن آخرین نسخه هست. بسیار عالی. میخواستم تکلیف همین اول روشن بشه. من این درگاه رو طبق مستندات جدید پیاده‌سازی میکنم و همون طور که گفتم نسخه بتا برای تست منتشر میکنم. سپاس از شما

AliDeV7 commented 2 years ago

ممنون از شما

منتظر شما هستم پس، فقط یه حدود میگید که چقدر ممکنه پیاده سازیش طول بکشه؟

کمکی از دستم برمیاد بهم بگید :)

Sina-Soltani commented 2 years ago

همین امروز منتشر میشه. اطلاع رسانی میکنم اینجا

کمکی از دستم برمیاد بهم بگید :)

در حال حاضر خیر. چون چیز ساده‌ای هست و زیاد زمان نمیبره. در هر صورت سپاس از شما

Sina-Soltani commented 2 years ago

image این درگاه ظاهرا امکان بازگشت پول رو هم فراهم کرده. هر چند مشخص نیست که این مقدار Authorization از کجا قراره بیاد. آیا در اطلاعاتی که این درگاه به شما مانند merchantID داده، چنین مقداری هم موجود هست؟

AliDeV7 commented 2 years ago

داخل تنظیمات پنل نیست همچین مقداری

تیکت زدم

Sina-Soltani commented 2 years ago

پس لطفا اطلاع رسانی کنید اینجا، وقتی که زرین پال پاسخ قطعی داد. سپاس

AliDeV7 commented 2 years ago

از داخل پنل اصلی باید "از قسمت نشت های فعال روی ایجاد مجوز دسترسی کلیک کنید و مجوز (Authorization) خود را بسازید"

یدونه Bearer توکن میده

Sina-Soltani commented 2 years ago

پس قابل پیاده‌سازی هست. سپاس برای پیگیری

Sina-Soltani commented 2 years ago

لطفا نسخه بتا رو تست کنید و اطلاع بدید Install-Package Parbad.Gateway.ZarinPal -Version 1.3.0-beta1

AliDeV7 commented 2 years ago

وقتی درگاه در حالت isSandBox = false هست ارور BadRequest دریافت میکنم image

در حالت True هم این ارور رو دریافت میکنم (Internal Server Error) image

من با همون کدهای قبلی تست کردم، باید کد جدید بنویسم؟

AliDeV7 commented 2 years ago
        return await _onlinePayment.RequestAsync(invoice =>
        {
            invoice
                .SetAmount(Amount)
                .SetCallbackUrl(CallbackURL)
                .SetGateway(GatewayName.ToString());

            if(GatewayName.ToString().ToLower() == "zarinpal")
            {
                var ZarinPalInvoice = new ZarinPalInvoice("تست", "a*******@gmail.com", "0937*******");
                invoice.SetZarinPalData(ZarinPalInvoice);
            }
            //GenerateTrackingNumberAutomatically
            invoice.UseAutoIncrementTrackingNumber();
        });
Sina-Soltani commented 2 years ago

من با همون کدهای قبلی تست کردم، باید کد جدید بنویسم؟

خیر نیازی به تغییر کدها نیست.

برای درگاه تست که همونطور که قبلا گفتم خطای internal server error میده و شما پس از مکالمه با زرین پال گفتید که درگاه تست غیرفعال هست. اما درگاه اصلی رو من دیروز تست کردم و خطای زیر رو دریافت کردم: Merchant is not active

آیا Merchant که دارید استفاده می کنید، فعال هست؟

AliDeV7 commented 2 years ago

الان من با همون ورژن 1.2.0 درگاه زرین پال شما، وارد درگاه تست میشم! خیلی عجیبه فکر کنم کدهاشون خیلی مشکل داره

اونو هم پیگیری میکنم الان بهتون میگم

Sina-Soltani commented 2 years ago

ورژن 1.2.0 با همون تکنولوژی قدیمی SOAP کار میکنه و درگاه تست روی اون نسخه به درستی کار میکنه. سپاس

Sina-Soltani commented 2 years ago

Install-Package Parbad.Gateway.ZarinPal -Version 1.3.0-beta2

نسخه بتا دوم رو تست کنید لطفا و ببینید Logger چه اطلاعاتی بهتون میده. باید پیام‌هایی مانند

ZarinPal HTTP request failed. Check the status code {StatusCode} and the HTTP response content {ResponseContent}

رو پیدا کنید

AliDeV7 commented 2 years ago

این اررور رو میده

image

AliDeV7 commented 2 years ago

همون کد ارور -11 که میگه درگاه فعال نیست، بزارین من پیگیری کنم

کاش شما توی این آپدیت کدهای خطای زرین پال رو هم آپدیت میکردین

Sina-Soltani commented 2 years ago

کاش شما توی این آپدیت کدهای خطای زرین پال رو هم آپدیت میکردین

بله خطا‌ها رو اضافه میکنم. این درگاه هم مانند سایر درگاه‌ها متاسفانه به طرز فوق العاده آماتور تولید شده. همونطور که در لاگ‌ها مشاهده می کنید، هنگامی که نتیجه درخواست HTTP موفق باشه، پراپرتی data در پاسخ،‌ از نوع آبجکت هست. اما وقتی که نتیجه درخواست HTTP موفق نباشه، این پراپرتی از نوع آرایه میشه. بنابراین مصرف کننده مجبور میشه کلاس کاملا متفاوت برای حالت خطا درست کنه.

AliDeV7 commented 2 years ago

آره متاسفانه و اصلا داکیومنت و نمونه کد درستی براش نوشته نشده

فقط یه مشکلی این وسط هست، من با همین درگاه، حالت مستقیم که از پکیج خود زرین پال استفاده میکنم مشکلی ندارم و وارد درگاه بانک میشم و مشکلی نداره کل فرایند واریز! پس MerchantID من نباید مشکل داشته باشه

باز من تیکت زدم براشون و گفتن درگاه فعاله مشکلی نداره، نمیدونم این وسط مشکل چی هست :(

Sina-Soltani commented 2 years ago

پکیج خود زرین پال از نسخه قدیمی داره استفاده میکنه ن

طبق این بحث، پکیج خودشون از نسخه جدیدشون استفاده نمی کنه. درسته؟

Sina-Soltani commented 2 years ago

بهتره ازشون بپرسید که احتمالش وجود داره که مرچنت شما برای نسخه جدید غیرفعال باشه؟ در نهایت اگر تکلیف مشخص نشه، بهتره که از نسخه دومشون استفاده کنیم که از آدرس زیر استفاده میکنه https://www.zarinpal.com/pg/rest/WebGate/PaymentRequest.json

AliDeV7 commented 2 years ago

باشه پیگیری میکنم

AliDeV7 commented 2 years ago

طبق این بحث، پکیج خودشون از نسخه جدیدشون استفاده نمی کنه. درسته؟

بله استفاده نمیکنه

بهتره ازشون بپرسید که احتمالش وجود داره که مرچنت شما برای نسخه جدید غیرفعال باشه؟

تیکت زدم برا این

در نهایت اگر تکلیف مشخص نشه، بهتره که از نسخه دومشون استفاده کنیم که از آدرس زیر استفاده میکنه

لینک برام باز نمیشه، 403 میگیرم

Sina-Soltani commented 2 years ago

این لینک API هست

AliDeV7 commented 2 years ago

اوکی ، حالا من بهتون خبر میدم که پشتیانی چی گفت

AliDeV7 commented 2 years ago

آقا سینا مشکل از همون MerchantId بود، با پشتیانی صحبت کردم اینو درستش کردن برام

الان تست کردم نسخه بتا 3 رو بدون مشکل وارد درگاه شد ولی نسخه sandbox همونطور که میدونید ارور میخوره

Sina-Soltani commented 2 years ago

پس تغییرات جزئی باقیمانده مثل ترجمه خطاها باید انجام بشه و در نهایت نسخه اصلی منتشر بشه امروز. پس از انتشار این نسخه، تیکت زیر رو من می بندم چون داخل این نسخه پیاده‌سازی شده.

297

سپاس از شما برای پیگیری

Sina-Soltani commented 2 years ago

ترجمه‌ها آپدیت شدن. لطفا بتا سوم رو نصب و تست کنید ببینید درست کار می کنه یا خیر.

Install-Package Parbad.Gateway.ZarinPal -Version 1.3.0-beta3

همچنین یک متد اضافه شده که پس از انجام تایید تراکنش، اطلاعات اضافی درگاه مانند شماره کارت رو میده.

var verifyResult = await _onlinePayment.VerifyAsync(invoice);

var originalResult = verifyResult.GetZarinPalOriginalVerificationResult();

آیا امکانش برای شما محیا هست که تست واقعی انجام بدید؟

AliDeV7 commented 2 years ago

بله تست انجام میدم و نتیجه رو بهتون میگم، احتمالا فردا صبح انجام میدم

ممنون از شما