Document version: 0.9
معلومات شائعة
نقطة نهاية واجهة برمجة التطبيقات
https://mp.axtonpay.com/api/v1/private/checkout
Content-type
تقبل واجهة برمجة التطبيقات HTTP طلبات مع نوعي محتوى: 'application/x-www-form-urlencoded', 'application/json'.
يجب أن يتناسب رأس HTTP مع محتوى جسد POST.
الاختصارات والتعريفات
- {PID} - معرّف الفاتورة، عادةً ما يكون هو التسلسل الفريد المكوَّن من 8 أحرف وأرقام.
- Shop - موقعك الذي يقبل المدفوعات عبر خدمة AxtonPay
خوارزمية العمل مع واجهة برمجة التطبيقات
تسلسل الإجراءات المعتاد لتلقي الدفع:
- إنشاء فاتورة ('/api/v1/private/checkout/payment/create')، ستقوم استجابة واجهة برمجة التطبيقات بإرجاع رابط الفاتورة ('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}').
تفويض الطلبات
للسماح بطلب ما، من الضروري حساب تجزئة (Hash) من سلسلة مكونة بطريقة خاصة. تتكون السلسلة من دمج (ربط) وسائط URL (QUERY_STRING) مع جسم الطلب POST (REQUEST_BODY). من المهم أن يتم أخذ جميع المكونات تمامًا بالشكل الذي سيتم إرساله به إلى الخادم. يجب أخذ وسائط URL (QUERY_STRING) من الرابط كسطر واحد، دون تغيير ترتيب الوسائط ودون حذف أي عناصر. ويجب أيضًا استخدام جسم الطلب POST (REQUEST_BODY) دون أي تعديلات، بما في ذلك عدم إزالة العلامات الاقتباس، أو المسافات، أو الأقواس، أو انقطاعات الأسطر.
في حالات وجود جسم طلب فارغ POST، وفي حالة وجود وسيطات URL فارغة، سيكون هذا المكون ببساطة سلسلة فارغة.
تسلسل البيانات في طلب التوقيع: QUERY_STRING أولاً، ثم بيانات POST. لا ينبغي لك إدخال أي علامات ربط بينهما، فقط قم بدمج سلسلتي النص.
مرة أخرى، كل رمز مهم. يجب ألا تضيف أو تحذف حتى المسافة الفارغة أو رمز السطر الجديد. استخدم فقط البيانات الخام المستلمة من الخادم.
يُؤخذ تجزئة SHA-256 بالمفتاح 'Secret key' من السلسلة الناتجة وتُستخدم كالحجة الثانية للدالة hash_hmac().
من الإلزامي تمرير المعامل 'time' الذي يحتوي على POSIX timestamp (Unix time) الحالي.
هذا التوقيع صالح لمدة 24 ساعة. إذا اختلفت قيمة المعامل 'time' عن الوقت الحالي للخادم بأكثر من 24 ساعة (سواء إلى الأمام أو إلى الخلف)، ستفشل الطلبية حتى إذا تم حساب التوقيع بدون أخطاء.
إذا قام لوحة التاجر بقبول طلب بتوقيع معين، فلا يمكن استخدام هذا التوقيع مرة أخرى، حتى لإرسال الطلب بنفس المعايير (يشمل هذا المعامل '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()}'
المعلمات
تقبل واجهة برمجة التطبيقات جميع المعلمات سواء في QUERY_STRING أو في جسم طلب POST.
المتغيرات البوليانية
يتوقع الـ API الحصول على '0' أو '1' في المتغيرات البوليانية، ولكن بسبب التحويل الضمني للنوع، سيتم التعامل مع أي سلسلة نصية على أنها '1'، حتى الكلمة 'false'. لذلك، لتعيين قيمة 'FALSE' صريحة لمتغير بولياني، تحتاج إلى تمرير إما القيمة '0' أو سلسلة فارغة له.
فاصل عشري
يُستخدم النقطة العشرية فقط كفاصل عشري في الأعداد.
حالة الأحرف في المعلمات
باستثناء بعض الحالات القليلة، جميع المعايير حساسة لحالة الأحرف.
رابط الاسترجاع
في لوحة إدارة AxtonPay، في صفحة إعدادات الدفع، من الممكن إعداد عناوين URL للمتجر لتلقي الإشعارات من الخادم إلى الخادم من AxtonPay، وكذلك عناوين URL لإعادة توجيه المشتري بعد دفع الفاتورة أو إلغائها، وكذلك في حالة حدوث خطأ.
يمكن تجاوز هذه الروابط في طلب إنشاء الفاتورة.
طرق AxtonPay واجهة برمجة التطبيقات
إنشاء الفاتورة: /api/v1/private/checkout/payment/create
الطريقة /api/v1/private/checkout/payment/create تبدأ إنشاء الفاتورة.
إذا نجحت العملية، تُعيد الطريقة رابطًا ('invoice_url') يجب عليك تحويل العميل إليه للدفع.
معلمات الفاتورة الخاصة:
- time (مطلوب) - POSIX timestamp (Unix time)
- amount (مطلوب) - المبلغ المستحق الدفع (سعر المنتج أو الخدمة الذي يرغب المتجر في استلامه)
- currency (مطلوب) - رمز العملة المكون من 3 أحرف وفقًا لـ 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}
للحصول على المعلومات التي تحتاجها، اتصل بالطريقة /api/v1/private/checkout/payment/get/{PID}، عن طريق تحديد 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 المحاولة 12 مرة أخرى بفواصل متزايدة تدريجياً، ثم يتغير وضع الإشعار إلى '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) من الإشعار المستلم،
- خذ الطرد بأكمله من الإشعار المستلم،
- احسب التوقيع باستخدام تلك 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 | العملة الورقية |
