راکت
حل شده

ارور getTryPublicId on null درگاه پرداخت زرین‌پال

24 پاسخ

سلام وقتتون بخیر.

من از نسخه‌ی 2.4 پکیج shetabit/payment استفاده می‌کنم و هنوز آپدیت نکردم به نسخه‌های بالاتر.
توی این نسخه هنوز قابلیت این که از سمت سرور درخواست به بانک زده بشه رو داره و من هم همین کارو کردم و بعد یک لینک به کاربر دادم که با کلیک روی یک دکمه به اون منتقل میشه.

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

$receipt = Payment::amount((int)$transaction->paid_amount)->transactionId((int)$tr)->verify();

متاسفانه به ارور زیر می‌خوره:

\[2020-12-19 16:11:48\] local.WARNING: Call to a member function getTryPublicId() on null  
\[2020-12-19 16:28:11\] local.WARNING: file: /home/linomir/vendor/shetabit/payment/src/Drivers/Zarinpal/Zarinpal.php  
\[2020-12-19 16:28:11\] local.WARNING: Trace: #0 /home/linomir/vendor/shetabit/payment/src/Drivers/Zarinpal/Zarinpal.php(134): SoapClient->call('PaymentVerifica...', Array)

1 /home/linomir/vendor/shetabit/payment/src/PaymentManager.php(239): Shetabit\\Payment\\Drivers\\Zarinpal\\Zarinpal->verify()

2 /home/linomir/app/Http/Controllers/InvoiceController.php(170): Shetabit\\Payment\\PaymentManager->verify()

تا همین یک هفته پیش داشت درست کار می‌کرد و نمی‌دونم یهو چه اتفاقی افتاد که دچار این مشکل شد !
درایوری که استفاده می‌کنم هم زرین‌پال هستش.

@khanzadimahdi ممنون میشم اگر کمک بکنید.

در حال حاضر شرایط آپدیت کردن نسخه رو نداریم چون کمپین تبلیغ رفتم و مردم دارن خرید می‌کنن و متاسفانه مجبوریم همرو دستی پرداخت شده بزنیم توی دیتابیس که درست کار بکنه و آپدیت کردن به نسخه بالاتر دچار مشکل می‌کنه کار رو.

ممنون.

ثبت پرسش جدید

پاسخ‌ها

24
mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

بهترین پاسخ

مشکل از این هست که شناسه تراکنش رو نباید موقع ذخیره کردن به نوع دیگه ای cast کنید.

https://roocket.ir/discuss/13460?page=2#subject-47559

مهدی عقیقی
مهدی عقیقی
@MehdiAghighi

تخصص: برنامه نویس وب

بعد از کمی ور رفتن و کمک اقای خانزادی @khanzadimahdi متوجه شدیم این ارور به خاطر این هست که احتمالا transaction_id که به زرین‌پال میدادم درست نبوده.

در واقع مشکل من این بود که اون Authority که زرین‌پال توی کوئری استرینگ برمی‌گردوند رو تبدیل به int می‌کردم و اون حرف الفبایی که قبل از عدد ها وجود داره و ۰ های اول عدد پاک می‌شدن و وقتی درخواست به زرین‌پال زده میشد اون ارور رو میداد.
شما اگر دقیقا همین (string)$request->Authority رو به عنوان transactionId پاس بدید به اون تابع verify درست میشه احتمالا.

از اقای خانزادی هم ممنون به خاطر وقتی که گذاشتند.

Ali
Ali
@ali200316

@khanzadimahdi
دوستان من بعد از زدن دکمه پرداخت به محض اینکه میاد تو این لینک صفحه سفید میشه
مشکل چیه ؟
 تصویر

شاید پاسخ شما همین‌جا باشد

mahdi khanzadi
mahdi khanzadi
@khanzadimahdi

تخصص: Software engineer

کنسول لاگ صفحه رو نگاه کنید + ادرس صفحه رو کپی کنید برای زرین پال ارسال کنید ببینید چی میگن.

صفحه 2 از 2

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام