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로 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            
복사