علیرضا مه آبادی
3 سال پیش توسط علیرضا مه آبادی مطرح شد
8 پاسخ

سوال در ارتباط با کال بک زرین پال در لاراول

درود و سلام یک سوال داشتم این کدی که می فرستم مربوط به درگاه پرداخت زرین پال هست 2 تا سوال داشتم اول اینکه کدوم خط کد مربوط به موفقیت پرداخت هست چون می خوام ایمیل و نوتیفیکیشن برای کاربر ارسال کنم ؟
دوم اینکه برای متد verify چیکار باید کنم دقیقا میشه راهنماییم کنید. باید یک روت بسازم و به کنترلر وصل کنم؟ و داخل کنترلر چه کار کنم؟

class Zarinpal implements GatewayInterface
{
    public function pay(Order $order)
    {
        $data = array(
            "merchant_id" => env('MERCHENT_ID'),
            "amount" => $order->price * 10,
            "callback_url" => env('ZARINPAL_CALLBACK'),
            "description" => "",
            "metadata" => ["email" => ""],
        );

        $client = Http::post('https://api.zarinpal.com/pg/v4/payment/request.json', $data);

        if ($client->successful()) {
            $response = json_decode($client->body());

            if (!empty($response->errors))
                return redirect('/');

            if ($response->data->code == 100)
            {
                $order->authority = $response->data->authority;
              //  $order->gateway = $this->getName();
                $order->save();

                return redirect("https://www.zarinpal.com/pg/StartPay/{$response->data->authority}");
            }
        }
        return redirect('/');
    }

    public function verify(Request $request): bool
    {
        $Authority = $_GET['Authority'];
        $order = Order::where('authority', $Authority)->firstOrFail();
        $data = array(
            "merchant_id" => env('MERCHENT_ID'),
            "authority" => $Authority,
            "amount" => $order->price * 10
        );

        $client = Http::post('https://api.zarinpal.com/pg/v4/payment/verify.json', $data);

        if ($client->successful()) {
            $response = json_decode($client->body());

            if (!empty($response->errors)) {
                $order->statusFailed();
                return false;
            }

            if ($response->data->code == 100) {
                $order->refid = $response->data->ref_id;
                $order->statusSuccess();
                $order->save();

                return true;
            }
            $order->statusFailed();
            return false;
        }

        $order->statusFailed();
        return false;
    }

    public function getName(): string
    {
        return 'zarinpal';
    }
}

ثبت پرسش جدید
karakar
تخصص : برنامه نویس
@karyabi1395 3 سال پیش مطرح شد
2

خط 53 تا 59 برای پرداخت موفق هست


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 3 سال پیش مطرح شد
0

@karyabi1395 سپاس برای سوال دومم هم ایده ای دارید مهندس؟


احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش آپدیت شد
1

سلام به شما
من زرین پال کار نکردم اما منطق رو بهتوت توضیح میدم. همه درگاه های پرداخت یک لینک برگشت از شما میگیرن برای تایید پرداخت و یا ثبت اطلاعات در دیتابیس و یا برگشت کاربر به صفحه دانلود محصول و یا ... بستگی به کار سایت شما داره. و اینکه بله، شما باید یک مسیر (Route) جدید بسازید و اون رو داخل فایل env قرار بدید :

"callback_url" => env('ZARINPAL_CALLBACK'),

حالا وقتی که کاربر پرداخت رو انجام میده، یکسری اطلاعات از سایت زرین پال برای این مسیر ارسال میشه و کاربر رو به این مسیر هدایت میکنه، حالا شما اطلاعات رو دریافت میکنید و اونارو داخل دیتابیس ثبت میکنید و به کاربر پیغام مناسبی رو نمایش میدید. داخل مستندات زرین پال نوشته که چه اطلاعاتی به مسیر بازگشتی (CallBack URL) ارسال میشه اما اگه متوجه نشدید میتونید یکبار تست کنید، مثلا یه بار پرداخت رو انجام بدید و داخل تابع verify بگید تمام اطلاعات رو echo یا print کن و یا در جایی ذخیره کن، با اینکارو کامل میتونید بررسی کنید که چه چیز هایی بر میگرده ...

امیدوارم خوب توضیح داده باشم.
اگر باز سوالی داشتید بنده رو مخاطب (@ehsndvr) قرار بدید.


علیرضا مه آبادی
تخصص : در حال یادگیری لاراول
@aliasgharkashani1379 3 سال پیش مطرح شد
0

@ehsndvr اقا احساس میشه لطف کنید و بگید دقیق چ کار کنم باید یه روت تعریف کنم و به یک کنترلر متصل کنم و داخل کنترلر چی باشه؟؟
و اینجا داخل callback url که env هست چه چیزی رو باید قرار بدم؟؟

class Zarinpal implements GatewayInterface
{
    public function pay(Order $order)
    {
        $data = array(
            "merchant_id" => env('MERCHENT_ID'),
            "amount" => $order->price * 10,
            "callback_url" => env('ZARINPAL_CALLBACK'),
            "description" => "",
            "metadata" => ["email" => ""],
        );

        $client = Http::post('https://api.zarinpal.com/pg/v4/payment/request.json', $data);

        if ($client->successful()) {
            $response = json_decode($client->body());

            if (!empty($response->errors))
                return redirect('/');

            if ($response->data->code == 100)
            {
                $order->authority = $response->data->authority;
              //  $order->gateway = $this->getName();
                $order->save();

                return redirect("https://www.zarinpal.com/pg/StartPay/{$response->data->authority}");
            }
        }
        return redirect('/');
    }

    public function verify(Request $request): bool
    {
        $Authority = $_GET['Authority'];
        $order = Order::where('authority', $Authority)->firstOrFail();
        $data = array(
            "merchant_id" => env('MERCHENT_ID'),
            "authority" => $Authority,
            "amount" => $order->price * 10
        );

        $client = Http::post('https://api.zarinpal.com/pg/v4/payment/verify.json', $data);

        if ($client->successful()) {
            $response = json_decode($client->body());

            if (!empty($response->errors)) {
                $order->statusFailed();
                return false;
            }

            if ($response->data->code == 100) {
                $order->refid = $response->data->ref_id;
                $order->statusSuccess();
                $order->save();

                return true;
            }
            $order->statusFailed();
            return false;
        }

        $order->statusFailed();
        return false;
    }

    public function getName(): string
    {
        return 'zarinpal';
    }
}

مهدی اردشیر
تخصص : یه برنامه نویس
@mehdi0121 3 سال پیش مطرح شد
0

سلام داخل callback اون روتی که سفارش رو تایید می کنه رو باید بذاری
بعدشم برای درگاه زرین پال میتونی از شتابیت استفاده کنی کار خودتو سخت کردی
https://www.zarinpal.com/lab/%D9%BE%DA%A9%DB%8C%D8%AC-%D8%AF%D8%B1%DA%AF%D8%A7%D9%87-%D9%BE%D8%B1%D8%AF%D8%A7%D8%AE%D8%AA-%D8%B2%D8%B1%DB%8C%D9%86-%D9%BE%D8%A7%D9%84-%D8%A8%D8%B1%D8%A7%DB%8C-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84/

https://github.com/shetabit/payment/blob/master/README-FA.md


احسان داوری
تخصص : برنامه نویس
@ehsndvr 3 سال پیش مطرح شد
0

@aliasgharkashani1379 سلام

اصلا نیاز نیست کدش رو خودتون بنویسید، قبلا کدش رو نوشتن ... شما فقط باید از پکیج Zarinpal برای لاراول استفاده کنید.

https://github.com/pishran/Zarinpal


فرشید مرادی
تخصص : noob
@eniack 3 سال پیش مطرح شد
0

سلام ، اول اینکه شما کد اضافه ای قرار نیست بنویسی همه چی‌از قبل نوشته شده شما فقط جای گذاری میکنی...
داخل فایل کانفیگ لاراول یه فایل اضافه شده به اسمshetabit شما داخل این فایل بگرد دنبال زرین پال و ادرس کال بک رو مشخص کن ، باید یه روت بسازی و ادرسش رو وارد کنی
بعد ک کاربر پرداخت انجام داد از خط ۳۳ تا ۶۶ عملیات verify هست که نوشته شده


میلاد خسروی
تخصص : برنامه نویس بامزه
@milwad 3 سال پیش مطرح شد
0

سلام خسته نباشید
وقتی عملیات ثبت میشه اون موقع باید بیای ایمیل بزنی


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

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