webhook

WebHookは、支払い情報のための一種のフィードバック方法です。
請求書のステータスが変更されると、請求書の作成時に指定されたurl_callbackに投稿リクエストが送信されます。

応答

応答パラメーター

名前意味
type請求書タイプ(ウォレット /支払い)
uuid支払いのuuid
order_idシステム内の注文ID(注文を識別するため)
amount請求書の金額
payment_amount実際にクライアントが支払う金額
payment_amount_usdクライアントが実際にUSDで支払った金額
merchant_amount金額は商人の残高に追加され、すべての手数料が減算されました。
commissionCryptomus委員会額
is_final請求書が確定しているかどうか。請求書が確定した場合、請求書を支払うことは不可能です(支払いまたは期限切れのいずれか)
status支払い状況利用可能なオプション:confirm_checkpaidpaid_overfailwrong_amountcancelsystem_failrefund_processrefund_failrefund_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            
コピー