Webhook
Webhook是一种用于付款信息的反馈方法。
当发票状态更改时,创建发票时指定的url_callback。
当发票状态更改时,创建发票时指定的url_callback。
回复
响应参数
姓名 | 定义 |
---|---|
type | 发票类型(钱包 /付款) |
uuid | 付款的UUID |
order_id | 系统中的订购ID(确定订单) |
amount | 发票的金额 |
payment_amount | 实际上由客户支付的金额 |
payment_amount_usd | 客户实际支付的金额 |
merchant_amount | 将所有佣金减去的商人余额中增加的金额。 |
commission | 加密委员会金额 |
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执行的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
复制