Webhook
Po zmianie statusu faktury żądanie POST jest wysyłane do URL_CALLBACK określone podczas tworzenia faktury.
Odpowiedź
Parametry odpowiedzi
Nazwa | Definicja |
---|---|
type | Typ faktury (portfel / płatność) |
uuid | uuid płatności |
order_id | Identyfikator zamówienia w systemie (w celu zidentyfikowania zamówienia) |
amount | Ilość faktury |
payment_amount | Kwota faktycznie zapłacona przez klienta |
payment_amount_usd | Kwota faktycznie opłacona przez klienta w USD |
merchant_amount | Kwota dodana do równowagi sprzedawcy, przy odjęciu wszystkich prowizji. |
commission | Kwota Komisji Cryptomus |
is_final | Czy faktura jest sfinalizowana. Po sfinalizowaniu faktury nie można zapłacić faktury (jest ona opłacana lub wygasła) |
status | Status płatnościDostępne opcje:• confirm_check• paid• paid_over• fail• wrong_amount• cancel• system_fail• refund_process• refund_fail• refund_paid |
from | Adres portfela płatnika |
wallet_address_uuid | UUID z portfela statycznego |
network | Sieć blockchain, w której dokonana jest płatność |
currency | Waluta faktury |
payer_currency | Waluta, którą klient faktycznie zapłacił |
additional_data | Dodatkowy ciąg informacji, który podałeś podczas tworzenia faktury |
convert | Informacje o walucie, do której płatność zostanie automatycznie przekonwertowana. Konwersja odbywa się z płatnika_currency do USDTPole convert nie będzie istniało, jeśli nie włączyłeś automatycznej funkcji konwersji dla payer_currency (np. Auto konwertuj BTC na USDT) Struktura |
txid | Hash transakcji na blockchain.Pole txid nie będzie istniało, jeśli1) Płatność została wypłacona przez P2P (płatnik wycofał fundusze z jego konta kryptomusa na adres wskazany na fakturze, a płatność została dokonana bez blockchain, tylko w naszym systemie)2) Płatność nie została zapłacona3) Coś było nie tak z płatnością lub klient popełnił błąd i zaznaczyliśmy to jako „opłacone” ręcznie |
sign | Podpis |
Definicja
Typ faktury (portfel / płatność)Definicja
uuid płatnościDefinicja
Identyfikator zamówienia w systemie (w celu zidentyfikowania zamówienia)Definicja
Ilość fakturyDefinicja
Kwota faktycznie zapłacona przez klientaDefinicja
Kwota faktycznie opłacona przez klienta w USDDefinicja
Kwota dodana do równowagi sprzedawcy, przy odjęciu wszystkich prowizji.Definicja
Kwota Komisji CryptomusDefinicja
Czy faktura jest sfinalizowana. Po sfinalizowaniu faktury nie można zapłacić faktury (jest ona opłacana lub wygasła)Definicja
Status płatnościDostępne opcje:- confirm_check- paid- paid_over- fail- wrong_amount- cancel- system_fail- refund_process- refund_fail- refund_paidDefinicja
Adres portfela płatnikaDefinicja
UUID z portfela statycznegoDefinicja
Sieć blockchain, w której dokonana jest płatnośćDefinicja
Waluta fakturyDefinicja
Waluta, którą klient faktycznie zapłaciłDefinicja
Dodatkowy ciąg informacji, który podałeś podczas tworzenia fakturyDefinicja
Informacje o walucie, do której płatność zostanie automatycznie przekonwertowana. Konwersja odbywa się z płatnika_currency do USDTPole convert nie będzie istniało, jeśli nie włączyłeś automatycznej funkcji konwersji dla payer_currency (np. Auto konwertuj BTC na USDT) StrukturaDefinicja
Hash transakcji na blockchain.Pole txid nie będzie istniało, jeśli1) Płatność została wypłacona przez P2P (płatnik wycofał fundusze z jego konta kryptomusa na adres wskazany na fakturze, a płatność została dokonana bez blockchain, tylko w naszym systemie)2) Płatność nie została zapłacona3) Coś było nie tak z płatnością lub klient popełnił błąd i zaznaczyliśmy to jako „opłacone” ręcznieDefinicja
Podpis
Struktura convert
Nazwa | Definicja |
---|---|
to_currency | Kod waluty, do którego płatność zostanie przekonwertowana |
commission | Opłata za konwersję |
rate | Współczynnik konwersji |
amount | Kwota konwersji w to_currency, która została dodana do równowagi sprzedawcy, przy odjęciu wszystkich prowizji.Kwota tutaj równa się stawce merchant_amount * |
Definicja
Kod waluty, do którego płatność zostanie przekonwertowanaDefinicja
Opłata za konwersjęDefinicja
Współczynnik konwersjiDefinicja
Kwota konwersji w to_currency, która została dodana do równowagi sprzedawcy, przy odjęciu wszystkich prowizji.Kwota tutaj równa się stawce merchant_amount *
Przykład odpowiedzi
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}
KOPIUJWeryfikacja WebHook
Ponieważ otrzymując haczyki internetowe, wypuszczasz produkty lub przypisujesz salda użytkowników, musisz upewnić się, że otrzymujesz haoki internetowe od Cryptomus, a nie od nikogo innego.
Zalecamy sprawdzenie tego na dwa sposoby:
- Użyj białej listy adresów IP i zezwól na żądania na URL_CALLBACK tylko z naszych IPS. Wysyłamy haoki internetowe z IP. 91.227.144.54
- Sprawdź podpis w każdym hacie internetowym, który przychodzi do twojego URL_CALLBACK, przeczytaj więcej o tym poniżej.
Weryfikacja podpisu Webhook
Twoje klucze API są tajne i nikt oprócz ciebie i Cryptomus nie powinni ich znać. Tak więc, weryfikując podpis, będziesz pewien, że Webhook został wysłany przez Cryptomus.
Tworzymy znak za pomocą tego algorytmu. Hash MD5 korpusu żądania pocztowego zakodowany w Base64 i połączony z kluczem API.
Gdy podpis pojawia się w ciele żądania, aby go zweryfikować, musisz wyodrębnić znak z ciała odpowiedzi, wygenerować skrót z ciała i klucza API i dopasować go do parametru znaku.
Przykład w PHP:
Aby otrzymać dane JSON wysyłane przez post do przewodnika WebHook:
1$data = file_get_contents('php://input');
2$data = json_decode($data, true);
KOPIUJPowiedzmy, że otrzymaliśmy hook Web z danymi w Ten szyk
Najpierw musimy wyodrębnić znak z tablicy:
1$sign = $data['sign'];
2unset($data['sign']);
KOPIUJTeraz wygenerujmy znak za pomocą naszego klucza płatności API:
1$hash = md5(base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)) . $apiPaymentKey);
KOPIUJNa koniec możemy sprawdzić, czy znak, który wygenerowaliśmy za pomocą naszego klucza płatności API, jest to znak, który przyszedł do Webhook.
1if (!hash_equals($hash, $sign)) {
2 return new InvalidHashException();
3}
4
5// or
6
7if ($hash !== $sign) {
8 return new InvalidHashException();
9}
KOPIUJW tym momencie możesz być pewien, że Webhook pochodzi z Cryptomus i że poprawnie otrzymałeś wszystkie dane
W 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"}
KOPIUJW 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
KOPIUJ