Closed AliDeV7 closed 2 years ago
از داخل کدهای ZarinPal که داخل پکیج بود دیدم کد خطای -11 برمیگرده از طرف درگاه بانک.
احتمال داره که متن خطاها تغییر کرده باشن از سمت زرین پال. به هر حال حق با شماست و این مورد باید داخل کدهای پَرباد به روز رسانی بشه.
من درگاه زرین پال رو به صورت مستقیم پیاده سازی کردم و این مرچنت کدی که داشتم رو امتحان کردم ولی مشکلی نداشت و فعاله
میدونین مشکل چیه؟
تنها راهی که من میتونم درگاه حقیقی رو تست کنم اینه که اکانت داشته باشم. در صورت تمایل میتونید اطلاعات اکانت زرین پال رو به آدرس زیر بفرستید تا تست کنم. parbad@outlook.com
ارسال کردم براتون
من درگاه زرین پال رو به صورت مستقیم پیاده سازی کردم و این مرچنت کدی که داشتم رو امتحان کردم ولی مشکلی نداشت و فعاله
از کدوم نسخه برای پیادهسازی استفاده کردید؟ REST یا SOAP
من از پکیج داخل Nuget استفاده کردم. با Asp.Net Core 3.1 داخل Backend دارم انجام میدم. از همون تابع هایی که توی پکیج هست استفاده میکنم، فکر میکنم کدهاش REST باشه
با توجه به اینکه این پکیج حدود ۳ سال قبل پیادهسازی شده، این احتمال وجود داره که نسخه SOAP در زرین پال دچار تغییراتی شده از سمت خودشون و شاید دیگه درست کار نمیکنه. به همین خاطر بهتره که این پکیج این درگاه به روز رسانی بشه و با REST پیادهسازی بشه
@AliDeV7
نمونه کد REST که پیادهسازی شده باشه و جواب بده سراغ دارید؟ چون روشی که در مستنداتشون ارائه دادن ظاهرا کار نمیکنه و خطای ۵۰۰ میده https://docs.zarinpal.com/paymentGateway/guide
من با پکیج خودشون انجام دادم قبلا
فردا صبح نمونه کد هارو ارسال میکنم براتون الان دسترسی ندارم به کدها
نمونه کد با Asp.Net Core 3.1 نوشتم
سپاس برای آپلود فایلها.
آیا امکانش هست براتون از پشتیبانی درگاه زرین پال بپرسید که آیا دسترسی به درگاه تست و عملیاتی (حقیقی) رو برای آی پی های خارج از ایران قطع کردن یا نه؟ چون من دقیقا طبق مستنداتشون و یا همین مثالی که شما آپلود کردید انجام دادم برای درگاه تست. اما مرتبا خطای ۵۰۰ رو میگیرم که متاسفانه هیچ اطلاعاتی هم نمیفرسته که آدم بدونه مشکل از چی بوده.
در صورت امکان لطفا تستی که خودتون انجام دادید رو در درگاه تستی زرین پال هم انجام بدید ببینید کار میکنه یا خیر.
ببخشید دیر جواب دادم
تست کردم بدون مشکل لینک واریز رو بهم میده توی کدوم قسمت ارور 500 میخورید؟
در ضمن من با فیلترشکن هم تست کردم ، فکر نمیکنم مشکل از این باشه، حالا به پشتیباتی پیام میدم ببینم چی میگن
پشتیبانی زرین پال :
درگاه تست در حال حاضر غیر فعال می باشد دسترسی برای ای پی ها خارجی و داخلی مشکلی نمی باشد
سپاس از شما برای پیگیری. پس مشکل همونطور که گفتم از سمت درگاه زرین پال بود و درگاه تست خراب بوده.
خب الان باید چیکار کنیم؟ هنوز مشکل اصلی من برطرف نشده
مشکل من با درگاه اصلی بود :(
این درگاه رو من به زودی با REST پیادهسازی میکنم و با توجه به اینکه درگاه تست کار نمیکنه، یک نسخه بتا منتشر میکنم تا توسط شما تست بشه. در صورت موفقیت آمیز بودن، نسخه نهایی منتشر میشه.
درود نمونه کدی که شما قرار دادید، از آدرس ها و مقادیری داره استفاده میکنه که با مستندات فعلی خود زرین پال متفاوت هست.
مستندات فعلی: https://docs.zarinpal.com/paymentGateway/guide
لطفا از پشتیبانی زرین پال بپرسید، کدوم API رو باید استفاده کرد و یا جدیدترین کدوم هست؟
سلام
ببخشید من چند روز درگیر بودم، امروز یا فردا حتما انجامش میدم
از اون Packageی که زرین پال گذاشتن نمیخواین استفاده کنید؟
کدوم پکیج؟
الان از طرف زرین پال بهم پیام دادن، گفتن که این لینک مستندات که دادید آخرین ورژن هست
اینم نمونه کد : https://github.com/erfanad1992/zarinpalasp.netcore
پس در واقع چه پروژهای که شما آپلود کردید و چه نوگتی که خود زرین پال درست کرده هر دو قدیمی هستن و چیزی که در مستنداتشون قرار دادن آخرین نسخه هست. بسیار عالی. میخواستم تکلیف همین اول روشن بشه. من این درگاه رو طبق مستندات جدید پیادهسازی میکنم و همون طور که گفتم نسخه بتا برای تست منتشر میکنم. سپاس از شما
ممنون از شما
منتظر شما هستم پس، فقط یه حدود میگید که چقدر ممکنه پیاده سازیش طول بکشه؟
کمکی از دستم برمیاد بهم بگید :)
همین امروز منتشر میشه. اطلاع رسانی میکنم اینجا
کمکی از دستم برمیاد بهم بگید :)
در حال حاضر خیر. چون چیز سادهای هست و زیاد زمان نمیبره. در هر صورت سپاس از شما
این درگاه ظاهرا امکان بازگشت پول رو هم فراهم کرده. هر چند مشخص نیست که این مقدار Authorization از کجا قراره بیاد. آیا در اطلاعاتی که این درگاه به شما مانند merchantID داده، چنین مقداری هم موجود هست؟
داخل تنظیمات پنل نیست همچین مقداری
تیکت زدم
پس لطفا اطلاع رسانی کنید اینجا، وقتی که زرین پال پاسخ قطعی داد. سپاس
از داخل پنل اصلی باید "از قسمت نشت های فعال روی ایجاد مجوز دسترسی کلیک کنید و مجوز (Authorization) خود را بسازید"
یدونه Bearer توکن میده
پس قابل پیادهسازی هست. سپاس برای پیگیری
لطفا نسخه بتا رو تست کنید و اطلاع بدید
Install-Package Parbad.Gateway.ZarinPal -Version 1.3.0-beta1
وقتی درگاه در حالت isSandBox = false هست ارور BadRequest دریافت میکنم
در حالت True هم این ارور رو دریافت میکنم (Internal Server Error)
من با همون کدهای قبلی تست کردم، باید کد جدید بنویسم؟
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();
});
من با همون کدهای قبلی تست کردم، باید کد جدید بنویسم؟
خیر نیازی به تغییر کدها نیست.
برای درگاه تست که همونطور که قبلا گفتم خطای internal server error میده و شما پس از مکالمه با زرین پال گفتید که درگاه تست غیرفعال هست. اما درگاه اصلی رو من دیروز تست کردم و خطای زیر رو دریافت کردم: Merchant is not active
آیا Merchant که دارید استفاده می کنید، فعال هست؟
الان من با همون ورژن 1.2.0 درگاه زرین پال شما، وارد درگاه تست میشم! خیلی عجیبه فکر کنم کدهاشون خیلی مشکل داره
اونو هم پیگیری میکنم الان بهتون میگم
ورژن 1.2.0 با همون تکنولوژی قدیمی SOAP کار میکنه و درگاه تست روی اون نسخه به درستی کار میکنه. سپاس
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}
رو پیدا کنید
این اررور رو میده
همون کد ارور -11 که میگه درگاه فعال نیست، بزارین من پیگیری کنم
کاش شما توی این آپدیت کدهای خطای زرین پال رو هم آپدیت میکردین
کاش شما توی این آپدیت کدهای خطای زرین پال رو هم آپدیت میکردین
بله خطاها رو اضافه میکنم. این درگاه هم مانند سایر درگاهها متاسفانه به طرز فوق العاده آماتور تولید شده. همونطور که در لاگها مشاهده می کنید، هنگامی که نتیجه درخواست HTTP موفق باشه، پراپرتی data در پاسخ، از نوع آبجکت هست. اما وقتی که نتیجه درخواست HTTP موفق نباشه، این پراپرتی از نوع آرایه میشه. بنابراین مصرف کننده مجبور میشه کلاس کاملا متفاوت برای حالت خطا درست کنه.
آره متاسفانه و اصلا داکیومنت و نمونه کد درستی براش نوشته نشده
فقط یه مشکلی این وسط هست، من با همین درگاه، حالت مستقیم که از پکیج خود زرین پال استفاده میکنم مشکلی ندارم و وارد درگاه بانک میشم و مشکلی نداره کل فرایند واریز! پس MerchantID من نباید مشکل داشته باشه
باز من تیکت زدم براشون و گفتن درگاه فعاله مشکلی نداره، نمیدونم این وسط مشکل چی هست :(
پکیج خود زرین پال از نسخه قدیمی داره استفاده میکنه ن
طبق این بحث، پکیج خودشون از نسخه جدیدشون استفاده نمی کنه. درسته؟
بهتره ازشون بپرسید که احتمالش وجود داره که مرچنت شما برای نسخه جدید غیرفعال باشه؟ در نهایت اگر تکلیف مشخص نشه، بهتره که از نسخه دومشون استفاده کنیم که از آدرس زیر استفاده میکنه https://www.zarinpal.com/pg/rest/WebGate/PaymentRequest.json
باشه پیگیری میکنم
طبق این بحث، پکیج خودشون از نسخه جدیدشون استفاده نمی کنه. درسته؟
بله استفاده نمیکنه
بهتره ازشون بپرسید که احتمالش وجود داره که مرچنت شما برای نسخه جدید غیرفعال باشه؟
تیکت زدم برا این
در نهایت اگر تکلیف مشخص نشه، بهتره که از نسخه دومشون استفاده کنیم که از آدرس زیر استفاده میکنه
لینک برام باز نمیشه، 403 میگیرم
این لینک API هست
اوکی ، حالا من بهتون خبر میدم که پشتیانی چی گفت
آقا سینا مشکل از همون MerchantId بود، با پشتیانی صحبت کردم اینو درستش کردن برام
الان تست کردم نسخه بتا 3 رو بدون مشکل وارد درگاه شد ولی نسخه sandbox همونطور که میدونید ارور میخوره
پس تغییرات جزئی باقیمانده مثل ترجمه خطاها باید انجام بشه و در نهایت نسخه اصلی منتشر بشه امروز. پس از انتشار این نسخه، تیکت زیر رو من می بندم چون داخل این نسخه پیادهسازی شده.
سپاس از شما برای پیگیری
ترجمهها آپدیت شدن. لطفا بتا سوم رو نصب و تست کنید ببینید درست کار می کنه یا خیر.
Install-Package Parbad.Gateway.ZarinPal -Version 1.3.0-beta3
همچنین یک متد اضافه شده که پس از انجام تایید تراکنش، اطلاعات اضافی درگاه مانند شماره کارت رو میده.
var verifyResult = await _onlinePayment.VerifyAsync(invoice);
var originalResult = verifyResult.GetZarinPalOriginalVerificationResult();
آیا امکانش برای شما محیا هست که تست واقعی انجام بدید؟
بله تست انجام میدم و نتیجه رو بهتون میگم، احتمالا فردا صبح انجام میدم
ممنون از شما
درگاه زرین پال رو پیاده سازی کردم و همه چیز در حالت SandBox = true درست کار میکنه ولی زمانی که Sandbox = false میکنم با خطای
"درخواست مورد نظر يافت نشد." از تابع RequestAsync مواجه میشم!
از داخل کدهای ZarinPal که داخل پکیج بود دیدم کد خطای -11 برمیگرده از طرف درگاه بانک.
داخل داکیومنت های زرین پال، کد خطای -11 : "مرچنت کد فعال نیست لطفا با تیم پشتیبانی ما تماس بگیرید." است.
من درگاه زرین پال رو به صورت مستقیم پیاده سازی کردم و این مرچنت کدی که داشتم رو امتحان کردم ولی مشکلی نداشت و فعاله
میدونین مشکل چیه؟