Document version: 0.9
اطلاعات عمومی
نقطه پایانی API
https://mp.axtonpay.com/api/v1/private/checkout
Content-type
API درخواستها را با دو نوع محتوا میپذیرد: 'application/x-www-form-urlencoded', 'application/json'.
هدر HTTP باید با محتوای POST بدنه منطبق باشد.
اختصارات و تعاریف
- {PID} - شناسه فاکتور، معمولاً یک رشته ۸ کاراکتری حروف و اعداد یکتا است.
- Shop - وبسایت شما که پرداختها را از طریق سرویس AxtonPay قبول میکند
الگوریتم کار با API
ترتیب معمول اقدامات برای دریافت پرداخت:
- ایجاد یک صورتحساب ('/api/v1/private/checkout/payment/create')، پاسخ API آدرس URL صورتحساب را برمیگرداند ('invoice_url')،
- خریدار را به این فاکتور بفرستید تا پرداخت انجام شود،
- منتظر اعلانهای سرور AxtonPay باشید، که به 'server_notification_url' خواهند آمد،
- پس از دریافت هرگونه اطلاعیه از AxtonPay، اعتبار امضای آن را بررسی کنید و ترجیحاً تأیید دریافت را به AxtonPay ('/api/v1/private/checkout/payment/confirm/{PID}') ارسال کنید،
- اگر وضعیت یک فاکتور تغییر کند، اقداماتی مطابق با این وضعیت انجام دهید (به عنوان مثال، درخواست اطلاعات کامل درباره فاکتور، ارسال کالاها، ایجاد تیکت برای تیم پشتیبانی و غیره).
اگر هنگام ایجاد فاکتور یک 'server_notification_url' خالی یا نامعتبر تنظیم کنید، سرویس قادر به ارسال اعلانها درباره تغییرات وضعیت نخواهد بود؛ در چنین مواردی، شما باید خودتان فاکتور را در فواصل زمانی مشخص بررسی کنید ('/api/v1/private/checkout/payment/get/{PID}').
صدور مجوز درخواستها
برای مجاز کردن یک درخواست، لازم است یک هش از رشتهای که به صورت خاصی تشکیل شده است، محاسبه شود. این رشته با الحاق (چسباندن) آرگومانهای URL (QUERY_STRING) و بدنه درخواست POST (REQUEST_BODY) ساخته میشود. مهم است که همه مؤلفهها دقیقاً به همان صورت که به سرور منتقل میشوند، گرفته شوند. آرگومانهای URL (QUERY_STRING) باید از URL به صورت یک خط گرفته شوند، بدون تغییر ترتیب آرگومانها و بدون حذف هیچ عنصری. بدنه درخواست POST (REQUEST_BODY) نیز باید بدون هیچ گونه تغییری استفاده شود، از جمله اینکه نباید از آن نقلقولها، فاصلهها، براکتها یا شکست خطوط را حذف کرد.
در مواردی که بدنه درخواست POST خالی باشد و در مورد آرگومانهای URL خالی، آن مؤلفه به سادگی رشته خالی خواهد بود.
ترتیب دادهها در درخواست امضا: QUERY_STRING ابتدا، سپس دادههای POST. نباید هیچ علامت اتصالدهندهای بین آنها قرار دهید، فقط دو رشته متنی را به هم بچسبانید.
یک بار دیگر، هر نماد مهم است. شما نباید حتی یک فاصله یا نماد خط جدید را اضافه یا حذف کنید. فقط از داده خام دریافتشده توسط سرور استفاده کنید.
یک SHA-256 هش با کلید 'Secret key' از رشته حاصل گرفته میشود و به عنوان آرگومان دوم تابع hash_hmac() استفاده میشود.
عبور دادن پارامتر 'time' حاوی POSIX timestamp (Unix time) فعلی اجباری است.
این امضا برای ۲۴ ساعت معتبر است. اگر مقدار پارامتر 'time' بیش از ۲۴ ساعت با زمان فعلی سرور تفاوت داشته باشد (چه جلو و چه عقب)، درخواست حتی اگر امضا بدون خطا محاسبه شده باشد، ناموفق خواهد بود.
اگر پنل فروشنده درخواستی را با یک امضا قبول کرده باشد، آن امضا نمیتواند دوباره استفاده شود، حتی برای ارسال همان درخواست با همان پارامترها (این شامل پارامتر 'time' میشود).
هش حاصل در هدر HTTP 'Sign' ارسال میشود.
علاوه بر امضای محاسبه شده، درخواست همچنین باید یک هدر 'Api-Key' شامل کلید API استفاده شده داشته باشد. مثال:
$headers = [
'Api-Key: ' . $the_api_key,
'Sign: ' . $signature_sha256
];
شما میتوانید درخواست ارسال شده به AxtonPay را با هر کلید معتبری که به این چکاوت تعلق دارد امضا کنید. با این حال، AxtonPay همیشه از کلیدی که شما در پنل فروشنده انتخاب کردهاید استفاده میکند.
نمونهای از محاسبه امضا:
/* Imagine there is the POST request: URI: '/api/v1/private/checkout/payment/create?time=1735084500.3561' POST body: '[email protected]&shop_payment_id=INVOICE-1746&pms=all&amount=19.95¤cy=USD' So there are HTTP query string and request body: */ $the_query_string = 'time=1735084500.3561'; $the_request_body = '[email protected]&shop_payment_id=INVOICE-1746&pms=all&amount=19.95¤cy=USD'; // • A pair of 'API key' and 'Secret key' gathered from the admin panel $the_api_key = 'key1'; $the_api_secret = 'secret1'; // • Concatenation: $string_for_sha = $the_query_string . $the_request_body; // Value: '[email protected]&shop_payment_id=INVOICE-1746&pms=all&amount=19.95¤cy=USD' // • Calculating the HTTP header 'Sign' // hash method is SHA-256 $signature_sha256 = hash_hmac("sha256", $string_for_sha, $the_api_secret); // '31ca271a15e45802e07b7559a5f520656c050dda79e6fa46d52a15fc51d193cd' /* • Signed HTTP request: Method: POST URI: '/api/v1/private/checkout/payment/create?time=1735084500.3561' HTTP header 'Api-Key': 'key1' HTTP header 'Sign': '31ca271a15e45802e07b7559a5f520656c050dda79e6fa46d52a15fc51d193cd' POST body: '[email protected]&shop_payment_id=INVOICE-1746&pms=all&amount=19.95¤cy=USD' */
به فاصلهها و شکستهای خط در مثال دیگری توجه کنید:
/*
Imagine there is the POST request:
URI: '/api/v1/private/checkout/payment/create?shop_name=Very%20useful%20service'
POST body: '{
"shop_user_id": "[email protected]",
"shop_payment_id": "INVOICE-1746",
"shop_payment_desc": "Premium service
(1 month)",
"pms": "all",
"amount": "19.95",
"currency": "USD",
"time": "1735084500.3561"
}'
Attention! It's important to keep the raw data 'as is', including all tabulations, whitespaces, and line breaks.
For example, the signature becomes invalid if your software formats json, adds or removes spaces.
So there are such HTTP query string and POST request body:
*/
$the_query_string = 'shop_name=Very%20useful%20service';
$the_request_body = '{
"shop_user_id": "[email protected]",
"shop_payment_id": "INVOICE-1746",
"shop_payment_desc": "Premium service
(1 month)",
"pms": "all",
"amount": "19.95",
"currency": "USD",
"time": "1735084500.3561"
}';
// • A pair of 'API key' and 'Secret key' gathered from the merchant panel
$the_api_key = 'key1';
$the_api_secret = 'secret1';
// • Concatenation:
//
// hash method is SHA-256 (HTTP query string + request body)
$string_for_sha = $the_query_string . $the_request_body;
/* Value: 'shop_name=Very%20useful%20service{
"shop_user_id": "[email protected]",
"shop_payment_id": "INVOICE-1746",
"shop_payment_desc": "Premium service
(1 month)",
"pms": "all",
"amount": "19.95",
"currency": "USD",
"time": "1735084500.3561"
}'
*/
// • Calculating the HTTP header 'Sign'
$signature_sha256 = hash_hmac("sha256", $string_for_sha, $the_api_secret);
// 'ef15476f28b379e4b137a2dcd9ed495332e4766004ac3610bb92a69ba2303c28'
/* • Signed HTTP request:
Method: POST
URI: '/api/v1/private/checkout/payment/create'
HTTP header 'Api-Key': 'key1'
HTTP header 'Sign': 'ef15476f28b379e4b137a2dcd9ed495332e4766004ac3610bb92a69ba2303c28'
POST body: '{
"shop_user_id": "[email protected]",
"shop_payment_id": "INVOICE-1746",
"shop_payment_desc": "Premium service
(1 month)",
"pms": "all",
"amount": "19.95",
"currency": "USD",
"time": "1735084500.3561"
}'
*/
Python نمونهای از ترکیب رشته برای محاسبه امضا:
string_for_hash_calculation = f'{request.query_params.urlencode()}{request.data.urlencode()}'
پارامترها
API تمامی پارامترها را هم در QUERY_STRING و هم در بدنهٔ درخواست POST میپذیرد.
متغیرهای بولی
API انتظار دارد که در متغیرهای بولی '0' یا '1' دریافت کند، اما به دلیل تبدیل نوع ضمنی، هر رشته متنی به عنوان '1' در نظر گرفته میشود، حتی کلمه 'false'. بنابراین، برای تعیین صریح مقدار 'FALSE' برای یک متغیر بولی، باید به آن یا مقدار '0' یا یک رشته خالی بدهید.
جداساز اعشاری
تنها نقطه اعشار به عنوان جداکننده اعشار در اعداد استفاده میشود.
حروف بزرگ و کوچک در پارامترها
با چند استثنا، تمام پارامترها حساس به حروف بزرگ و کوچک هستند.
نشانی اینترنتی بازخوانی
در پنل مدیریت AxtonPay، در صفحه تنظیمات پرداخت، امکان تنظیم آدرسهای اینترنتی فروشگاه برای دریافت اعلانهای سرور به سرور از AxtonPay وجود دارد، همچنین آدرسهایی برای هدایت خریدار پس از پرداخت فاکتور یا لغو آن، و همچنین در صورت بروز خطا، قابل تنظیم است.
این URLها میتوانند در درخواست ایجاد فاکتور بازنویسی شوند.
روشهای AxtonPay API
ایجاد فاکتور: /api/v1/private/checkout/payment/create
روش /api/v1/private/checkout/payment/create ایجاد فاکتور را آغاز میکند.
اگر موفقیتآمیز باشد، این روش یک لینک ('invoice_url') بازمیگرداند که شما باید مشتری را برای پرداخت به آن هدایت کنید.
پارامترهای فاکتور مخصوص خود:
- time (الزامی) - POSIX timestamp (Unix time)
- amount (الزامی) - مقدار قابل پرداخت (قیمت محصول یا خدماتی که فروشگاه میخواهد دریافت کند)
- currency (الزامی) - کد ارز ۳ حرفی طبق ISO 4217-alpha، بدون حساسیت به حروف بزرگ و کوچک
- pms (الزامی) - روشهای پرداخت نمایش داده شده در صفحه فاکتور. اگر میخواهید همه روشهای پرداخت را اجازه دهید، مقدار 'all' است؛ اگر میخواهید فقط برخی از آنها را اجازه دهید، شناسههای عددی آنها را که با ویرگول جدا شدهاند فهرست کنید.
- pm - شناسه روش پرداخت انتخاب شده. مهم است که اگر پارامتر 'pm' ارسال شود، فاکتور در 'حالت شفاف' ایجاد خواهد شد، یعنی خریدار صفحه فاکتور را نخواهد دید و مستقیماً به سیستم پرداخت میرود.
- extra_data - یک آرایهٔ انجمنی که شامل هر دادهٔ اضافی است؛ این داده به طور کامل به فروشگاه بازگردانده میشود
- shop_user_id - شناسه کاربر در فروشگاه، به صورت بدون تغییر به فروشگاه بازگردانده میشود
- shop_payment_id - شناسه پرداخت در فروشگاه، به صورت تغییر نکرده به فروشگاه بازگردانده میشود
- shop_name - نام فروشگاه (نمایش داده شده در صفحه فاکتور)
- shop_payment_desc - توضیحات سفارش (نمایش داده شده در صفحه فاکتور)
- shop_payment_remark - یادداشتهای شما درباره این پرداخت (این یک فیلد برای هر یادداشتی است که درباره پرداخت دارید و AxtonPay آن را به جایی منتقل نمیکند؛ فقط در فهرست پرداختها قابل مشاهده است؛ به فروشگاه باز نمیگردد)
- valid_time - بازه زمانی که فاکتور قابل پرداخت است؛ به ثانیه
- view_time - بازه زمانی که فاکتور از طریق لینک خارجی قابل مشاهده است؛ بر حسب ثانیه؛ شمارش معکوس پس از پایان دوره 'valid_time' آغاز میشود
- server_notification_method - روش ارسال اعلانهای سرور به سرور درباره وضعیتهای پرداخت به فروشگاه؛ مقادیر معتبر: POST, GET
برخی از تنظیمات فاکتور در صفحه تنظیمات تسویهحساب قرار دارند. اما مقادیری که در درخواست ارسال میشوند، بر این تنظیمات اولویت خواهند داشت.
پارامترهای پرداخت که میتوان برای این فاکتور بازنویسی کرد:
- customer_success_url - لینکی که خریدار به آن هدایت خواهد شد اگر فاکتور با موفقیت پرداخت شود (یعنی اگر وضعیت فاکتور 'paid' یا 'overpaid' باشد).
- customer_cancel_url - لینکی که در صورت لغو پرداخت خریدار به آن هدایت خواهد شد
- customer_fail_url - لینکی که خریدار در صورت بروز خطا در پرداخت به آن هدایت میشود
- server_notification_url - لینک برای ارسال اعلانهای سرور به سرور وضعیت پرداختها به فروشگاه
توجه: به منظور رعایت سیاست حفظ حریم خصوصی خود، معمولاً نیازی نیست که دادههای شخصی مشتری خود را در ویژگیهای فاکتور وارد کنید. به عنوان مثال، در پارامتر "shop_user_id" بهتر است یک شناسه انتزاعی مشتری مشخص کنید تا ایمیل یا شماره تلفن آنها. همچنین در "shop_payment_desc" بهتر است اصلاً دادههای مشتری را وارد نکنید، زیرا آنها قبلاً همه چیز درباره خودشان را میدانند؛ در عوض، میتوانید اطلاعاتی درباره کالاها یا خدمات پرداخت شده بنویسید، یا حتی فقط نوع عمل را ذکر کنید، به عنوان مثال "خرید" یا "شارژ موجودی".
تمام مراجع ضرورتاً با پروتکل منتقل میشوند.
نمونهای از درخواست:
<?php
// API credentials - get it from settings of the checkout
$api_key = 'API_KEY';
$api_secret = 'API_SECRET';
// API endpoint
$api_endpoint = 'https://mp.axtonpay.com/api/v1/private/checkout';
// Current POSIX timestamp
$time = time();
// API method URL
$api_url = $api_endpoint . '/payment/create';
// Prepare POST parameters
$post_data = [
'amount' => 4.99,
'currency' => 'USD',
'pms' => 'all', // visible payment methods; either 'all' or comma-separated list of selected GUIDs
// 'pm' => '92807385', // define the certain payment method if you do not want payer to see the list of all possible payment methods
// Below parameters are optional
'extra_data' => ['param1'=>'value 1', 'param2'=>'value 2'],
'shop_user_id' => '[email protected]',
'shop_payment_id' => 'TEST-333-' . $time,
'shop_name' => 'TEST-333 web shop',
'shop_payment_desc' => 'TEST-333 payment description visible to payer',
'shop_payment_remark' => 'TEST-333 payment remark for admin',
'customer_success_url' => 'https://example.com/?status=paid-or-overpaid&once=TEST-333-' . $time,
'customer_cancel_url' => 'https://example.com/?status=cancelled-by-payer&once=TEST-333-' . $time,
'customer_fail_url' => 'https://example.com/?status=error&once=TEST-333-' . $time,
'server_notification_url' => 'https://example.com/?for=server-to-server-notificataions',
'server_notification_method' => 'POST',
'valid_time' => 60*60*24*7, // seconds
'view_time' => 60*60*24*21, // seconds, clock starts after ending of 'valid_time' period
];
// Prepare GET parameters
$query_string = 'time=' . $time;
// Build the request body
$request_body = json_encode($post_data); // Encode as JSON
// $request_body = http_build_query($post_data);
// Concatenate QUERY_STRING and REQUEST_BODY
$string_for_sha = $query_string . $request_body;
// Calculate the signature
$signature = hash_hmac('sha256', $string_for_sha, $api_secret);
// Prepare HTTP headers
$headers = [
'Api-Key: ' . $api_key,
'Sign: ' . $signature,
'Content-Type: application/json'
];
// Initialize cURL
$ch = curl_init($api_url . '?' . $query_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $request_body);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
// Execute the request
$response = curl_exec($ch);
// Close cURL
curl_close($ch);
?>
نمونهای از یک پاسخ موفق هنگام درخواست ایجاد فاکتور:
{
"status": "ok",
"data": "invoice created",
"pid": "HNQ5CAHM",
"test": false,
"created_at": "2025-12-27T08:14:55.000000Z",
"invoice_url": "https:\/\/27375212.b88pay.com\/i\/HNQ5CAHM"
}
دریافت اطلاعات فاکتور: /api/v1/private/checkout/payment/get/{PID}
برای دریافت اطلاعاتی که نیاز دارید، با مشخص کردن PID فاکتور در انتهای URL، باید متد /api/v1/private/checkout/payment/get/{PID} را فراخوانی کنید.
پارامترهای درخواست:
- time (الزامی) - POSIX timestamp (Unix time)
نمونهای از یک خط برای نوشتن امضا:
// Full URL: https://mp.axtonpay.com/api/v1/private/checkout/payment/get/GIKR3XPY?time=1766837343 // String for signature calculation: time=1766837343
نمونهای از یک پاسخ:
{
"status": "ok",
"data": {
"pid": "HNQ5CAHM",
"checkout_guid": 34677320,
"created_at": "2025-12-27 12:07:21",
"updated_at": "2025-12-27 12:07:34",
"data": {
"ip": "1.2.3.4",
"pms": "all",
"extra_data": {
"param1": "val1",
"param2": "val2",
"server_notification_url": "https:\/\/example.com\/?for=server-to-server-notificataions"
},
"redirect_url": "\/wait\/HNQ5CAHM",
"customer_fail_url": "https:\/\/example.com\/?status=error&id=TEST-333-1766837240",
"allow_change_amount": false,
"customer_cancel_url": "https:\/\/example.com\/?status=cancelled-by-payer&id=TEST-333-1766837240",
"customer_success_url": "https:\/\/example.com\/?status=paid-or-overpaid&id=TEST-333-1766837240"
},
"payment_status": 0,
"amount": "4.99",
"filled": "0.00",
"currency_id": 5,
"transparent": 1,
"expires_at": "2026-01-03 12:07:21",
"invisible_at": "2026-01-26 12:07:21",
"paid_at": null,
"confirmed_at": null,
"shop_name": "TEST-333 web shop",
"shop_user_id": "[email protected]",
"shop_payment_id": "TEST-333-1766837240",
"shop_payment_desc": "TEST-333 payment description visible to payer",
"shop_payment_remark": "TEST-333 payment remark for merchant",
"payment_method_id": 92807385,
"gateway_id": 40056646,
"payment_option_id": 297,
"txid": null,
"account_from": null,
"account_to": "TEnYvbfg9YqJeaVtVHAwEvG2kmAJcTzxTh",
"payment_option_amount": "17.865973",
"payment_option_filled": "0.000000",
"payment_option_currency_id": 317,
"exchange_rates_expires_at": "2025-12-27 12:27:33",
"test": false,
"initiator": "api",
"initiator_info": null,
"payment_option": {
"id": 297,
"gateway_id": 40056646,
"pm": "trx",
"currency_id": 317,
"name": "Tron",
"icon": "crypto\/tron.png",
"min_invoice": null,
"max_invoice": null
},
"payment_option_currency": {
"id": 317,
"name": "Tron",
"code": "TRX",
"minor_unit": 6
},
"currency": {
"id": 5,
"name": "United States dollar",
"code": "USD",
"minor_unit": 2
},
"invoice_url": "https:\/\/27375212.b88pay.com\/i\/HNQ5CAHM"
}
}
مقایسه مبلغ درخواستشده و مبلغ پرداختشده
پاسخ شامل چندین مبلغ مختلف (به ارز صادر شده در فاکتور) است:
- "amount" - مبلغ فاکتور شده،
- "filled" - بخشی از فاکتور پرداخت شد
- "total_filled" - مجموع پرداختی مشتری، شامل کمیسیونها.
اگر "filled = amount"، پس دقیقاً به اندازهای که نیاز است پرداخت میشود.
اگر "filled > amount"، پرداخت اضافی وجود دارد.
اگر "filled < amount"، فاکتور به طور کامل پرداخت نشده است (کمپرداخت).
فاکتور: پردازش اطلاعیه از AxtonPay درباره تغییر وضعیت
هر بار که وضعیت یک فاکتور تغییر میکند، AxtonPay یک اعلان به server_notification_url ارسال میکند (با استفاده از server_notification_method)
داده نمونه:
{
"pid": "U5IB4WIO",
"status": "3",
"shop_user_id": "3q23g",
"shop_payment_id": "h76r5",
"amount": "240.00000000",
"filled": "0.00000000",
"fee": "0",
"total_filled": "0.00000000",
"currency": "DASH",
"test": "0"
}
در پاسخ به این اطلاعیه AxtonPay انتظار دارد HTTP code 200 را دریافت کند، که دریافت موفقیتآمیز آن را تأیید میکند. در غیر این صورت، AxtonPay دوازده بار دیگر با فواصل زمانی فزاینده تلاش خواهد کرد و سپس وضعیت اطلاعیه به 'error' تغییر میکند (اما این بر وضعیت خود فاکتور تأثیری ندارد).
مقادیر وضعیت ممکن:
- 0 - pending
- 1 - paid
- 2 - error
- 3 - cancelled by customer
- 4 - underpaid
- 5 - overpaid
- 8 - expired
وضعیتهای پرداخت موفق 1 (paid) و 5 (overpaid) هستند؛ در صورت دریافت آنها میتوانید خرید پرداخت شده را به مشتری منتقل کنید یا موجودی را شارژ کنید. برای پرداختهایی با وضعیت 5 (overpaid)، در صورت شارژ موجودی میتوانید موجودی را به اندازه مبلغ پرداخت شده واقعی شارژ کنید، اما در صورت فروش کالا/خدمات و وجود مبلغ زیاد مازاد پرداخت، توصیه میشود با پرداختکننده تماس بگیرید و با او تصمیم بگیرید که چگونه با مازاد پرداخت برخورد کنید.
وضعیت تا حدی موفق 4 (underpaid) است؛ در صورت دریافت این وضعیت، امکان شارژ مجدد موجودی به میزان پرداخت واقعی دریافت شده وجود دارد. با این حال، این وضعیت نمیتواند برای فروش کالاها/خدمات به عنوان موفق در نظر گرفته شود.
تمام وضعیتهای دیگر - 0 (pending), 2 (error), 3 (canceled by customer) به معنای عدم پرداخت کامل است؛ در صورت دریافت آنها هیچ اقدامی برای شارژ موجودی یا فروش کالا/خدمات نباید انجام شود.
بررسی امضا
برای اطمینان از اینکه اعلان دقیقاً توسط AxtonPay ارسال شده است، لازم است قبل از اعتماد به آن، امضای اعلان دریافت شده را بررسی کنید. بررسی مشابه امضای درخواستهای خودتان است، تنها مرحله آخر اضافه شده است، زمانی که باید امضای محاسبهشده را با هدر HTTP دریافتشده مقایسه کنید 'Sign'.
مراحل اصلی پس از دریافت اطلاعیه درباره وضعیت تغییر یافته پرداخت به شرح زیر است:
- کل رشته آرگومانها (QUERY_STRING) را از اعلان دریافتی بگیرید،
- کل POST data (REQUEST_BODY) را از اعلان دریافتی بگیرید,
- با استفاده از آن QUERY_STRING + REQUEST_BODY و 'Secret key' مناسب، امضا را محاسبه کنید،
- امضای محاسبه شده را با امضایی که در هدر HTTP دریافت شده است مقایسه کنید 'Sign'،
- اگر امضاها یکی باشند، اعلان واقعاً از AxtonPay آمده است؛
- اگر امضاها متفاوت باشند، ممکن است تلاش پرداختکننده برای تقلب باشد.
نمونهای از یک خط برای تولید امضا:
// Full URL: https://EXAMPLE.COM?time=1737027838.1237 // POST body: pid=ABCD5678&status=1&shop_user_id=&shop_payment_id=&amount=25.00000000&filled=25.00000000&fee=0&total_filled=25.00000000¤cy=RDD&test=0 // String for signature calculation: time=1737027838.1237pid=ABCD5678&status=1&shop_user_id=&shop_payment_id=&amount=25.00000000&filled=25.00000000&fee=0&total_filled=25.00000000¤cy=RDD&test=0
تأیید اینکه فروشگاه اطلاعات پرداخت را پردازش کرده است: /api/v1/private/checkout/payment/confirm/{PID}
این درخواست به AxtonPay ارسال شده است در پاسخ به اطلاعیهای که از آن دریافت شده است. از نظر عملکردی، این تأییدی است بر اینکه فروشگاه با موفقیت اطلاعیه دریافت شده را دریافت و پردازش کرده است.
برای ارسال یک درخواست، متد /api/v1/private/checkout/payment/confirm/{PID} را فراخوانی کنید و شناسه پیدی فاکتور را در انتهای URL مشخص کنید.
پارامترهای درخواست:
- time (الزامی) - POSIX timestamp (Unix time)
- status (الزامی، عدد صحیح) - شماره وضعیت پرداخت که فروشگاه برای آن تأیید ارسال میکند
اگر وضعیت ارسالشده با وضعیت فعلی این فاکتور در سیستم مطابقت داشته باشد، AxtonPay با 'OK' پاسخ خواهد داد و اگر مطابقت نداشته باشد، با یک خطا پاسخ خواهد داد.
نمونهای از یک خط برای تولید امضا:
// Full URL:
https://mp.axtonpay.com/api/v1/private/checkout/payment/confirm/ABCD5678?time=1737011414
// POST body:
{"status":"1"}
// String for signature calculation:
time=1737011414{"status":"1"}
مثالی از یک پاسخ در صورتی که وضعیت پرداخت فعلی مشابه باشد:
{
"status": "ok",
"data": "\"Paid\" status notification is confirmed"
}
نمونهای از پاسخ در صورتی که وضعیت پرداخت فعلی با وضعیت ارسال شده در درخواست متفاوت باشد:
{
"status": "error",
"message": "Something went wrong"
}
کدهای ارزی
ارزهایی که میتوانند برای صدور فاکتور استفاده شوند.
اکثر کدهای ارزی استفاده شده به ارزهای فیات تعلق دارند و آنها برابر با ISO 4217 هستند. همچنین فهرست شامل چندین ارز دیجیتال نیز میشود.
| کد | نام | اعداد دهدهی | نوع |
| BCH | Bitcoin Cash | 8 | رمزارز |
| BLK | Blackcoin | 8 | رمزارز |
| BNB | Binancecoin | 18 | رمزارز |
| BTC | Bitcoin | 8 | رمزارز |
| BTT | BitTorrent | 18 | توکن کریپتو |
| BUSD | Binance USD | 18 | توکن کریپتو |
| DAI | Dai | 18 | توکن کریپتو |
| DASH | Dash | 8 | رمزارز |
| DOGE | Dogecoin | 8 | رمزارز |
| ETC | Ethereum Classic | 18 | رمزارز |
| ETH | Ethereum | 18 | رمزارز |
| LTC | Litecoin | 8 | رمزارز |
| NLG | Gulden | 8 | رمزارز |
| RDD | ReddCoin | 8 | رمزارز |
| TRX | Tron | 6 | رمزارز |
| USDC | USD Coin | 6 | توکن کریپتو |
| USDD | Decentralized USD | 18 | توکن کریپتو |
| USDT | Tether USDT | 6 | توکن کریپتو |
| VTC | Vertcoin | 8 | رمزارز |
| XVG | Verge | 8 | رمزارز |
| AED | United Arab Emirates dirham | 2 | ارز فیات |
| AFN | Afghan afghani | 2 | ارز فیات |
| ALL | Albanian lek | 2 | ارز فیات |
| AMD | Armenian dram | 2 | ارز فیات |
| ANG | Netherlands Antillean guilder | 2 | ارز فیات |
| AOA | Angolan kwanza | 2 | ارز فیات |
| ARS | Argentine peso | 2 | ارز فیات |
| AUD | Australian dollar | 2 | ارز فیات |
| AWG | Aruban florin | 2 | ارز فیات |
| AZN | Azerbaijani manat | 2 | ارز فیات |
| BAM | Bosnia and Herzegovina convertible mark | 2 | ارز فیات |
| BBD | Barbados dollar | 2 | ارز فیات |
| BDT | Bangladeshi taka | 2 | ارز فیات |
| BGN | Bulgarian lev | 2 | ارز فیات |
| BHD | Bahraini dinar | 3 | ارز فیات |
| BIF | Burundian franc | 2 | ارز فیات |
| BMD | Bermudian dollar | 2 | ارز فیات |
| BND | Brunei dollar | 2 | ارز فیات |
| BOB | Boliviano | 2 | ارز فیات |
| BRL | Brazilian real | 2 | ارز فیات |
| BSD | Bahamian dollar | 2 | ارز فیات |
| BTN | Bhutanese ngultrum | 2 | ارز فیات |
| BWP | Botswana pula | 2 | ارز فیات |
| BYN | Belarusian ruble | 2 | ارز فیات |
| BZD | Belize dollar | 2 | ارز فیات |
| CAD | Canadian dollar | 2 | ارز فیات |
| CDF | Congolese franc | 2 | ارز فیات |
| CHF | Swiss franc | 2 | ارز فیات |
| CLP | Chilean peso | 2 | ارز فیات |
| CNY | Renminbi (Chinese) yuan | 2 | ارز فیات |
| COP | Colombian peso | 2 | ارز فیات |
| CRC | Costa Rican colon | 2 | ارز فیات |
| CUC | Cuban convertible peso | 2 | ارز فیات |
| CUP | Cuban peso | 2 | ارز فیات |
| CVE | Cape Verde escudo | 2 | ارز فیات |
| CZK | Czech koruna | 2 | ارز فیات |
| DJF | Djiboutian franc | 2 | ارز فیات |
| DKK | Danish krone | 2 | ارز فیات |
| DOP | Dominican peso | 2 | ارز فیات |
| DZD | Algerian dinar | 2 | ارز فیات |
| EGP | Egyptian pound | 2 | ارز فیات |
| ERN | Eritrean nakfa | 2 | ارز فیات |
| ETB | Ethiopian birr | 2 | ارز فیات |
| EUR | Euro | 2 | ارز فیات |
| FJD | Fiji dollar | 2 | ارز فیات |
| FKP | Falkland Islands pound | 2 | ارز فیات |
| GBP | Pound sterling | 2 | ارز فیات |
| GEL | Georgian lari | 2 | ارز فیات |
| GHS | Ghanaian cedi | 2 | ارز فیات |
| GIP | Gibraltar pound | 2 | ارز فیات |
| GMD | Gambian dalasi | 2 | ارز فیات |
| GNF | Guinean franc | 0 | ارز فیات |
| GTQ | Guatemalan quetzal | 2 | ارز فیات |
| GYD | Guyanese dollar | 2 | ارز فیات |
| HKD | Hong Kong dollar | 2 | ارز فیات |
| HNL | Honduran lempira | 2 | ارز فیات |
| HRK | Croatian kuna | 2 | ارز فیات |
| HTG | Haitian gourde | 2 | ارز فیات |
| HUF | Hungarian forint | 2 | ارز فیات |
| IDR | Indonesian rupiah | 2 | ارز فیات |
| ILS | Israeli new shekel | 2 | ارز فیات |
| INR | Indian rupee | 2 | ارز فیات |
| IQD | Iraqi dinar | 3 | ارز فیات |
| IRR | Iranian rial | 2 | ارز فیات |
| ISK | Icelandic krona | 2 | ارز فیات |
| JMD | Jamaican dollar | 2 | ارز فیات |
| JOD | Jordanian dinar | 3 | ارز فیات |
| JPY | Japanese yen | 3 | ارز فیات |
| KES | Kenyan shilling | 2 | ارز فیات |
| KGS | Kyrgyzstani som | 2 | ارز فیات |
| KHR | Cambodian riel | 2 | ارز فیات |
| KMF | Comoro franc | 2 | ارز فیات |
| KPW | North Korean won | 2 | ارز فیات |
| KRW | South Korean won | 2 | ارز فیات |
| KWD | Kuwaiti dinar | 3 | ارز فیات |
| KYD | Cayman Islands dollar | 2 | ارز فیات |
| KZT | Kazakhstani tenge | 2 | ارز فیات |
| LAK | Lao kip | 2 | ارز فیات |
| LBP | Lebanese pound | 2 | ارز فیات |
| LKR | Sri Lankan rupee | 2 | ارز فیات |
| LRD | Liberian dollar | 2 | ارز فیات |
| LSL | Lesotho loti | 2 | ارز فیات |
| LYD | Libyan dinar | 3 | ارز فیات |
| MAD | Moroccan dirham | 2 | ارز فیات |
| MDL | Moldovan leu | 2 | ارز فیات |
| MGA | Malagasy ariary | 2 | ارز فیات |
| MKD | Macedonian denar | 2 | ارز فیات |
| MMK | Myanmar kyat | 2 | ارز فیات |
| MNT | Mongolian togrog | 2 | ارز فیات |
| MOP | Macanese pataca | 2 | ارز فیات |
| MRU | Mauritanian ouguiya | 2 | ارز فیات |
| MUR | Mauritian rupee | 2 | ارز فیات |
| MVR | Maldivian rufiyaa | 2 | ارز فیات |
| MWK | Malawian kwacha | 2 | ارز فیات |
| MXN | Mexican peso | 2 | ارز فیات |
| MYR | Malaysian ringgit | 2 | ارز فیات |
| MZN | Mozambican metical | 2 | ارز فیات |
| NAD | Namibian dollar | 2 | ارز فیات |
| NGN | Nigerian naira | 2 | ارز فیات |
| NIO | Nicaraguan cordoba | 2 | ارز فیات |
| NOK | Norwegian krone | 2 | ارز فیات |
| NPR | Nepalese rupee | 2 | ارز فیات |
| NZD | New Zealand dollar | 2 | ارز فیات |
| OMR | Omani rial | 3 | ارز فیات |
| PAB | Panamanian balboa | 2 | ارز فیات |
| PEN | Peruvian sol | 2 | ارز فیات |
| PGK | Papua New Guinean kina | 2 | ارز فیات |
| PHP | Philippine peso | 2 | ارز فیات |
| PKR | Pakistani rupee | 2 | ارز فیات |
| PLN | Polish zloty | 2 | ارز فیات |
| PYG | Paraguayan guarani | 2 | ارز فیات |
| QAR | Qatari riyal | 2 | ارز فیات |
| RON | Romanian leu | 2 | ارز فیات |
| RSD | Serbian dinar | 2 | ارز فیات |
| RUB | Russian ruble | 2 | ارز فیات |
| RWF | Rwandan franc | 2 | ارز فیات |
| SAR | Saudi riyal | 2 | ارز فیات |
| SBD | Solomon Islands dollar | 2 | ارز فیات |
| SCR | Seychelles rupee | 2 | ارز فیات |
| SDG | Sudanese pound | 2 | ارز فیات |
| SEK | Swedish krona/kronor | 2 | ارز فیات |
| SGD | Singapore dollar | 2 | ارز فیات |
| SHP | Saint Helena pound | 2 | ارز فیات |
| SLL | Sierra Leonean leone | 2 | ارز فیات |
| SOS | Somali shilling | 2 | ارز فیات |
| SRD | Surinamese dollar | 2 | ارز فیات |
| SSP | South Sudanese pound | 2 | ارز فیات |
| STN | Sao Tome and Pricipe dobra | 2 | ارز فیات |
| SVC | Salvadoran colon | 2 | ارز فیات |
| SYP | Syrian pound | 2 | ارز فیات |
| SZL | Swazi lilangeni | 2 | ارز فیات |
| THB | Thai baht | 2 | ارز فیات |
| TJS | Tajikistani somoni | 2 | ارز فیات |
| TMT | Turkmenistan manat | 2 | ارز فیات |
| TND | Tunisian dinar | 3 | ارز فیات |
| TOP | Tongan paanga | 2 | ارز فیات |
| TRY | Turkish lira | 2 | ارز فیات |
| TTD | Trinidad and Tobago dollar | 2 | ارز فیات |
| TWD | New Taiwan dollar | 2 | ارز فیات |
| TZS | Tanzanian shilling | 2 | ارز فیات |
| UAH | Ukrainian hryvnia | 2 | ارز فیات |
| UGX | Ugandan shilling | 0 | ارز فیات |
| USD | United States dollar | 2 | ارز فیات |
| UYU | Uruguayan peso | 2 | ارز فیات |
| UZS | Uzbekistan som | 2 | ارز فیات |
| VES | Venezuelan bolivar soberano | 2 | ارز فیات |
| VND | Vietnamese dong | 2 | ارز فیات |
| VUV | Vanuatu vatu | 0 | ارز فیات |
| WST | Samoan tala | 2 | ارز فیات |
| XAF | CFA franc BEAC | 3 | ارز فیات |
| XCD | East Caribbean dollar | 2 | ارز فیات |
| XOF | CFA franc BCEAO | 2 | ارز فیات |
| XPF | CFP franc (franc Pacifique) | 3 | ارز فیات |
| XTS | کدهایی که بهطور خاص برای مقاصد آزمایشی رزرو شدهاند | 2 | کد رزرو شده |
| XXX | کدهای اختصاص داده شده برای تراکنشهایی که هیچ ارزی در آن دخیل نیست | 2 | کد رزرو شده |
| YER | Yemeni rial | 2 | ارز فیات |
| ZAR | South African rand | 2 | ارز فیات |
| ZMW | Zambian kwacha | 2 | ارز فیات |
| ZWL | Zimbabwean dollar | 2 | ارز فیات |
