امین
11 ماه پیش توسط امین مطرح شد
1 پاسخ

اتصال سایت به درگاه پرداخت

سلام من سایت ام رو میخوام به درگاه پرداخت وصل کنم...الان وارد درگاه میشه ولی بعد خرید اتفاقی نمیافته و صفحه 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 خط رو کامنت کردم مربوط به ذخیره کاربر تو جدول افرادی که اشتراک گرفتن و به درگاه مربوط نیست)


ثبت پرسش جدید
سینا شاه‌اویسی
تخصص : برنامه نویس فرانت اند
@sinashahoveisi 11 ماه پیش مطرح شد
0

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

Route::get('/zarinpalVerify/{payment}',[PaymentController::class ,'zarinpalVerify']); 

و اینکه در تابع zarinpalVerify مقدار request را قرار دهید و به صورت زیر تغییر دهید. چون که شناسه payment را نمیتواند پیدا کند به کنترل شما نمیرسد و ۴۰۴ را برمیگرداند.

function zarinpalVerify(Request $request) {

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

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