سلام دوستان دارم از درگاه پارس پال تو برنامم استفاده میکنم اما هنگامی که اولین درخواستمو ارسال میکنم با این خطا روبرو میشم
{"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
کاربر گرامی ، به دلیل موارد امنیتی ، شما می بایست جهت استفاده از API تست از کلید API واقعی مربوط به وب سایت خود در این مسیر استفاده نمایید.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟