Webhook
Wenn sich der Rechnungsstatus ändert, wird eine Postanforderung an den angegebenen URL_CALLBACK gesendet, der beim Erstellen der Rechnung angegeben ist.
Antwort
Antwortparameter
Name | Definition |
---|---|
type | Rechnungstyp (Brieftasche / Zahlung) |
uuid | zufällige uuid String |
order_id | Bestell -ID in Ihrem System (um die Reihenfolge zu identifizieren) |
amount | Die Höhe der Rechnung |
payment_amount | Betrag, der tatsächlich vom Kunden bezahlt wurde |
payment_amount_usd | Betrag, der tatsächlich vom Kunden in USD gezahlt wurde |
merchant_amount | Der Betrag, der dem Guthaben des Händlers hinzugefügt wurde, wobei alle Provisionen abgezogen wurden. |
commission | Kryptomus -Kommission Betrag |
is_final | Ob die Rechnung abgeschlossen ist. Wenn die Rechnung abgeschlossen ist, ist es unmöglich, eine Rechnung zu bezahlen (sie wird entweder bezahlt oder abgelaufen) |
status | ZahlungsstatusVerfügbare Optionen:• confirm_check• paid• paid_over• fail• wrong_amount• cancel• system_fail• refund_process• refund_fail• refund_paid |
from | Brieftasche des Zahlers |
wallet_address_uuid | Uuid der statischen Brieftasche |
network | Das Blockchain -Netzwerk, in dem die Zahlung erfolgt |
currency | Rechnungswährung |
payer_currency | Die Währung, mit der der Kunde tatsächlich bezahlt hat |
additional_data | Zusätzliche Informationszeichenfolge, die Sie beim Erstellen einer Rechnung angegeben haben |
convert | Informationen über die Währung, in die die Zahlung automatisch konvertiert wird. Die Konvertierung erfolgt von payer_currency zu USDTDas Feld convert existiert nicht, wenn Sie die automatische Konvertierungsfunktion für payer_currency nicht aktiviert haben (z. B. auto konvertieren BTC in USDT) Struktur |
txid | Transaktion Hash auf der Blockchain.Das Feld txid wird nicht existieren, wenn1) Die Zahlung wurde von P2P gezahlt (der Zahler zog Geld von seinem Kryptomuskonto auf die in der Rechnung angegebene Adresse zurück und die Zahlung wurde ohne Blockchain nur in unserem System geleistet)2) Die Zahlung wurde nicht bezahlt3) Mit der Zahlung stimmte etwas nicht stimm |
sign | Unterschrift |
Definition
Rechnungstyp (Brieftasche / Zahlung)Definition
zufällige uuid StringDefinition
Bestell -ID in Ihrem System (um die Reihenfolge zu identifizieren)Definition
Die Höhe der RechnungDefinition
Betrag, der tatsächlich vom Kunden bezahlt wurdeDefinition
Betrag, der tatsächlich vom Kunden in USD gezahlt wurdeDefinition
Der Betrag, der dem Guthaben des Händlers hinzugefügt wurde, wobei alle Provisionen abgezogen wurden.Definition
Kryptomus -Kommission BetragDefinition
Ob die Rechnung abgeschlossen ist. Wenn die Rechnung abgeschlossen ist, ist es unmöglich, eine Rechnung zu bezahlen (sie wird entweder bezahlt oder abgelaufen)Definition
ZahlungsstatusVerfügbare Optionen:- confirm_check- paid- paid_over- fail- wrong_amount- cancel- system_fail- refund_process- refund_fail- refund_paidDefinition
Brieftasche des ZahlersDefinition
Uuid der statischen BrieftascheDefinition
Das Blockchain -Netzwerk, in dem die Zahlung erfolgtDefinition
RechnungswährungDefinition
Die Währung, mit der der Kunde tatsächlich bezahlt hatDefinition
Zusätzliche Informationszeichenfolge, die Sie beim Erstellen einer Rechnung angegeben habenDefinition
Informationen über die Währung, in die die Zahlung automatisch konvertiert wird. Die Konvertierung erfolgt von payer_currency zu USDTDas Feld convert existiert nicht, wenn Sie die automatische Konvertierungsfunktion für payer_currency nicht aktiviert haben (z. B. auto konvertieren BTC in USDT) StrukturDefinition
Transaktion Hash auf der Blockchain.Das Feld txid wird nicht existieren, wenn1) Die Zahlung wurde von P2P gezahlt (der Zahler zog Geld von seinem Kryptomuskonto auf die in der Rechnung angegebene Adresse zurück und die Zahlung wurde ohne Blockchain nur in unserem System geleistet)2) Die Zahlung wurde nicht bezahlt3) Mit der Zahlung stimmte etwas nicht stimmDefinition
Unterschrift
Die Struktur von convert
Name | Definition |
---|---|
to_currency | Der Währungscode, in den die Zahlung umgewandelt wird |
commission | Umbaugebühr |
rate | Wechselkurs |
amount | Konversionsbetrag in to_currency, die dem Ausgleich des Händlers hinzugefügt wurde, wobei alle Provisionen abgezogen wurden.Betrag hier gleich |
Definition
Der Währungscode, in den die Zahlung umgewandelt wirdDefinition
UmbaugebührDefinition
WechselkursDefinition
Konversionsbetrag in to_currency, die dem Ausgleich des Händlers hinzugefügt wurde, wobei alle Provisionen abgezogen wurden.Betrag hier gleich
Antwortbeispiel
1{
2 "type": "payment",
3 "uuid": "62f88b36-a9d5-4fa6-aa26-e040c3dbf26d",
4 "order_id": "97a75bf8eda5cca41ba9d2e104840fcd",
5 "amount": "3.00000000",
6 "payment_amount": "3.00000000",
7 "payment_amount_usd": "0.23",
8 "merchant_amount": "2.94000000",
9 "commission": "0.06000000",
10 "is_final": true,
11 "status": "paid",
12 "from": "THgEWubVc8tPKXLJ4VZ5zbiiAK7AgqSeGH",
13 "wallet_address_uuid": null,
14 "network": "tron",
15 "currency": "TRX",
16 "payer_currency": "TRX",
17 "additional_data": null,
18 "convert": {
19 "to_currency": "USDT",
20 "commission": null,
21 "rate": "0.07700000",
22 "amount": "0.22638000"
23 },
24 "txid": "6f0d9c8374db57cac0d806251473de754f361c83a03cd805f74aa9da3193486b",
25 "sign": "a76c0d77f3e8e1a419b138af04ab600a"
26}
KOPIERENWebhook -Überprüfung
Da Sie Webhooks erhalten, veröffentlichen Sie Produkte oder die Guthaben der Guthaben Ihrer Benutzer, Sie müssen sicherstellen, dass Sie Webhooks von Cryptomus und nicht von anderen erhalten.
Wir empfehlen Ihnen, es in beide Richtungen zu überprüfen:
- Verwenden Sie die IP -Adresse Whitelist und erlauben Sie Anforderungen an url_callback nur von unseren IPs. Wir senden Webhooks von IP. 91.227.144.54
- Überprüfen Sie die Signatur in jedem Webhook, der zu Ihrem url_callback kommt, und lesen Sie weiter unten.
Überprüfung der Webhook Signature
Ihre API -Schlüssel sind geheim und niemand außer Ihnen und Kryptomus sollte sie kennen. Bei der Überprüfung der Signatur werden Sie sicher sein, dass das Webhook von Kryptomus gesendet wurde.
Wir erstellen ein Zeichen mit diesem Algorithmus. MD5 -Hash des Körpers der in Base64 codierten Postanforderung und kombiniert mit Ihrem API -Schlüssel.
Wenn die Signatur im Körper der Anfrage kommt, müssen Sie das Zeichen aus dem Antwortkörper extrahieren, einen Hash aus dem Körper und Ihren API -Schlüssel erzeugen und es mit dem Vorzeichenparameter übereinstimmen.
Ein Beispiel in PHP:
Um eine JSON -Daten zu erhalten, die per Post an Ihren Webhook -Handler gesendet wurde:
1$data = file_get_contents('php://input');
2$data = json_decode($data, true);
KOPIERENNehmen wir an, wir haben Webhook mit Daten in erhalten Das Array
Zunächst müssen wir das Zeichen aus dem Array extrahieren:
1$sign = $data['sign'];
2unset($data['sign']);
KOPIERENLassen Sie uns nun ein Zeichen mit unserem API -Zahlungsschlüssel generieren:
1$hash = md5(base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)) . $apiPaymentKey);
KOPIERENSchließlich können wir prüfen, ob das Zeichen, das wir mit unserem API -Zahlungsschlüssel generiert haben, dem Zeichen des Webhooks entspricht.
1if (!hash_equals($hash, $sign)) {
2 return new InvalidHashException();
3}
4
5// or
6
7if ($hash !== $sign) {
8 return new InvalidHashException();
9}
KOPIERENZu diesem Zeitpunkt können Sie sicher sein, dass der Webhook von Cryptomus stammte und dass Sie alle Daten korrekt erhalten haben
in PHP:
1// data array
2$data = [
3 'amount' => '20',
4 'currency' => 'USDT',
5 'network' => 'tron',
6 'txid' => 'someTxidWith/Slash'
7];
8
9// json data we send to webhooks
10$data = json_encode($data, true);
11echo $data;
12// Outputs a string, slash in txid is escaped, pay attention to this.
13// we send a webhook data with all escaped slashes
14// {"amount":"20","currency":"USD","network":"btc","txid":"someTxidWith/Slash"}
KOPIERENIn JS:
1const data = {
2 amount: '20',
3 currency: 'USDT',
4 network: 'tron',
5 txid: 'someTxidWith/Slash'
6};
7
8const jsonData = JSON.stringify(data);
9console.log(jsonData);
10// {"amount":"20","currency":"USDT","network":"tron","txid":"someTxidWith/Slash"}
11// slash in txid is not escaped and you will get error checking sign.
12// Instead, you should do it like this:
13// const jsonData = JSON.stringify(data).replace(///mg, "\/");
14
KOPIEREN