راکت
حل
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