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로 BTC로 USDT) 구조 |
txid | 블록 체인의 거래 해시. txid 필드는 존재하지 않습니다.1) 지불금은 P2P에 의해 지불되었습니다 (지불 인은 Cryptomus 계정에서 송장에 표시된 주소로 자금을 인출했으며 시스템에서만 블록 체인없이 지불되었습니다).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로 BTC로 USDT) 구조정의
블록 체인의 거래 해시. txid 필드는 존재하지 않습니다.1) 지불금은 P2P에 의해 지불되었습니다 (지불 인은 Cryptomus 계정에서 송장에 표시된 주소로 자금을 인출했으며 시스템에서만 블록 체인없이 지불되었습니다).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 서명 확인
당신의 API 키는 비밀이며 당신과 cryptomus를 제외한 어느 누구도 그들을 알아야합니다. 따라서 서명을 확인할 때 Webhook이 Cryptomus에 의해 전송되었는지 확인합니다.
이 알고리즘을 사용하여 부호를 만듭니다. Base64에서 인코딩되고 API 키와 결합 된 사후 요청 본체의 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
복사