AxtonPay API

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&currency=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&currency=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&currency=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&currency=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&currency=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&currency=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 العملة الورقية