سلام من سایت ام رو میخوام به درگاه پرداخت وصل کنم...الان وارد درگاه میشه ولی بعد خرید اتفاقی نمیافته و صفحه 404 میاد
من روت اش رو درست کردم که بعد از خرید به اون هدایت شه(روت دوم) ولی انگار وارد اون مسیر نمیشه چون var dump هم گرفتم چیزی برام نیومد.
(کاری که میخوام بکنم این که اگه خرید موفقیت آمیز بود اطلاعات کاربر وارد جدول افرادی شه که اشتراک سایت رو تهیه کردن)
روت ها:
Route::get('/zarinpalpay', [PaymentController::class , 'zarinpalpay']);
Route::get('/zarinpalVerify/{Payment}',[PaymentController::class ,'zarinpalVerify']);
کنترلر:
فانکشن اول:
function zarinpalpay(User $user) {
$payment = Payment::create([
// "order_id"=>$order->id,
"bank"=>"zarinpal"
]);
$zarinpal = new zarinPal([
"merchantId" => "",
]);
try {
$request = $zarinpal->apiRequest([
"callbackurl" => "http://127.0.0.1:8000/zarinpalVerify",
"amount" => 10000,
"description" => "خرید اشتراک",
"email" => auth()->user()->email,
"mobile" => "09120000000",
]);
$payment->requestInfo = $request;
$payment->save();
$requestDecoded = json_decode($request);
return redirect()->intended($requestDecoded->url);
} catch (\Exception $error) {
var_dump(json_decode($error->getMessage()));
}
}
فانکشن دوم:
function zarinpalVerify(Payment $payment) {
var_dump('yes');
$zarinpal = new zarinPal([
"merchantId" => "",
]);
// $order = Order::find($payment->order_id);
$reqinfo = json_decode($payment->requestInfo);
try {
$verify = $zarinpal->verify([
"authority" => $reqinfo->authority,
"amount" => 10000
]);
$verifyDecoded = json_decode($verify);
if ($verifyDecoded->code == 100 || $verifyDecoded->code == 101) {
$payment->status = 1;
// echo "پرداخت با موفقیت انجام شد.";
// $user = Auth()->user();
// $times = sub::where('user_id',$user->id)->count();
// if($times == 0)
// {
// $sub = new sub([
// 'name' => $user->name,
// 'email' => $user->email,
// 'gender' => $user->gender,
// 'age' => $user->age,
// 'expired' => Carbon::now()->addDay(30),
// 'times' => '1',
// 'user_id' => $user->id,
// ]);
// $sub->save();
// } else {
// $old_times = sub::where('user_id',$user->id)->selest('times')->get();
// $sub = new sub([
// 'times' => $old_times + 1,
// 'expired' => Carbon::now()->addDay(30),
// ]);
// $sub->save();
// }
// session()->flash('خرید اشتراک با موفقیت انجام شد.');
}
$payment->verifyinfo = $verify;
} catch (\Exception $err) {
$payment->verifyinfo = $err->getMessage();
// var_dump($err->getMessage());
session()->flash('خطایی صورت گرفت! پرداخت موفقیت آمیز نبود.');
}
$payment->save();
return view('account');
}
(تو فانکشن دوم که 10 15 خط رو کامنت کردم مربوط به ذخیره کاربر تو جدول افرادی که اشتراک گرفتن و به درگاه مربوط نیست)
سلام
معمولا باید یک لینک برای برگشت در هنگام فرستادن کاربر به درگاه بفرستید و این تست را باید در دامنه مشخص شده انجام دهید.
در قسمت زیر Payment را با حروف کوچک بنویسید
Route::get('/zarinpalVerify/{payment}',[PaymentController::class ,'zarinpalVerify']);
و اینکه در تابع zarinpalVerify
مقدار request را قرار دهید و به صورت زیر تغییر دهید. چون که شناسه payment را نمیتواند پیدا کند به کنترل شما نمیرسد و ۴۰۴ را برمیگرداند.
function zarinpalVerify(Request $request) {
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟