با استفاده از این سرویس، خریدار پرداختهای آنلاین خود را بدون نیاز به ورود به درگاه پرداخت اینترنتی و وارد کردن اطلاعات کارت بانکی انجام میدهد.
ابتدا جهت فعالسازی این سرویس برای درگاه خود تیکت (opens new window) ارسال نمایید.
در مرحله اول پذیرندگان باید پارامترهای موجود در جدول زیر را ، با توجه به نوع دادهها و نام فیلد، با متد POST
به آدرس مشخص شده ارسال نمایند.
نام | نوع | الزام | توضیحات |
---|---|---|---|
merchant_id | String | بله | كد 36 كاراكتری اختصاصی درگاه پذیرنده |
mobile | String | بله | شماره تماس خریدار |
ssn | String | خیر | کد ملی خریدار |
expire_at | String | بله | تاریخ انقضای قرارداد پرداخت مستقیم ( مدت قرارداد حداقل باید ۳۰ روز باشد ) |
max_daily_count | String | بله | حداکثر تعداد تراکنش روزانه |
max_monthly_count | String | بله | حداکثر تعداد تراکنش ماهانه |
max_amount | String | بله | حداکثر مبلغ تراکنش به ریال |
callback_url | String | بله | صفحه بازگشت پس از بستن قرارداد |
پاسخ برگشتی توسط این درخواست به شرح زیر است :
نام | نوع | توضیحات |
---|---|---|
payman_authority | String | مقدار آتوریتی پیمان که میبایست ذخیره کنید |
code | Integer | عددی كه نشان دهنده موفق بودن یا موفق نبودن پرداخت است. |
message | String | پیام موفقیت آمیز بودن درخواست |
errors | Array | در صورت وجود خطا کد خطا و پیام آن را برمیگرداند |
https://api.zarinpal.com/pg/v4/payman/request.json
مثال :
نمونه درخواست
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.zarinpal.com/pg/v4/payman/request.json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"merchant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"mobile": "09123456789",
"ssn": "0480123456",
"expire_at": "2025-04-08 00:00:00",
"max_daily_count": "100",
"max_monthly_count": "1000",
"max_amount": "50000",
"callback_url": "https://your-site.com/direct"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
{
"data": {
"payman_authority": "payman_6moa",
"code": 100,
"message": "Success"
},
"errors": []
}
تمامی دادههای برگشتی از زرینپال به صورت json می باشد.
برای بستن قرار داد با بانک میبایست bank_code
بانکی که میخواهید خریدار با آن قرار داد ببندد را داشته باشید
برای دریافت bank_code
یک درخواست GET
به آدرس مشخص شده ارسال کنید
پاسخ برگشتی توسط این درخواست به شرح زیر است :
نام | نوع | توضیحات |
---|---|---|
banks | Array | لیست بانک های موجود |
name | String | نام بانک |
slug | String | نام اسلاگ بانک |
bank_code | String | مقدار bank_code که جهت بستن قرارداد با بانک مورد نظر نیاز دارید |
max_daily_amount | Integer | حداکثر مبلغ روزانه که بانک قبول به پرداخت میکند |
max_daily_count | یا null | حداکثر تعداد تراکنش روزانه ای که بانک قبول به پرداخت میکند. در صورت null بودن : محدودیتی ندارد |
code | Integer | عددی كه نشان دهنده موفق بودن یا موفق نبودن پرداخت است. |
message | String | پیام موفقیت آمیز بودن درخواست |
errors | Array | در صورت وجود خطا کد خطا و پیام آن را برمیگرداند |
https://api.zarinpal.com/pg/v4/payman/banksList.json
نمونه پاسخ لیست بانک ها
{
"data": {
"banks": [
,
{
"name": "بانک سامان",
"slug": "Saman",
"bank_code": "SABCIR",
"max_daily_amount": 100000000,
"max_daily_count": 25
},
{
"name": "بانک سينا",
"slug": "Sina",
"bank_code": "SINAIR",
"max_daily_amount": 100000000,
"max_daily_count": null
}
],
"code": 100,
"message": "Success"
},
"errors": []
}
پس از دریافت authority
و bank_code
مقادیر را در لینک مشخص شده قرار دهید و کاربر را به صفحه بانک هدایت کنید
https://www.zarinpal.com/pg/StartPayman/{payman_authority}/{bank_code}
بعد از پایان عملیات در سمت زرینپال، خریدار از صفحه بستن قرارداد باز میگردد.
در این مرحله با توجه به نتیجه قرارداد و وضعیت آن، بانک خریدار را به آدرس درخواستی پذیرنده که در ارسال اطلاعات با پارامتر callback_url
مشخص شده است، هدایت میکند.
توجه داشته باشید كه یك Status به صورت QueryString به سایت پذیرنده ارسال میشود كه دارای دو مقدار ثابت ”OK“ و ”NOK“ است؛ در صورتی كه این مقدار برابر ”NOK“ باشد، به این معنا است كه بست قرارداد ناموفق بوده یا توسط خریدار لغو شده است؛ درنتیجه متد دریافت signature که در زیر آمده است باید در صورتی استفاده شود كه در QueryString مقدار Status برابر با ”OK“ باشد.
نمونه موفق :
https://your-site.ir/?payman_authority=payman_6moa&status=OK
نمونه ناموفق :
https://your-site.ir/?payman_authority=payman_6moa&status=NOK
پس از بستن قرارداد موفق میبایست با استفاده از این متد signature
را دریافت نمایید
برای دریافت signature
میبایست یک درخواست با متد POST
به آدرس مشخص شده حاوی مقادیر زیر ارسال کنید :
نام | نوع | الزام | توضیحات |
---|---|---|---|
merchant_id | String | بله | كد 36 كاراكتری اختصاصی درگاه پذیرنده |
payman_authority | String | بله | مقدار آتوریتی پیمان که در متد ارسال اطلاعات دریافت کردید |
پاسخ برگشتی توسط این درخواست به شرح زیر است :
نام | نوع | توضیحات |
---|---|---|
signature | String | مقدار signature حاوی ۲۰۰ کاراکتر که میبایست ذخیره کنید |
code | Integer | عددی كه نشان دهنده موفق بودن یا موفق نبودن پرداخت است. |
message | String | پیام موفقیت آمیز بودن درخواست |
errors | Array | در صورت وجود خطا کد خطا و پیام آن را برمیگرداند |
اطلاعات قرارداد اعم از : payman_authority
و signature
باید به صورت امن توسط پذیرنده نگهداری شود با استفاده از این اطلاعات، پرداخت به صورت مسقیم انجام می شود.
https://api.zarinpal.com/pg/v4/payman/verify.json
مثال
نمونه درخواست
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.zarinpal.com/pg/v4/payman/verify.json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"merchant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"payman_authority": "payman_6moa"
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
{
"data": {
"signature": "eyJpdiI6InpoUHZoT0hPZjdNNj...",
"code": 100,
"message": "Success"
},
"errors": []
}
حال جهت انجام یک تراکنش مستقیم میبایست از طریق قسمت درخواست پرداخت یک پرداخت ایجاد کرده و Authority
دریافت کنید.
سپس از طریق متد Checkout که در زیر آمده است برای پرداخت تراکنش استفاده میکنید.
برای پرداخت تراکنش ایجاد شده میبایست یک درخواست با متد POST
به آدرس مشخص شده ارسال نمایید که حاوی مقادیر زیر است :
نام | نوع | الزام | توضیحات |
---|---|---|---|
merchant_id | String | بله | كد 36 كاراكتری اختصاصی درگاه پذیرنده |
authority | String | بله | مقدار آتوریتی تراکنشی که از درخواست پرداخت دریافت کردید. |
signature | String | بله | مقدار signature که از متد دریافت Signature دریافت کردید. |
پاسخ برگشتی توسط این درخواست به شرح زیر است :
نام | نوع | توضیحات |
---|---|---|
refrence_id | Integer | در صورتی كه پرداخت موفق باشد، شماره تراكنش پرداخت انجام شده را بر میگرداند. |
amount | Integer | مبلغ تراکنش ( به ریال ) |
code | Integer | عددی كه نشان دهنده موفق بودن یا موفق نبودن پرداخت است. |
message | String | پیام موفقیت آمیز بودن درخواست |
errors | Array | در صورت وجود خطا کد خطا و پیام آن را برمیگرداند |
https://api.zarinpal.com/pg/v4/payman/checkout.json
مثال
نمونه درخواست
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.zarinpal.com/pg/v4/payman/verify.json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"merchant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"authority": "A0000000000000000000000000002vm5y3lo",
"signature": "eyJpdiI6InpoUHZoT0hPZjdNNj...",
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
{
"data": {
"refrence_id": 53114978001,
"amount": 2000,
"code": 100,
"message": "Success"
},
"errors": []
}
برای لغو یک قرارداد پرداخت مستقیم میبایست یک درخواست با متد POST
به آدرس مشخص شده حاوی مقادیر زیر ارسال کنید :
نام | نوع | الزام | توضیحات |
---|---|---|---|
merchant_id | String | بله | كد 36 كاراكتری اختصاصی درگاه پذیرنده |
signature | String | بله | مقدار signature که از متد دریافت Signature دریافت کردید. |
پاسخ برگشتی توسط این درخواست به شرح زیر است :
نام | نوع | توضیحات |
---|---|---|
code | Integer | عددی كه نشان دهنده موفق بودن یا موفق نبودن لغو پرداخت مستقیم است. |
message | String | پیام موفقیت آمیز بودن درخواست |
errors | Array | در صورت وجود خطا کد خطا و پیام آن را برمیگرداند |
پذیرنده حتما میبایست با این API یک بخشی برای خریداران خود ایجاد کند تا کاربرانی که پرداخت مستقیم ثبت کرده اند در هر زمان دلخواهی که تمایل به لغو پرداخت مستقیم خود داشتند سرویس پرداخت مستقیم را برای قرارداد خود غیرفعال کند در صورت عدم پیاده سازی این بخش، زرین پال میتواند کل سرویس را غیرفعال کند
https://api.zarinpal.com/pg/v4/payman/cancelContract.json
مثال
نمونه درخواست
<?php
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://api.zarinpal.com/pg/v4/payman/cancelContract.json',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS =>'{
"merchant_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"signature": "eyJpdiI6InpoUHZoT0hPZjdNNj...",
}',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Accept: application/json'
),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
{
"data": {
"code": 100,
"message": "Success"
},
"errors": []
}
برای وریفای کردن تراکنش مورد نظر میتوانید از متد اعتبارسنجی در مستندات بخش راهنمای اتصالات استفاده کنید