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¤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' */
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¤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
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ử.
| Mã | 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 |
