Webhook

Webhook是一种用于付款信息的反馈方法。
当发票状态更改时,创建发票时指定的url_callback。

回复

响应参数

姓名定义
type发票类型(钱包 /付款)
uuid付款的UUID
order_id系统中的订购ID(确定订单)
amount发票的金额
payment_amount实际上由客户支付的金额
payment_amount_usd客户实际支付的金额
merchant_amount将所有佣金减去的商人余额中增加的金额。
commission加密委员会金额
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执行的methods.The convert field will not exist if you have not enabled the automatic conversion function for payer_currency 结构
txid区块链上的交易哈希。如果1)P2P支付了付款(付款人从他的加密帐户中撤回了资金到发票中指示的地址,并且付款没有区块链,仅在我们的系统中)2)未支付付款3)付款或客户犯了一个错误,我们将其标记为“付款”
sign签名

定义

发票类型(钱包 /付款)

定义

付款的UUID

定义

系统中的订购ID(确定订单)

定义

发票的金额

定义

实际上由客户支付的金额

定义

客户实际支付的金额

定义

将所有佣金减去的商人余额中增加的金额。

定义

加密委员会金额

定义

发票是否最终确定。确定发票时,不可能支付发票(已支付或过期)

定义

支付状态可用选项:- confirm_check- paid- paid_over- fail- wrong_amount- cancel- system_fail- refund_process- refund_fail- refund_paid

定义

付款人的钱包地址

定义

静态钱包的UUID

定义

付款的区块链网络

定义

发票货币

定义

客户实际支付的货币

定义

创建发票时提供的其他信息字符串

定义

有关将自动转换付款的货币的信息。转换是从 payer_currency 到USDT执行的methods.The convert field will not exist if you have not enabled the automatic conversion function for payer_currency 结构

定义

区块链上的交易哈希。如果1)P2P支付了付款(付款人从他的加密帐户中撤回了资金到发票中指示的地址,并且付款没有区块链,仅在我们的系统中)2)未支付付款3)付款或客户犯了一个错误,我们将其标记为“付款”

定义

签名

结构 convert

姓名定义
to_currency将转换付款的货币代码
commission转换费
rate兑换率
amount转换金额为to_currency,将所有委员会减去添加到商人的余额中。这里的金额等于商品_Amount *速率

定义

将转换付款的货币代码

定义

转换费

定义

兑换率

定义

转换金额为to_currency,将所有委员会减去添加到商人的余额中。这里的金额等于商品_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签名

您的API键是秘密的,除了您和Cryptomus之外,没有人知道它们。因此,在验证签名时,您将确保Webhook由Cryptomus发送。

我们使用此算法创建一个符号。 MD5的帖子请求正文Hash编码在base64中,并与您的API密钥结合使用。

当签名出现在请求的主体中,为了验证它,您需要从响应主体中提取符号,从主体和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            
复制