AxtonPay API

Document version: 0.9

Thông tin chung

Điểm cuối API

https://mp.axtonpay.com/api/v1/private/checkout

Content-type

API chấp nhận HTTP yêu cầu với 2 loại nội dung: 'application/x-www-form-urlencoded', 'application/json'.

Đầu HTTP nên phù hợp với nội dung của POST thân.

Các chữ viết tắt và định nghĩa

  • {PID} - ID của hóa đơn, thường là chuỗi ký tự chữ và số duy nhất gồm 8 ký tự.
  • Shop - Trang web của bạn chấp nhận thanh toán qua dịch vụ AxtonPay

Thuật toán làm việc với API

Trình tự các hành động thông thường để nhận thanh toán:

  • tạo hóa đơn ('/api/v1/private/checkout/payment/create'), phản hồi API sẽ trả về URL của hóa đơn ('invoice_url'),
  • gửi hóa đơn này cho người mua để thanh toán,
  • chờ thông báo máy chủ AxtonPay, điều đó sẽ được gửi đến 'server_notification_url',
  • khi nhận được bất kỳ thông báo nào từ AxtonPay, kiểm tra tính hợp lệ của chữ ký của nó và tốt nhất là gửi xác nhận đã nhận đến AxtonPay ('/api/v1/private/checkout/payment/confirm/{PID}'),
  • nếu trạng thái của hóa đơn thay đổi, thực hiện các hành động tương ứng với trạng thái này (ví dụ: yêu cầu thông tin đầy đủ về hóa đơn, vận chuyển hàng hóa, tạo một vé cho đội hỗ trợ, v.v.).

Nếu bạn đặt một 'server_notification_url' trống hoặc không hợp lệ khi tạo hóa đơn, dịch vụ sẽ không thể gửi thông báo về các thay đổi trạng thái; trong những trường hợp như vậy, bạn nên tự kiểm tra hóa đơn theo một khoảng thời gian nhất định ('/api/v1/private/checkout/payment/get/{PID}').

Ủy quyền các yêu cầu

Để ủy quyền cho một yêu cầu, cần phải tính toán một Hash từ một chuỗi được tạo ra theo một cách đặc biệt. Chuỗi này được tạo thành bằng cách nối (dán lại) các đối số URL (QUERY_STRING) và thân của yêu cầu POST (REQUEST_BODY). Điều quan trọng là tất cả các thành phần phải được lấy chính xác dưới dạng mà chúng sẽ được truyền tới máy chủ. Các đối số URL (QUERY_STRING) nên được lấy từ URL dưới dạng một dòng duy nhất, không thay đổi thứ tự các đối số và không bỏ sót bất kỳ phần tử nào. Thân yêu cầu POST (REQUEST_BODY) cũng nên được sử dụng mà không có bất kỳ sửa đổi nào, bao gồm cả việc không xóa các dấu ngoặc kép, khoảng trắng, dấu ngoặc hoặc ngắt dòng.

Trong trường hợp thân yêu cầu POST trống, và trong trường hợp các đối số URL trống, thành phần đó sẽ chỉ đơn giản là chuỗi rỗng.

Trình tự dữ liệu trong yêu cầu ký: QUERY_STRING trước, sau đó là POST dữ liệu. Bạn không nên chèn bất kỳ dấu nối nào giữa chúng, chỉ cần nối hai chuỗi văn bản.

Một lần nữa, mỗi ký hiệu đều quan trọng. Bạn không nên thêm hoặc bớt ngay cả một khoảng trắng hay ký hiệu xuống dòng. Chỉ sử dụng dữ liệu thô nhận được từ máy chủ.

Một SHA-256 băm với khóa 'Secret key' được lấy từ chuỗi kết quả và được sử dụng làm đối số thứ hai của hàm hash_hmac().

Bắt buộc phải truyền tham số 'time' chứa POSIX timestamp (Unix time) hiện tại.

Chữ ký này có hiệu lực trong 24 giờ. Nếu giá trị của tham số 'time' khác với thời gian hiện tại của máy chủ hơn 24 giờ (dù về phía trước hay phía sau), yêu cầu sẽ thất bại ngay cả khi chữ ký được tính toán mà không có lỗi.

Nếu bảng điều khiển thương nhân đã chấp nhận một yêu cầu với một chữ ký nào đó thì chữ ký đó không thể được sử dụng lại, ngay cả để gửi yêu cầu với các tham số giống nhau (điều này bao gồm cả tham số 'time').

Băm kết quả được truyền trong tiêu đề HTTP 'Sign'.

Ngoài chữ ký đã được tính toán, yêu cầu cũng phải chứa một tiêu đề 'Api-Key' bao gồm khóa API đã sử dụng. Ví dụ:

$headers = [
      'Api-Key: ' . $the_api_key,
      'Sign: ' . $signature_sha256
    ];

Bạn có thể ký yêu cầu gửi tới AxtonPay bằng bất kỳ khóa hợp lệ nào thuộc về thanh toán này. Tuy nhiên, AxtonPay luôn sử dụng khóa mà bạn đã chọn trong bảng điều khiển của người bán.

Ví dụ về cách tính chữ ký:

/* 
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'
*/

Hãy chú ý đến khoảng trắng và ngắt dòng trong một ví dụ khác:

/* 
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"
}' 
*/

Ví dụ Python về cách soạn chuỗi để tính chữ ký:

string_for_hash_calculation = f'{request.query_params.urlencode()}{request.data.urlencode()}'

Tham số

API chấp nhận tất cả các tham số cả trong QUERY_STRING và trong phần thân của yêu cầu POST.

Biến Boolean

API mong đợi nhận được '0' hoặc '1' trong các biến Boolean, nhưng vì có sự chuyển đổi kiểu ngầm định, bất kỳ chuỗi văn bản nào cũng sẽ được coi là '1', ngay cả từ 'false'. Do đó, để thiết lập rõ ràng giá trị 'FALSE' cho một biến Boolean, bạn cần truyền cho nó giá trị '0' hoặc một chuỗi rỗng.

Dấu thập phân

Chỉ dấu thập phân được sử dụng làm dấu phân cách thập phân trong các số.

Kiểu chữ trong các tham số

Ngoại trừ một vài trường hợp, tất cả các tham số đều phân biệt chữ hoa chữ thường.

URL gọi lại

Trong bảng quản trị của AxtonPay, trên trang cài đặt thanh toán, có thể thiết lập các URL cửa hàng để nhận thông báo từ máy chủ đến máy chủ từ AxtonPay, cũng như các URL để chuyển hướng người mua sau khi thanh toán hóa đơn hoặc hủy bỏ, cũng như trong trường hợp xảy ra lỗi.

Các URL này có thể bị ghi đè trong yêu cầu tạo hóa đơn.

Các phương pháp của AxtonPay API

Tạo hóa đơn: /api/v1/private/checkout/payment/create

Phương thức /api/v1/private/checkout/payment/create khởi tạo việc tạo hóa đơn.

Nếu thành công, phương pháp sẽ trả về một liên kết ('invoice_url') mà bạn nên chuyển khách hàng tới để thanh toán.

Các tham số hóa đơn của riêng bạn:

  • time (bắt buộc) - POSIX timestamp (Unix time)
  • amount (bắt buộc) - số tiền phải trả (giá của sản phẩm hoặc dịch vụ mà cửa hàng muốn nhận)
  • currency (bắt buộc) - Mã tiền tệ 3 chữ cái theo ISO 4217-alpha, không phân biệt chữ hoa chữ thường
  • pms (bắt buộc) - phương thức thanh toán hiển thị trên trang hóa đơn. Nếu bạn muốn cho phép tất cả các phương thức thanh toán, giá trị là 'all'; nếu bạn chỉ muốn cho phép một số trong số chúng, hãy liệt kê các số định danh của chúng, cách nhau bằng dấu phẩy.
  • pm - định danh của phương thức thanh toán đã chọn. Điều quan trọng là nếu tham số 'pm' được truyền, hoá đơn sẽ được tạo ở 'chế độ trong suốt', nghĩa là người mua sẽ không thấy trang hoá đơn, mà sẽ đi thẳng đến hệ thống thanh toán.
  • extra_data - một mảng kết hợp chứa bất kỳ dữ liệu bổ sung nào; dữ liệu này được trả về cửa hàng toàn bộ
  • shop_user_id - định danh người dùng trong cửa hàng, nó được trả về cửa hàng dưới dạng không thay đổi
  • shop_payment_id - định danh thanh toán trong cửa hàng, nó được trả về cửa hàng dưới dạng không thay đổi
  • shop_name - tên cửa hàng (hiển thị trên trang hóa đơn)
  • shop_payment_desc - mô tả đơn hàng (hiển thị trên trang hóa đơn)
  • shop_payment_remark - ghi chú của bạn về khoản thanh toán này (đây là một trường để bạn ghi bất kỳ ghi chú nào về khoản thanh toán, mà AxtonPay không chuyển đi đâu; nó chỉ hiển thị trong danh sách các khoản thanh toán; nó không gửi lại đến cửa hàng)
  • valid_time - khoảng thời gian trong đó hóa đơn có thể được thanh toán; tính bằng giây
  • view_time - khoảng thời gian trong đó hóa đơn có thể xem qua liên kết bên ngoài; tính bằng giây; đồng hồ đếm ngược bắt đầu sau khi khoảng 'valid_time' kết thúc
  • server_notification_method - phương thức gửi thông báo từ máy chủ này sang máy chủ khác về trạng thái thanh toán tới cửa hàng; các giá trị hợp lệ: POST, GET

Một số cài đặt cho hóa đơn được thiết lập trên trang cài đặt thanh toán. Nhưng các giá trị được gửi trong yêu cầu sẽ được ưu tiên hơn các cài đặt này.

Các tham số thanh toán có thể bị ghi đè cho hóa đơn này:

  • customer_success_url - một liên kết mà người mua sẽ được chuyển hướng đến nếu hóa đơn được thanh toán thành công (tức là nếu trạng thái hóa đơn là 'paid' hoặc 'overpaid').
  • customer_cancel_url - một liên kết mà người mua sẽ được chuyển hướng nếu việc thanh toán bị hủy
  • customer_fail_url - một liên kết mà người mua sẽ được chuyển hướng nếu thanh toán gặp lỗi
  • server_notification_url - liên kết để gửi thông báo trạng thái thanh toán từ máy chủ này sang máy chủ cửa hàng

Lưu ý: Để tuân thủ chính sách bảo mật của riêng bạn, thường không cần thiết phải đưa dữ liệu cá nhân của khách hàng vào các thuộc tính của hóa đơn. Ví dụ, trong tham số "shop_user_id", tốt hơn nên chỉ định một ID khách hàng trừu tượng thay vì email hoặc số điện thoại của họ. Cũng trong "shop_payment_desc", tốt hơn không nên đưa dữ liệu khách hàng vào, vì họ đã biết mọi thứ về bản thân mình; thay vào đó, bạn có thể viết một số thông tin về hàng hóa hoặc dịch vụ đã được thanh toán, hoặc thậm chí chỉ viết loại hành động, ví dụ, "Mua hàng" hoặc "Nạp tiền vào số dư".

Tất cả các tham chiếu đều cần được truyền với giao thức.

Ví dụ về yêu cầu:

<?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);
?>

Ví dụ về một phản hồi thành công khi yêu cầu tạo hóa đơn:

{
    "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"
}

Lấy thông tin hóa đơn: /api/v1/private/checkout/payment/get/{PID}

Để có được thông tin bạn cần, hãy gọi phương thức /api/v1/private/checkout/payment/get/{PID}, bằng cách chỉ định PID của hóa đơn ở cuối URL.

Tham số truy vấn:

  • time (bắt buộc) - POSIX timestamp (Unix time)

Ví dụ về một dòng để tạo chữ ký:

// Full URL:
https://mp.axtonpay.com/api/v1/private/checkout/payment/get/GIKR3XPY?time=1766837343

// String for signature calculation: 
time=1766837343

Ví dụ về một câu trả lời:

{
    "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"
    }
}

So sánh số tiền yêu cầu và số tiền đã thanh toán

Phản hồi chứa một số lượng khác nhau (theo loại tiền tệ mà hóa đơn được phát hành):

  • "amount" - số tiền đã lập hóa đơn,
  • "filled" - đã thanh toán một phần hóa đơn,
  • "total_filled" - tổng cộng khách hàng đã trả bao nhiêu, bao gồm cả hoa hồng.

Nếu "filled = amount", thì nó được trả đúng bằng số tiền cần thiết.

Nếu "filled > amount", có một khoản trả thừa.

Nếu "filled < amount", hóa đơn chưa được thanh toán đầy đủ (thiếu thanh toán).

Hóa đơn: xử lý thông báo từ AxtonPay về thay đổi trạng thái

Mỗi khi trạng thái của một hóa đơn thay đổi, AxtonPay sẽ gửi thông báo đến server_notification_url (sử dụng server_notification_method)

Dữ liệu ví dụ:

{
    "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"
}

Để phản hồi thông báo này AxtonPay mong đợi nhận được HTTP code 200, điều này xác nhận rằng nó đã được tiếp nhận thành công. Nếu không, AxtonPay sẽ thử lại thêm 12 lần nữa với các khoảng thời gian tăng dần, và sau đó trạng thái thông báo sẽ chuyển sang 'error' (nhưng điều này không ảnh hưởng đến trạng thái của hóa đơn).

Các giá trị trạng thái có thể:

  • 0 - pending
  • 1 - paid
  • 2 - error
  • 3 - cancelled by customer
  • 4 - underpaid
  • 5 - overpaid
  • 8 - expired

Các trạng thái thanh toán thành công là 1 (paid) và 5 (overpaid); trong trường hợp nhận được chúng, bạn có thể chuyển hàng đã thanh toán cho khách hàng hoặc nạp thêm số dư. Đối với các khoản thanh toán có trạng thái 5 (overpaid), trong trường hợp nạp thêm số dư, bạn có thể nạp số dư bằng số tiền thực tế đã nhận, nhưng trong trường hợp bán hàng hóa/dịch vụ và số tiền trả thừa đáng kể, nên liên hệ với người thanh toán và quyết định cùng họ cách xử lý số tiền trả thừa.

Trạng thái thành công một phần là 4 (underpaid); trong trường hợp nhận được trạng thái này, có thể nạp lại số dư bằng số tiền thực tế đã nhận. Tuy nhiên, trạng thái này không thể được coi là thành công đối với việc bán hàng hóa/dịch vụ.

Tất cả các trạng thái khác - 0 (pending), 2 (error), 3 (canceled by customer) có nghĩa là hoàn toàn không có thanh toán; trong trường hợp nhận được chúng, không nên thực hiện bất kỳ hành động nào về nạp tiền vào số dư hoặc bán hàng hóa/dịch vụ.

Kiểm tra chữ ký

Để chắc chắn rằng thông báo được gửi bởi AxtonPay chính xác, cần phải xác minh chữ ký của thông báo nhận được trước khi tin tưởng nó. Việc xác minh tương tự như việc ký các yêu cầu của riêng bạn, chỉ thêm bước cuối cùng, khi bạn nên so sánh chữ ký đã tính với header HTTP nhận được 'Sign'.

Các bước chính sau khi nhận được thông báo về trạng thái thanh toán đã thay đổi như sau:

  • lấy toàn bộ chuỗi các đối số (QUERY_STRING) từ thông báo nhận được,
  • lấy toàn bộ POST data (REQUEST_BODY) từ thông báo nhận được,
  • tính toán chữ ký sử dụng những QUERY_STRING + REQUEST_BODY đó và 'Secret key' thích hợp,
  • so sánh chữ ký đã tính toán với chữ ký nhận được trong tiêu đề HTTP 'Sign',
  • nếu các chữ ký giống nhau, thông báo thực sự đến từ AxtonPay;
  • Nếu các chữ ký khác nhau, có thể đó là một cố gắng lừa đảo của người trả tiền.

Ví dụ về một dòng để tạo chữ ký:

// 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

Xác nhận rằng cửa hàng đã xử lý thông tin thanh toán: /api/v1/private/checkout/payment/confirm/{PID}

Yêu cầu này được gửi đến AxtonPay để đáp lại một thông báo nhận được từ nó. Về chức năng, đây là xác nhận rằng cửa hàng đã nhận và xử lý thành công thông báo nhận được.

Để gửi yêu cầu, hãy gọi phương thức /api/v1/private/checkout/payment/confirm/{PID}, bằng cách chỉ định pid của hóa đơn ở cuối URL.

Tham số yêu cầu:

  • time (bắt buộc) - POSIX timestamp (Unix time)
  • status (bắt buộc, số nguyên) - số trạng thái thanh toán mà cửa hàng gửi xác nhận

Nếu trạng thái đã truyền khớp với trạng thái hiện tại của hóa đơn này trong hệ thống, AxtonPay sẽ phản hồi bằng 'OK' và nếu không khớp, nó sẽ phản hồi với một lỗi.

Ví dụ về một dòng để tạo chữ ký:

// 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"}

Ví dụ về phản hồi nếu trạng thái thanh toán hiện tại là giống nhau:

{
    "status": "ok",
    "data": "\"Paid\" status notification is confirmed"
}

Ví dụ về một phản hồi nếu trạng thái thanh toán hiện tại khác với trạng thái đã được gửi trong yêu cầu:

{
    "status": "error",
    "message": "Something went wrong"
}

Mã tiền tệ

Các loại tiền tệ có thể được sử dụng để tạo hóa đơn.

Hầu hết các mã tiền tệ được sử dụng thuộc về tiền pháp định, và chúng bằng với ISO 4217. Ngoài ra, danh sách cũng bao gồm một số loại tiền điện tử.

Tên Chữ số thập phân Loại
BCH Bitcoin Cash 8 Tiền điện tử
BLK Blackcoin 8 Tiền điện tử
BNB Binancecoin 18 Tiền điện tử
BTC Bitcoin 8 Tiền điện tử
BTT BitTorrent 18 Mã thông báo tiền điện tử
BUSD Binance USD 18 Mã thông báo tiền điện tử
DAI Dai 18 Mã thông báo tiền điện tử
DASH Dash 8 Tiền điện tử
DOGE Dogecoin 8 Tiền điện tử
ETC Ethereum Classic 18 Tiền điện tử
ETH Ethereum 18 Tiền điện tử
LTC Litecoin 8 Tiền điện tử
NLG Gulden 8 Tiền điện tử
RDD ReddCoin 8 Tiền điện tử
TRX Tron 6 Tiền điện tử
USDC USD Coin 6 Mã thông báo tiền điện tử
USDD Decentralized USD 18 Mã thông báo tiền điện tử
USDT Tether USDT 6 Mã thông báo tiền điện tử
VTC Vertcoin 8 Tiền điện tử
XVG Verge 8 Tiền điện tử
AED United Arab Emirates dirham 2 Tiền pháp định
AFN Afghan afghani 2 Tiền pháp định
ALL Albanian lek 2 Tiền pháp định
AMD Armenian dram 2 Tiền pháp định
ANG Netherlands Antillean guilder 2 Tiền pháp định
AOA Angolan kwanza 2 Tiền pháp định
ARS Argentine peso 2 Tiền pháp định
AUD Australian dollar 2 Tiền pháp định
AWG Aruban florin 2 Tiền pháp định
AZN Azerbaijani manat 2 Tiền pháp định
BAM Bosnia and Herzegovina convertible mark 2 Tiền pháp định
BBD Barbados dollar 2 Tiền pháp định
BDT Bangladeshi taka 2 Tiền pháp định
BGN Bulgarian lev 2 Tiền pháp định
BHD Bahraini dinar 3 Tiền pháp định
BIF Burundian franc 2 Tiền pháp định
BMD Bermudian dollar 2 Tiền pháp định
BND Brunei dollar 2 Tiền pháp định
BOB Boliviano 2 Tiền pháp định
BRL Brazilian real 2 Tiền pháp định
BSD Bahamian dollar 2 Tiền pháp định
BTN Bhutanese ngultrum 2 Tiền pháp định
BWP Botswana pula 2 Tiền pháp định
BYN Belarusian ruble 2 Tiền pháp định
BZD Belize dollar 2 Tiền pháp định
CAD Canadian dollar 2 Tiền pháp định
CDF Congolese franc 2 Tiền pháp định
CHF Swiss franc 2 Tiền pháp định
CLP Chilean peso 2 Tiền pháp định
CNY Renminbi (Chinese) yuan 2 Tiền pháp định
COP Colombian peso 2 Tiền pháp định
CRC Costa Rican colon 2 Tiền pháp định
CUC Cuban convertible peso 2 Tiền pháp định
CUP Cuban peso 2 Tiền pháp định
CVE Cape Verde escudo 2 Tiền pháp định
CZK Czech koruna 2 Tiền pháp định
DJF Djiboutian franc 2 Tiền pháp định
DKK Danish krone 2 Tiền pháp định
DOP Dominican peso 2 Tiền pháp định
DZD Algerian dinar 2 Tiền pháp định
EGP Egyptian pound 2 Tiền pháp định
ERN Eritrean nakfa 2 Tiền pháp định
ETB Ethiopian birr 2 Tiền pháp định
EUR Euro 2 Tiền pháp định
FJD Fiji dollar 2 Tiền pháp định
FKP Falkland Islands pound 2 Tiền pháp định
GBP Pound sterling 2 Tiền pháp định
GEL Georgian lari 2 Tiền pháp định
GHS Ghanaian cedi 2 Tiền pháp định
GIP Gibraltar pound 2 Tiền pháp định
GMD Gambian dalasi 2 Tiền pháp định
GNF Guinean franc 0 Tiền pháp định
GTQ Guatemalan quetzal 2 Tiền pháp định
GYD Guyanese dollar 2 Tiền pháp định
HKD Hong Kong dollar 2 Tiền pháp định
HNL Honduran lempira 2 Tiền pháp định
HRK Croatian kuna 2 Tiền pháp định
HTG Haitian gourde 2 Tiền pháp định
HUF Hungarian forint 2 Tiền pháp định
IDR Indonesian rupiah 2 Tiền pháp định
ILS Israeli new shekel 2 Tiền pháp định
INR Indian rupee 2 Tiền pháp định
IQD Iraqi dinar 3 Tiền pháp định
IRR Iranian rial 2 Tiền pháp định
ISK Icelandic krona 2 Tiền pháp định
JMD Jamaican dollar 2 Tiền pháp định
JOD Jordanian dinar 3 Tiền pháp định
JPY Japanese yen 3 Tiền pháp định
KES Kenyan shilling 2 Tiền pháp định
KGS Kyrgyzstani som 2 Tiền pháp định
KHR Cambodian riel 2 Tiền pháp định
KMF Comoro franc 2 Tiền pháp định
KPW North Korean won 2 Tiền pháp định
KRW South Korean won 2 Tiền pháp định
KWD Kuwaiti dinar 3 Tiền pháp định
KYD Cayman Islands dollar 2 Tiền pháp định
KZT Kazakhstani tenge 2 Tiền pháp định
LAK Lao kip 2 Tiền pháp định
LBP Lebanese pound 2 Tiền pháp định
LKR Sri Lankan rupee 2 Tiền pháp định
LRD Liberian dollar 2 Tiền pháp định
LSL Lesotho loti 2 Tiền pháp định
LYD Libyan dinar 3 Tiền pháp định
MAD Moroccan dirham 2 Tiền pháp định
MDL Moldovan leu 2 Tiền pháp định
MGA Malagasy ariary 2 Tiền pháp định
MKD Macedonian denar 2 Tiền pháp định
MMK Myanmar kyat 2 Tiền pháp định
MNT Mongolian togrog 2 Tiền pháp định
MOP Macanese pataca 2 Tiền pháp định
MRU Mauritanian ouguiya 2 Tiền pháp định
MUR Mauritian rupee 2 Tiền pháp định
MVR Maldivian rufiyaa 2 Tiền pháp định
MWK Malawian kwacha 2 Tiền pháp định
MXN Mexican peso 2 Tiền pháp định
MYR Malaysian ringgit 2 Tiền pháp định
MZN Mozambican metical 2 Tiền pháp định
NAD Namibian dollar 2 Tiền pháp định
NGN Nigerian naira 2 Tiền pháp định
NIO Nicaraguan cordoba 2 Tiền pháp định
NOK Norwegian krone 2 Tiền pháp định
NPR Nepalese rupee 2 Tiền pháp định
NZD New Zealand dollar 2 Tiền pháp định
OMR Omani rial 3 Tiền pháp định
PAB Panamanian balboa 2 Tiền pháp định
PEN Peruvian sol 2 Tiền pháp định
PGK Papua New Guinean kina 2 Tiền pháp định
PHP Philippine peso 2 Tiền pháp định
PKR Pakistani rupee 2 Tiền pháp định
PLN Polish zloty 2 Tiền pháp định
PYG Paraguayan guarani 2 Tiền pháp định
QAR Qatari riyal 2 Tiền pháp định
RON Romanian leu 2 Tiền pháp định
RSD Serbian dinar 2 Tiền pháp định
RUB Russian ruble 2 Tiền pháp định
RWF Rwandan franc 2 Tiền pháp định
SAR Saudi riyal 2 Tiền pháp định
SBD Solomon Islands dollar 2 Tiền pháp định
SCR Seychelles rupee 2 Tiền pháp định
SDG Sudanese pound 2 Tiền pháp định
SEK Swedish krona/kronor 2 Tiền pháp định
SGD Singapore dollar 2 Tiền pháp định
SHP Saint Helena pound 2 Tiền pháp định
SLL Sierra Leonean leone 2 Tiền pháp định
SOS Somali shilling 2 Tiền pháp định
SRD Surinamese dollar 2 Tiền pháp định
SSP South Sudanese pound 2 Tiền pháp định
STN Sao Tome and Pricipe dobra 2 Tiền pháp định
SVC Salvadoran colon 2 Tiền pháp định
SYP Syrian pound 2 Tiền pháp định
SZL Swazi lilangeni 2 Tiền pháp định
THB Thai baht 2 Tiền pháp định
TJS Tajikistani somoni 2 Tiền pháp định
TMT Turkmenistan manat 2 Tiền pháp định
TND Tunisian dinar 3 Tiền pháp định
TOP Tongan paanga 2 Tiền pháp định
TRY Turkish lira 2 Tiền pháp định
TTD Trinidad and Tobago dollar 2 Tiền pháp định
TWD New Taiwan dollar 2 Tiền pháp định
TZS Tanzanian shilling 2 Tiền pháp định
UAH Ukrainian hryvnia 2 Tiền pháp định
UGX Ugandan shilling 0 Tiền pháp định
USD United States dollar 2 Tiền pháp định
UYU Uruguayan peso 2 Tiền pháp định
UZS Uzbekistan som 2 Tiền pháp định
VES Venezuelan bolivar soberano 2 Tiền pháp định
VND Vietnamese dong 2 Tiền pháp định
VUV Vanuatu vatu 0 Tiền pháp định
WST Samoan tala 2 Tiền pháp định
XAF CFA franc BEAC 3 Tiền pháp định
XCD East Caribbean dollar 2 Tiền pháp định
XOF CFA franc BCEAO 2 Tiền pháp định
XPF CFP franc (franc Pacifique) 3 Tiền pháp định
XTS Các mã được dành riêng cho mục đích kiểm tra 2 Mã dự trữ
XXX Các mã được gán cho các giao dịch không liên quan đến tiền tệ 2 Mã dự trữ
YER Yemeni rial 2 Tiền pháp định
ZAR South African rand 2 Tiền pháp định
ZMW Zambian kwacha 2 Tiền pháp định
ZWL Zimbabwean dollar 2 Tiền pháp định