سلام
اپ روی لوکال کار میکنه و پرداخت انجام میشه ، فایلها رومنتقل میکنم به سرور این پیغام رو میده
Shetabit \ Payment \ Exceptions \ DriverNotFoundException
Driver not selected or default driver does not exist.
درایور : زرین پال
راجب مواردی که گفتین پاسخ ها رو میزارم براتون:
تو verify پرداخت
من مبلغ و عوض کردم با چیزی که تو بانک پرداخت کردم اما هیچ عکسلعملی نشون نداد !
پاسخ من:
توی مرحله ی verify خیلی از بانک ها فقط و فقط کد تراکنش رو بررسی میکنن و مبلغ دیگه براشون مهم نیست. یکی از درگاه هایی که مبلغ براش مهم هست زرین پال هست.
سوال اخر :
من با دستور config مقادیر ترمینال و غیره و به صورت داینامیک دادم
و اگر اشتباه بدم xception میده که نمیدونم چجوری باید هندلش کنم و بتونم به کاربر خطا بدم بجای ارور تو برنامه !
پاسخ من:
اون exception یک تایپ داره که میتونید اون رو با try catch بگیرید و پیام مناسب نشون بدید. همچنین میتونید متد getMessage رو روی exception اجرا کنید تا پیام مناسب رو دریافت کنید.
همچنین اگه از لاراول استفاده میکنید میتونید یک صفحه ی جداگانه بسازید و توی مسیر Exceptions در لاراول اون رو تشخیص بدید و هدایت کنید به صفحه ای که براش تعبیه کردین. (خودم این روش رو پیشنهاد میکنم).
این پکیج هیچ کاری رو پیچیده تر نکرده! تنها کاری که کرده یک استاندارد کلی ارائه داده واسه تمامی درگاه ها. شما دیگه نیاز نیست واسه هر درگاهی یه مدل کد جداگانه بنویسی! یکبار کد مینویسی و باهاش میتونی به تمام درگاه های بانکی وصل بشی. اگه درگاه جدیدی هم بیاد میشه اونو پیاده سازی کرد و به صورت درایور به پکیج اظافه کرد و نیاز نیست شما کدتو تغییر بدی.
موفق باشید.
@khanzadimahdi
سلام درگاه من روی sandbox درست کار میکنه کامل ولی وقتی روی zaringate میزارمش موقع برگشت از درگاه این خطا رو میده:
Shetabit\Multipay\Exceptions\InvalidPaymentException: درخواست مورد نظر آرشيو شده است in
یعنی پول از حسابم کم میشه ولی برنمیگرده به سایتم و وریفای نمیشه پرداخت
اینم کد وریفای:
$receipt = Payment::amount(Session::get('cost'))->transactionId(Session::get('transactionId'))->verify();
سلام. حدس میزنم زرین پال اخیرا یه تغییراتی داده که نیاز داریم تا درایورش رو تغییر بدیم. اگه امکانش هست روی گیت هاب درایور زرین پال رو ادیت کنید و درخوست مرج بدید.
و اینکه کلا پیشنهاد میدم از زرین پال استفاده نکنید. اخیرا خیلی شکننده شده و جوابگو نیستن. به شخصه یه درگاه پرداخت داشتم که 6 ماه کار میکرد یکهو از کار افتاد! تیکت زدم گفتن اون api رو گذاشتیم کنار از فلان api استفاده کن! کلا معلوم نیست چیکار میکنن!
@khanzadimahdi
اره منم بعده کلی تیکت زدن بهشون اخر به یه کد php خام رسیدم و اون الان اکی هست تقریبا
واقعا جدیدا اذیت کننده شده زرینپال
یه سوالی داشتم ازتون اینکه من یه سری مقادیر برای پرداخت رو با سشن پاس میدم مثل هزینه توی کد بالا که گذاشتم، با سشن پاس دادن از نظر امنیتی مشکلی به وجود میاره؟؟
سشن چون سمت سرور ذخیره میشه مشکلی ایجاد نمیکنه. بهتره پرداخت وابسته به سشن نباشه و اونو از طریق دیتابیس مدیریت کنید.
اگه مشکل رو تونستید حل کنید روی پکیج هم pull request بدید خیلی عالی میشه. تا بقیه دوستان هم بتونن استفاده کنن.
@khanzadimahdi
نه من از یه کد php خام استفاده کردم
متاسفانه نشد از پکیج شما استفاده کنم
ولی کد رو اینجا میزارم دوستان استفاده کنن:
وصل شدن به درگاه:
$data = array("merchant_id" => $merchant_id,
"amount" => $cost,
"callback_url" => url("admin/sms/callback"),
"description" => $setting->brand_name,
"metadata" => ["mobile" => Auth::user()->phone],
);
$jsonData = json_encode($data);
$ch = curl_init('https://api.zarinpal.com/pg/v4/payment/request.json');
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v1');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData)
));
$result = curl_exec($ch);
$err = curl_error($ch);
$result = json_decode($result, true, JSON_PRETTY_PRINT);
curl_close($ch);
if ($err) {
echo "cURL Error #:" . $err;
} else {
if (empty($result['errors'])) {
if ($result['data']['code'] == 100) {
return Redirect::to("https://www.zarinpal.com/pg/StartPay/" . $result['data']["authority"]);
// header('Location: https://www.zarinpal.com/pg/StartPay/' . $result['data']["authority"]);
}
} else {
echo 'Error Code: ' . $result['errors']['code'];
echo 'message: ' . $result['errors']['message'];
}
}
کالبک:
$Authority = $_GET['Authority'];
$data = array("merchant_id" => $merchant_id, "authority" => $Authority, "amount" => Session::get('sms_payment_cost'));
$jsonData = json_encode($data);
$ch = curl_init('https://api.zarinpal.com/pg/v4/payment/verify.json');
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v4');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData)
));
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
if (isset($result['errors']['code'])) {
echo 'code: ' . $result['errors']['code'];
echo 'message: ' . $result['errors']['message'];
}
if (isset($result['data']['code']) && $result['data']['code']== 100) {
$referenceId = $result['data']['ref_id'];
return Redirect::to('/admin/dashboard')->with('success', 'عملیات با موفقیت انجام شد.');
}
@miladparsi1070 سلام اگه میشه در مورد فانکشن کالبک بیشتر توضیح بدید کجا عملیات ها مثل تغییر وضعیت صورتحساب به پرداخت شده رو انجام میدید؟
@khanzadimahdi من جدید در پکیج شتابت وقتی میخواهم با زرین پال پرداخت کنم در زمان برگشتش مقدار 3 رو بر میگردونه وعملیات انجام نمیشه
سلام درگاه زرین پال رو با توجه به اخرین ورژن ای پی آی که ارائه دادن بروز رسانی کردم. لطفا پکیج رو اپدیت کنید و فایل کانفیگ پکیج رو حذف کنید و دوباره پابلیش کنید.
سلام من داخل گیت هاب پیام گذاشتم ولی پاخ ندادین...اینجا هم پیام میدم:
منم مشکل در وریفای دارم و پیغام میده که اوسط کاربر لغو شد... درگاه منم زرینپال و نکاتی که توی گیت گفتید رو انجام دادم ولی همچنان همون پیغامو میده
توی کمپوزر لاک دوتا ورژن هست :
"name": "shetabit/multipay",
"version": "v1.16.0",
"source": {
"type": "git",
"url": "https://github.com/shetabit/multipay.git",
"reference": "8b9470a616cf1b3a8f1745795335200ad4f39592"
},
و
"require": {
"illuminate/broadcasting": "^5.0|^6.0|^7.0|^8.0|^9.0",
"illuminate/support": "^5.0|^6.0|^7.0|^8.0|^9.0",
"php": ">=7.2",
"shetabit/multipay": "^1.0"
},
کدی که درخواست به درگاه انجام میشه:
use Shetabit\Multipay\Exceptions\InvalidPaymentException;
use Shetabit\Multipay\Invoice;
use Shetabit\Payment\Facade\Payment;
$invoice = new Invoice;
$invoice->amount(1000);
$resultpay = Payment::purchase($invoice, function ($driver, $transactionId) {})
->pay()->toJson();
و کدی که قراره درخواست وریفای انجام بشه:
use Shetabit\Multipay\Exceptions\InvalidPaymentException;
use Shetabit\Multipay\Invoice;
use Shetabit\Payment\Facade\Payment;
$transaction = \DB::table('transaction')
->where('transaction_id', $request->transaction_id)
->first();
try {
$receipt = Payment::amount(1000)->transactionId($transaction->transaction_id)->verify();
$result = $receipt->getReferenceId();
} catch (InvalidPaymentException $exception) {
$result = $exception->getMessage();
}
return $result;
سلام دوباره
10 روز گذشته کسی نیست جواب بده 🙁 خیلی فوریه بیزحمت راهنمایی کنید
@khanzadimahdi
@hesammousavi
@meysam.ssarmadd سلام. درگاه زرین پال تغییر کرده و من درایورش رو اپدیت کردم. لطفا پکیج رو اپدیت کنید و مشکل شما حل میشه.
پکیج multipay رو به اخرین ورژن اپدیت کنید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟