حسین شیری نژاد
3 سال پیش توسط حسین شیری نژاد مطرح شد
1 پاسخ

استفاده از درگاه پارس پال

سلام دوستان دارم از درگاه پارس پال تو برنامم استفاده میکنم اما هنگامی که اولین درخواستمو ارسال میکنم با این خطا روبرو میشم

{"Message":"An error has occurred."}

فعلا دارم به صورت تستی کار میکنم و برای تست از توکن

00000000aaaabbbbcccc000000000000

استفاده میکنم و api تستی هم هست

https://sandbox.api.parspal.com/v1/payment/request

: اینم لینک درگاست
این روتهام هست

Route::get('/peyment', function() {
    $order = Order::first();

    $result = ParsPal::request($order);

    if ($result === 'ConnectionFailure') {

    } else {
        echo $result;
    }
});

Route::post('/parspal/callback', function() {
    $result = ParsPal::verify();

    if ( isset($result['status']) && $result['status'] === 'SUCCESSFUL' ) {
        //پرداخت با موفقیت انجام شده و محصول به مشتری تحویل داده میشود
    } else if ($result == 'ConnectionFailure') {
        echo $result;
    } else {
        echo $result;
    }
});

و اینم کلاس اصلی پرداخت:

<?php
namespace App\lib\ParsPal;
use App\Models\Order;

class ParsPal {

    const PARS_URL = "https://sandbox.api.parspal.com/v1/payment/request";

    // public function __constructor($url = "https://sandbox.api.parspal.com/v1/payment/request")
    // {
    //     self::PARS_URL = $url;
    // }

    /**
     * متد درخواست برای پرداخت
     */
    public static function request(Order $order)
    { 
        $postData = [
            'amount' => $order->price,
            'return_url' => env('PARS_PAL_RETURN_URL'),
            'order_id' => $order->id,
            'reserve_id' => $order->id,
            'currency' => 'IRR',

            'payer' => [
                'name' => $order->user->name,
                'mobile' => optional($order->user)->mobile,
                'email' => $order->user->email,
            ]
        ];
        $curl = curl_init();

        curl_setopt($curl, CURLOPT_POST, TRUE);

        // curl_setopt($curl, CURLOPT_URL, "https://api.parspal.com/v1/payment/request");

        curl_setopt($curl, CURLOPT_URL, self::PARS_URL);

        curl_setopt($curl, CURLOPT_HTTPHEADER, [
            "APIKEY: " . env('PARS_PAL_API_KEY'),
            "Content-Type: application/json"
        ]);

        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($postData));

        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

        curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
        $result = curl_exec($curl);

        if (!$result) {
            return "ConnectionFailure";
        }

        curl_close($curl);

        $response = json_decode($result, true);

        $status  = $response["status"];

        if ($status == "ACCEPTED") {
            $payment_link = $response["link"];

            $payment_id = $response["payment_id"];

            $order->payment_id = $payment_id;

            $order->save();

            return redirect($payment_link);
        } else {
            $message = $response["message"];

            return "خطا در ثبت درخواست پرداخت! وضعیت خطا : " . $status . " - توضیحات : " . $message;
        }
    }

    /**
     * متد تایید صحت پرداخت
     */
    public static function verify()
    {
        if ( request()->has('status') && request()->get('status') == 100 ) { 
            $receipt_number = request()->get("receipt_number"); 

            $order_id = request()->get("order_id"); 

            $payment_id = request()->get("payment_id"); 

            $order = Order::where([
                'id' => $order_id,
                'payment_id' => $payment_id
            ])->firstOrFail();

            $amount = $order->price;

            $postData = [
                'amount' => $amount,
                'receipt_number' => $receipt_number
            ];

            $curl = curl_init();

            curl_setopt($curl, CURLOPT_POST, TRUE);

            curl_setopt($curl, CURLOPT_URL, 'https://api.parspal.com/v1/payment/verify');

            curl_setopt($curl, CURLOPT_HTTPHEADER, [
                "APIKEY: " . env('PARS_PAL_API_KEY'),
                "Content-Type: application/json"
            ]);

            curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($postData));

            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);

            curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);

            $result = curl_exec($curl);

            if (!$result) {
                return "ConnectionFailure";
            }

            curl_close($curl);

            $response = json_decode($result, true);

            $status  = $response["status"];

            if ($status == "SUCCESSFUL") {
                $order->status = 'Paid';

                $order->receipt_number = $receipt_number;

                $order->save();

                return ['status' => "SUCCESSFUL", 'order' => $order];
            } else {
                $message = $response["message"];

                return "خطا در تایید رسید پرداخت ! وضعیت خطا : " . $status . " - توضیحات : " . $message;
            }
        } else {
            switch ( request()->get('status') ) {
                case 99:
                    return 'انصراف کاربر از پرداخت';

                case 88:
                    return 'پرداخت ناموفق';

                case 77:
                    return 'لغو پرداخت توسط کاربر';

                default:
                    return 'اطلاعاتی از صفحه پرداخت دریافت نشد !';
            }
        }
    }
}

ممنون میشم راهنمایی کنید
@mhyeganeh
@endworld
@hesammousavi
@ali.bayat
@Alimotreb


ثبت پرسش جدید
حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 3 سال پیش مطرح شد
1

کاربر گرامی ، به دلیل موارد امنیتی ، شما می بایست جهت استفاده از API تست از کلید API واقعی مربوط به وب سایت خود در این مسیر استفاده نمایید.


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

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