دسته بندی : نمونه کد ها | نمونه کد استفاده از درگاه زرین پال به زبان PHP بر اساس استاندارد REST

نمونه کد استفاده از درگاه زرین پال به زبان PHP بر اساس استاندارد REST

آخرین بروزرسانی دی 6, 1399.

 


کد نمونه شامل ٢ فايل می باشد که به سادگی قابل استفاده می باشند. توصيه می شود جهت استفاده از webservice ابتدا راهنمای استفاده از وب سرويس زرين پال را مطالعه نماييد.


نمونه ی کد ایجاد شناسه ی پرداخت و ارجاع کاربر به درگاه پرداخت زرین پال :




<?php

$data = array("merchant_id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"amount" => 1000,
"callback_url" => "http://www.yoursite.com/verify.php",
"description" => "خرید تست",
"metadata" => [ "email" => "info@email.com","mobile"=>"09121234567"],
);
$jsonData = json_encode($data);
$ch = curl_init('https://api.zarinpal.com/pg/v4/payment/request.json');
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v1');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData)
));

$result = curl_exec($ch);
$err = curl_error($ch);
$result = json_decode($result, true, JSON_PRETTY_PRINT);
curl_close($ch);



if ($err) {
echo "cURL Error #:" . $err;
} else {
if (empty($result['errors'])) {
if ($result['data']['code'] == 100) {
header('Location: https://www.zarinpal.com/pg/StartPay/' . $result['data']["authority"]);
}
} else {
echo'Error Code: ' . $result['errors']['code'];
echo'message: ' . $result['errors']['message'];

}
}
?>

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




<?php
$Authority = $_GET['Authority'];
$data = array("merchant_id" => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "authority" => $Authority, "amount" => 1000);
$jsonData = json_encode($data);
$ch = curl_init('https://api.zarinpal.com/pg/v4/payment/verify.json');
curl_setopt($ch, CURLOPT_USERAGENT, 'ZarinPal Rest Api v4');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($jsonData)
));

$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result, true);
if ($err) {
echo "cURL Error #:" . $err;
} else {
if ($result['data']['code'] == 100) {
echo 'Transation success. RefID:' . $result['data']['ref_id'];
} else {
echo'code: ' . $result['errors']['code'];
echo'message: ' . $result['errors']['message'];
}
}
?>

لینک دانلود دانلود نمونه کد
(62,248 دانلود)
لینک اشتراک گذاری
نظرات
محسن صفری - 1396/01/25 15:25

کد مربوط به request دو تا ایراد داره. نام پارامتر ارسالی به توابع curl_error و curl_close باید از curl$ به ch$ تغییر کنه.

عباس - 1396/05/14 12:10

بله این موارد اصلاح شده اند.

mahdi - 1396/08/26 12:34

سلام .میشه کاری کرد که از سسمت بانک موارد ارسالی به صورت post برگردند

عباس - 1396/09/01 14:37

سلام
خیر

reza - 1397/01/29 12:34

از nusoap میشه استفاده کرد؟

عباس - 1397/03/31 19:04

بله در آزمایشگاه نمونه کد موجود است.

محمد غفاری فر - 1397/02/02 15:05

سلام سرویس sandbox برای rest api موجود نیست ؟

عباس - 1397/02/03 18:50

ُسلام
برای Rest هم به همین ترتیب میتونید استفاده کنید. لینک ها به شکل زیر خواهند بود»

https://sandbox.zarinpal.com/pg/rest/WebGate/PaymentRequest.json
https://sandbox.zarinpal.com/pg/StartPay/

https://sandbox.zarinpal.com/pg/rest/WebGate/PaymentVerification.json

بهروز - 1397/02/19 17:40

با سلام زمانی که پرداخت رو انجام میدم پیغام پرداخت با موفقیت انجام شد رو نمایش میده اما مقدار زیر رو برمیگردونه
Transation failed. Status:-33
مشکل از کجا هست ؟

عباس - 1397/02/26 19:16

سلام
رقم تراکنش با رقم پرداخت شده مطابقت ندارد. مستندات فنی را مطالعه کنید.

امیر - 1397/03/11 12:28

سلام ببخشید من الان در فایل اول با $_GET قیمت رو از کاربر دریافت میکنم
در فایل دوم که وریفای یا Verify.php هست چطور بهش متغیر رو بدم ؟
خیلی ممنون !

عباس - 1397/03/31 18:26

سلام
میتوانید در ابتدای پرداخت، مبلغ را به صورت کوئری استرینگ به لینک callback اضافه کنید. البته این روش صحیح نیست و باید مبلغ را در برگشت از پرداخت، از دیتابیس خود دریافت کنید و تراکنش را وریفای کنید.

Mobin - 1397/03/24 02:29

سلام
آدرس زرین گیت برای rest چیه؟

عباس - 1397/03/30 19:51

سلام
کافیست در انتهای لینک پرداخت، بعد از اتوریتی عبارت ZarinGate را اضافه کنید. (/ZarinGate)

شجاعی - 1397/03/27 15:10

زمانی که تابع payment را فراخوانی میکنم ، Authority , status به عنوان resualt برگردانده میشوند اما
Location:https://www.zarinpal.com/pg/StartPay/‘.$result[“Authority”] این ادرس لود نمیشود و پیغام زیر ظاهر میشود .
Failed to load https://www.zarinpal.com/pg/StartPay/000000000000000000000000000077601382: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://mysite.com’ is therefore not allowed access.
لطفا برای رفع مشکل راهنمایی کنید.

عباس - 1397/03/30 19:33

سلام
صدا کردن متدهای پرداخت زرین پال می بایست از داخل سرور باشد و نمیتوانید در سمت کلاینت با جاوا اسکریپت یا روشهای دیگر، متدهای پرداخت را فراخوانی کنید؛ چون این محدودیت از سمت زرین پال برای وبسرویسها درنظر گرفته شده است و باید از زبان‌های تحت سرور نظیر net ، php و یا nodejs استفاده نمایید. برای مثال میتوانید در سمت سرور با php، متد PaymentRequest را اجرا کرده و اتوریتی را دریافت کنید و سپس به صورت Ajax به صفحه کلاینت ارسال کنید و جهت ریدایرکت یا انتقال کاربر به لینک پرداخت از آن استفاده کنید.

امیر قاسم نژاد مقدم - 1397/05/15 11:20

سلام و خسته نباشید.
api token تست برای برنامه نویسان کجا نوشته شده و اگر ممکنه بگید چه چیزی هست؟

عباس - 1397/06/04 00:03

سلام تشکر
جهت تست میتوانید از سندباکس استفاده کنید.
برای کددرگاه هم میتوانید 00 قرار دهید.

ارسال نظر