webhook
WebHookは、支払い情報のための一種のフィードバック方法です。
請求書のステータスが変更されると、請求書の作成時に指定されたurl_callbackに投稿リクエストが送信されます。
請求書のステータスが変更されると、請求書の作成時に指定されたurl_callbackに投稿リクエストが送信されます。
応答
応答パラメーター
名前 | 意味 |
---|---|
type | 請求書タイプ(ウォレット /支払い) |
uuid | 支払いのuuid |
order_id | システム内の注文ID(注文を識別するため) |
amount | 請求書の金額 |
payment_amount | 実際にクライアントが支払う金額 |
payment_amount_usd | クライアントが実際にUSDで支払った金額 |
merchant_amount | 金額は商人の残高に追加され、すべての手数料が減算されました。 |
commission | Cryptomus委員会額 |
is_final | 請求書が確定しているかどうか。請求書が確定した場合、請求書を支払うことは不可能です(支払いまたは期限切れのいずれか) |
status | 支払い状況利用可能なオプション:• confirm_check• paid• paid_over• fail• wrong_amount• cancel• system_fail• refund_process• refund_fail• refund_paid |
from | 支払者のウォレットアドレス |
wallet_address_uuid | 静的ウォレットのuuid |
network | 支払いが行われるブロックチェーンネットワーク |
currency | 請求書通貨 |
payer_currency | クライアントが実際に支払った通貨 |
additional_data | 請求書を作成するときに提供した追加情報文字列 |
convert | 支払いが自動的に変換される通貨に関する情報。変換は payer_currency からUSDTに実行されます convert フィールドは、 payer_currency の自動変換機能を有効にしていない場合、存在しません(たとえば、btcをusdtに自動変換) 構造 |
txid | ブロックチェーンでのトランザクションハッシュ。 txid フィールドは存在しない場合1)支払いはP2Pによって支払われました(支払者は、請求書に示されている住所まで、支払人を撤回し、支払いはブロックチェーンなしで行われました。2)支払いは支払われませんでした3)支払いに何か問題があったか、クライアントが間違いを犯し、私たちはそれを手動で「支払った」とマークしました |
sign | サイン |
意味
請求書タイプ(ウォレット /支払い)意味
支払いのuuid意味
システム内の注文ID(注文を識別するため)意味
請求書の金額意味
実際にクライアントが支払う金額意味
クライアントが実際にUSDで支払った金額意味
金額は商人の残高に追加され、すべての手数料が減算されました。意味
Cryptomus委員会額意味
請求書が確定しているかどうか。請求書が確定した場合、請求書を支払うことは不可能です(支払いまたは期限切れのいずれか)意味
支払い状況利用可能なオプション:- confirm_check- paid- paid_over- fail- wrong_amount- cancel- system_fail- refund_process- refund_fail- refund_paid意味
支払者のウォレットアドレス意味
静的ウォレットのuuid意味
支払いが行われるブロックチェーンネットワーク意味
請求書通貨意味
クライアントが実際に支払った通貨意味
請求書を作成するときに提供した追加情報文字列意味
支払いが自動的に変換される通貨に関する情報。変換は payer_currency からUSDTに実行されます convert フィールドは、 payer_currency の自動変換機能を有効にしていない場合、存在しません(たとえば、btcをusdtに自動変換) 構造意味
ブロックチェーンでのトランザクションハッシュ。 txid フィールドは存在しない場合1)支払いはP2Pによって支払われました(支払者は、請求書に示されている住所まで、支払人を撤回し、支払いはブロックチェーンなしで行われました。2)支払いは支払われませんでした3)支払いに何か問題があったか、クライアントが間違いを犯し、私たちはそれを手動で「支払った」とマークしました意味
サイン
の構造 convert
名前 | 意味 |
---|---|
to_currency | 支払いが変換される通貨コード |
commission | 変換料 |
rate | 変換速度 |
amount | すべての委員会が減算された状態で、商人の残高に追加されたto_currencyの変換量。ここでの金額は、merchant_amount *レートに相当します |
意味
支払いが変換される通貨コード意味
変換料意味
変換速度意味
すべての委員会が減算された状態で、商人の残高に追加されたto_currencyの変換量。ここでの金額は、merchant_amount *レートに相当します
応答の例
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}
コピーWebHook検証
Webhooksを受け取ることで、製品をリリースしたり、ユーザーの残高をクレジットしたりすることで、他の人からではなく、CryptomusからWebhooksを受け取ることを確認する必要があります。
両方の方法を確認することをお勧めします。
- IPアドレスホワイトリストを使用し、IPSからのみurl_callbackへのリクエストを許可します。 IPからwebhooksを送信します。 91.227.144.54
- url_callbackに来ているすべてのWebhookで署名を確認してください。これについては、以下をご覧ください。
WebHook署名の確認
あなたのAPIキーは秘密であり、あなたとCryptomus以外の誰もそれらを知るべきではありません。したがって、署名を検証するときは、webhookがCryptomusによって送信されたことを確認できます。
このアルゴリズムを使用してサインを作成します。 base64でエンコードされ、APIキーと組み合わされたPOSTリクエストの本文のMD5ハッシュ。
署名がリクエストの本文にあるため、それを確認するために、応答本体から標識を抽出し、本体とAPIキーからハッシュを生成し、符号パラメーターと一致させる必要があります。
PHPの例:
WebHookハンドラーに郵送から送信されたJSONデータを受信するには:
1$data = file_get_contents('php://input');
2$data = json_decode($data, true);
コピーデータが入ったWebhookを受け取ったとしましょう これ 配列
まず、配列からサインを抽出する必要があります。
1$sign = $data['sign'];
2unset($data['sign']);
コピー次に、API支払いキーを使用してサインを生成します。
1$hash = md5(base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)) . $apiPaymentKey);
コピー最後に、API支払いキーで生成した標識がWebhookに来たサインに等しいかどうかを確認できます。
1if (!hash_equals($hash, $sign)) {
2 return new InvalidHashException();
3}
4
5// or
6
7if ($hash !== $sign) {
8 return new InvalidHashException();
9}
コピーこの時点で、WebhookはCryptomusからのものであり、すべてのデータを正しく受け取ったことを確認できます。
PHPおよびその他の言語で一連のデータをエンコードする場合、違いがあります。 PHPはスラッシュを逃れ、他のいくつかの言語はそうではありません。したがって、サインの不一致に遭遇する可能性があります。バックスラッシュでスラッシュを逃れるには、それを適切に機能させる必要があります。
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"}
コピー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
コピー