AxtonPay API

Document version: 0.9

Allgemeine Informationen

API-Endpunkt

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

Content-type

API akzeptiert HTTP-Anfragen mit 2 Inhaltstypen: 'application/x-www-form-urlencoded', 'application/json'.

Die HTTP Überschrift sollte zum Inhalt des POST Textes passen.

Abkürzungen und Definitionen

  • {PID} - ID der Rechnung, normalerweise ist es die eindeutige 8-stellige alphanumerische Sequenz.
  • Shop - Ihre Website, die Zahlungen über den AxtonPay-Dienst akzeptiert

Algorithmus zur Arbeit mit der API

Übliche Abfolge von Schritten, um die Zahlung zu erhalten:

  • erstelle eine Rechnung ('/api/v1/private/checkout/payment/create'), die API-Antwort wird die Rechnungs-URL zurückgeben ('invoice_url'),
  • Senden Sie den Käufer zu dieser Rechnung, um die Zahlung vorzunehmen,
  • Warte auf AxtonPay Server-Benachrichtigungen, die um 'server_notification_url' kommen werden,
  • Nach Erhalt einer Benachrichtigung von AxtonPay überprüfen Sie die Gültigkeit ihrer Signatur und senden Sie nach Möglichkeit eine Empfangsbestätigung an AxtonPay ('/api/v1/private/checkout/payment/confirm/{PID}'),
  • Wenn der Status einer Rechnung geändert wird, führen Sie die entsprechenden Aktionen zu diesem Status aus (z. B. vollständige Informationen über die Rechnung anfordern, die Waren versenden, ein Ticket an das Support-Team erstellen usw.).

Wenn Sie beim Erstellen einer Rechnung eine leere oder ungültige 'server_notification_url' einstellen, kann der Dienst keine Benachrichtigungen über Statusänderungen senden; in solchen Fällen sollten Sie die Rechnung selbst in einem bestimmten Intervall ('/api/v1/private/checkout/payment/get/{PID}') überprüfen.

Genehmigung von Anfragen

Um eine Anfrage zu autorisieren, ist es notwendig, einen Hash aus einem auf spezielle Weise gebildeten String zu berechnen. Der String wird durch das Aneinanderhängen (Zusammenkleben) der URL-Argumente (QUERY_STRING) und dem Körper der POST-Anfrage (REQUEST_BODY) gebildet. Es ist wichtig, dass alle Komponenten genau so genommen werden, wie sie an den Server übertragen werden. Die URL-Argumente (QUERY_STRING) sollten von der URL als eine einzige Zeile genommen werden, ohne die Reihenfolge der Argumente zu ändern und ohne Elemente wegzulassen. Der Körper der POST-Anfrage (REQUEST_BODY) sollte ebenfalls ohne jegliche Änderungen verwendet werden, einschließlich dass Anführungszeichen, Leerzeichen, Klammern und Zeilenumbrüche nicht entfernt werden.

Im Falle eines leeren POST Anforderungskörpers und im Falle leerer URL-Parameter wird diese Komponente einfach eine leere Zeichenkette sein.

Die Reihenfolge der Daten in der Signieranfrage: QUERY_STRING zuerst, dann die POST Daten. Sie sollten keine verbindenden Zeichen zwischen ihnen einfügen, sondern die beiden Textzeichenketten einfach zusammenfügen.

Noch einmal, jedes Symbol ist bedeutend. Sie sollten nicht einmal ein Leerzeichen oder ein Zeilenumbruch-Symbol hinzufügen oder entfernen. Verwenden Sie einfach die vom Server empfangenen Rohdaten.

Ein SHA-256 Hash mit dem Schlüssel 'Secret key' wird aus dem resultierenden String genommen und als zweites Argument der Funktion hash_hmac() verwendet.

Es ist verpflichtend, den 'time' Parameter zu übergeben, der die aktuelle POSIX timestamp (Unix time) enthält.

Diese Signatur ist 24 Stunden gültig. Wenn der Wert des 'time' Parameters mehr als 24 Stunden von der aktuellen Serverzeit abweicht (egal, ob nach vorne oder hinten), wird die Anfrage fehlschlagen, selbst wenn die Signatur ohne Fehler berechnet wurde.

Wenn das Händlerpanel eine Anfrage mit einer Signatur akzeptiert hat, kann diese Signatur nicht erneut verwendet werden, selbst nicht, um die Anfrage mit denselben Parametern zu senden (dies schließt den Parameter 'time' ein).

Der resultierende Hash wird im HTTP Header 'Sign' übergeben.

Zusätzlich zur berechneten Signatur muss die Anfrage auch einen 'Api-Key'-Header enthalten, der den verwendeten API-Schlüssel enthält. Beispiel:

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

Sie können die an das AxtonPay gesendete Anfrage mit jedem gültigen Schlüssel signieren, der zu diesem Checkout gehört. Das AxtonPay verwendet jedoch immer den Schlüssel, den Sie im Händlerpanel ausgewählt haben.

Beispiel für die Signaturberechnung:

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

Achten Sie in einem anderen Beispiel auf Leerzeichen und Zeilenumbrüche:

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

Das Python Beispiel für das Zusammensetzen des Strings zur Signaturberechnung:

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

Parameter

Die API akzeptiert alle Parameter sowohl in QUERY_STRING als auch im Körper der POST-Anfrage.

Boolesche Variablen

Die API erwartet, dass sie '0' oder '1' in Boolean-Variablen erhält, aber durch die implizite Typkonvertierung wird jede Textzeichenfolge als '1' behandelt, sogar das Wort 'false'. Daher müssen Sie, um explizit einen 'FALSE'-Wert für eine Boolean-Variable festzulegen, entweder den Wert '0' oder eine leere Zeichenfolge übergeben.

Dezimaltrennzeichen

Nur der Dezimalpunkt wird als Dezimaltrennzeichen in Zahlen verwendet.

Zeichenfall in Parametern

Mit wenigen Ausnahmen sind alle Parameter zwischen Groß- und Kleinschreibung unterscheidend.

Rückruff-URL

Im Admin-Panel von AxtonPay ist es auf der Seite mit den Checkout-Einstellungen möglich, Shop-URLs für den Empfang von Server-zu-Server-Benachrichtigungen von AxtonPay festzulegen, sowie URLs für die Weiterleitung des Käufers nach der Rechnungszahlung oder deren Stornierung, sowie im Fehlerfall.

Diese URLs können in der Anfrage zur Rechnungserstellung überschrieben werden.

Methoden der AxtonPay API

Rechnungserstellung: /api/v1/private/checkout/payment/create

Methode /api/v1/private/checkout/payment/create startet die Erstellung der Rechnung.

Wenn erfolgreich, gibt die Methode einen Link ('invoice_url') zurück, an den Sie den Kunden zur Zahlung weiterleiten sollten.

Eigene Rechnungsparameter:

  • time (erforderlich) - POSIX timestamp (Unix time)
  • amount (erforderlich) - zu zahlender Betrag (der Preis des Produkts oder der Dienstleistung, den das Geschäft erhalten möchte)
  • currency (erforderlich) - 3-stelliger Währungscode gemäß ISO 4217-alpha, nicht auf Groß- und Kleinschreibung achtend
  • pms (erforderlich) - Zahlungsmethoden, die auf der Rechnungsseite angezeigt werden. Wenn Sie alle Zahlungsmethoden zulassen möchten, ist der Wert 'all'; wenn Sie nur einige davon zulassen möchten, listen Sie deren durch Kommas getrennte numerische Identifikatoren auf.
  • pm - Bezeichner der ausgewählten Zahlungsmethode. Es ist wichtig, dass, wenn der 'pm'-Parameter übergeben wird, die Rechnung im 'transparenten Modus' erstellt wird, d.h. der Käufer wird die Rechnungsseite nicht sehen, sondern direkt zum Zahlungssystem weitergeleitet.
  • extra_data - Ein assoziatives Array, das beliebige zusätzliche Daten enthält; diese Daten werden vollständig an den Speicher zurückgegeben
  • shop_user_id - Benutzerkennung im Geschäft, sie wird unverändert an das Geschäft zurückgegeben
  • shop_payment_id - Zahlungskennzeichen im Geschäft, es wird in unveränderter Form an das Geschäft zurückgegeben
  • shop_name - Geschäftsname (auf der Rechnungsseite angezeigt)
  • shop_payment_desc - Bestellbeschreibung (auf der Rechnungseite angezeigt)
  • shop_payment_remark - Ihre Notizen zu dieser Zahlung (dies ist ein Feld für alle Notizen, die Sie zu der Zahlung haben, die AxtonPay nirgendwohin weitergibt; es ist nur in der Liste der Zahlungen sichtbar; es geht nicht zurück zum Geschäft)
  • valid_time - der Zeitintervall, in dem die Rechnung bezahlt werden kann; in Sekunden
  • view_time - Zeitintervall, während dem die Rechnung über einen externen Link angezeigt werden kann; in Sekunden; der Countdown beginnt, nachdem der 'valid_time' Zeitraum endet
  • server_notification_method - Methode zum Senden von Server-zu-Server-Benachrichtigungen über Zahlungsstatus an den Shop; gültige Werte: POST, GET

Einige Einstellungen für die Rechnung werden auf der Seite mit den Checkout-Einstellungen vorgenommen. Aber die im Request übermittelten Werte haben Vorrang vor diesen Einstellungen.

Kassenparameter, die für diese Rechnung überschrieben werden können:

  • customer_success_url - ein Link, zu dem der Käufer weitergeleitet wird, wenn die Rechnung erfolgreich bezahlt wurde (d. h. wenn der Rechnungsstatus 'paid' oder 'overpaid' ist).
  • customer_cancel_url - ein Link, zu dem der Käufer weitergeleitet wird, wenn die Zahlung storniert wird
  • customer_fail_url - ein Link, zu dem der Käufer weitergeleitet wird, wenn die Zahlung mit einem Fehler endet
  • server_notification_url - Link zum Senden von Server-zu-Server-Benachrichtigungen über Zahlungsstatus an den Shop

Hinweis: Um den eigenen Datenschutzbestimmungen zu entsprechen, ist es normalerweise nicht notwendig, die personenbezogenen Daten Ihres Kunden in den Rechnungseigenschaften anzugeben. Zum Beispiel ist es beim "shop_user_id"-Parameter besser, eine abstrakte Kunden-ID anzugeben, anstatt deren E-Mail oder Telefonnummer. Auch im "shop_payment_desc" ist es besser, überhaupt keine Kundendaten einzufügen, da sie bereits alles über sich selbst wissen; stattdessen können Sie einige Informationen über die bezahlten Waren oder Dienstleistungen schreiben oder sogar nur die Art der Handlung angeben, zum Beispiel "Kauf" oder "Guthaben aufladen".

Alle Verweise werden notwendigerweise mit dem Protokoll übermittelt.

Beispiel für eine Anfrage:

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

Beispiel für eine erfolgreiche Antwort bei der Anforderung zur Erstellung einer Rechnung:

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

Abrufen von Rechnungsinformationen: /api/v1/private/checkout/payment/get/{PID}

Um die Informationen zu erhalten, müssen Sie die Methode /api/v1/private/checkout/payment/get/{PID} aufrufen, indem Sie die PID der Rechnung am Ende der URL angeben.

Abfrageparameter:

  • time (erforderlich) - POSIX timestamp (Unix time)

Beispiel einer Zeile zum Erstellen einer Unterschrift:

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

// String for signature calculation: 
time=1766837343

Beispiel einer Antwort:

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

Vergleich zwischen angeforderter und gezahlter Summe

Die Antwort enthält mehrere verschiedene Beträge (in der Währung, in der die Rechnung ausgestellt wurde):

  • "amount" - berechneter Betrag,
  • "filled" - teilweise die Rechnung bezahlt,
  • "total_filled" - wie viel der Kunde insgesamt bezahlt hat, einschließlich Provisionen.

Wenn "filled = amount", dann wird es genau so viel bezahlt, wie nötig ist.

Wenn "filled > amount", gibt es eine Überzahlung.

Wenn "filled < amount", wurde die Rechnung nicht vollständig bezahlt (Unterzahlung).

Rechnung: Bearbeitung der Benachrichtigung von AxtonPay über Statusänderung

Jedes Mal, wenn sich der Status einer Rechnung ändert, sendet AxtonPay eine Benachrichtigung an server_notification_url (unter Verwendung des server_notification_method)

Beispieldaten:

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

Als Antwort auf diese Benachrichtigung erwartet AxtonPay den Empfang von HTTP code 200, was den erfolgreichen Empfang bestätigt. Andernfalls wird AxtonPay 12 weitere Male in zunehmend längeren Abständen versuchen, die Benachrichtigung zu senden, und dann ändert sich der Benachrichtigungsstatus zu 'error' (dies wirkt sich jedoch nicht auf den Status der Rechnung selbst aus).

Mögliche Statuswerte:

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

Erfolgreiche Zahlungsstatus sind 1 (paid) und 5 (overpaid); im Falle ihres Eingangs können Sie den bezahlten Kauf an den Kunden übertragen oder das Guthaben aufladen. Bei Zahlungen mit dem Status 5 (overpaid) können Sie im Falle der Guthabenaufladung das Guthaben um den tatsächlich erhaltenen Zahlungsbetrag aufladen, aber im Falle eines Waren-/Dienstleistungsverkaufs und eines erheblichen Überzahlungsbetrags ist es ratsam, den Zahlenden zu kontaktieren und mit ihm zu entscheiden, wie mit der Überzahlung umgegangen werden soll.

Teilweise erfolgreicher Status ist 4 (underpaid); im Falle des Erhalts dieses Status ist es möglich, das Guthaben um den tatsächlich erhaltenen Zahlungsbetrag aufzuladen. Dieser Status kann jedoch nicht als erfolgreich für den Verkauf von Waren/Dienstleistungen angesehen werden.

Alle anderen Status - 0 (pending), 2 (error), 3 (canceled by customer) bedeuten vollständige Abwesenheit einer Zahlung; im Falle ihres Eingangs sollten keine Maßnahmen zur Aufladung des Kontostands oder zum Verkauf von Waren/Dienstleistungen durchgeführt werden.

Signaturprüfung

Um sicherzustellen, dass die Benachrichtigung genau von AxtonPay gesendet wird, ist es notwendig, die Signatur der empfangenen Benachrichtigung zu überprüfen, bevor man ihr vertraut. Die Überprüfung ist ähnlich wie das Signieren Ihrer eigenen Anfragen, nur dass der letzte Schritt hinzugefügt wird, bei dem Sie die berechnete Signatur mit dem empfangenen HTTP-Header 'Sign' vergleichen sollten.

Die Hauptschritte nach Erhalt der Benachrichtigung über den geänderten Zahlungsstatus sind folgende:

  • nehme die gesamte Zeichenkette der Argumente (QUERY_STRING) aus der erhaltenen Benachrichtigung,
  • Nehmen Sie die ganze POST data (REQUEST_BODY) aus der erhaltenen Benachrichtigung,
  • berechne die Signatur mit diesen QUERY_STRING + REQUEST_BODY und dem entsprechenden 'Secret key',
  • die berechnete Signatur mit der im HTTP-Header empfangenen vergleichen 'Sign',
  • wenn die Unterschriften gleich sind, kam die Benachrichtigung wirklich von AxtonPay;
  • Wenn die Unterschriften unterschiedlich sind, könnte es ein Versuch des Zahlenden sein zu betrügen.

Beispiel einer Zeile zur Signaturerstellung:

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

Bestätigung, dass das Geschäft die Zahlungsinformationen verarbeitet hat: /api/v1/private/checkout/payment/confirm/{PID}

Diese Anfrage wird an AxtonPay gesendet als Antwort auf eine von ihm empfangene Benachrichtigung. Funktional ist es eine Bestätigung, dass der Store die empfangene Benachrichtigung erfolgreich erhalten und verarbeitet hat.

Um eine Anfrage zu senden, rufen Sie die Methode /api/v1/private/checkout/payment/confirm/{PID} auf, indem Sie am Ende der URL die PID der Rechnung angeben.

Anforderungsparameter:

  • time (erforderlich) - POSIX timestamp (Unix time)
  • status (erforderlich, Ganzzahl) - Zahlungsstatusnummer, für die das Geschäft eine Bestätigung sendet

Wenn der übermittelte Status mit dem aktuellen Status dieser Rechnung im System übereinstimmt, wird AxtonPay mit 'OK' antworten, und wenn er nicht übereinstimmt, wird er mit einem Fehler antworten.

Beispiel einer Zeile zur Signaturerstellung:

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

Beispiel für eine Antwort, wenn der aktuelle Zahlungsstatus derselbe ist:

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

Beispiel für eine Antwort, wenn der aktuelle Zahlungsstatus von dem in der Anfrage übermittelten abweicht:

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

Währungscodes

Die Währungen, die für die Erstellung einer Rechnung verwendet werden können.

Die meisten verwendeten Währungscodes gehören zu Fiat-Währungen, und sie sind gleich dem ISO 4217. Die Liste enthält auch mehrere Kryptowährungen.

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