WEbhook

वेबहुक भुगतान जानकारी के लिए एक प्रकार की फीडबैक विधि है।
जब इनवॉइस की स्थिति बदलती है, तो इनवॉइस बनाते समय निर्दिष्ट url_callback पर एक POST अनुरोध भेजा जाता है।

प्रतिक्रिया

प्रतिक्रिया पैरामीटर

नामपरिभाषा
typeचालान प्रकार (वॉलेट / भुगतान)
uuidभुगतान का यूयूआईडी
order_idआपके सिस्टम में ऑर्डर आईडी (ऑर्डर की पहचान करने के लिए)
amountचालान की राशि
payment_amountग्राहक द्वारा वास्तव में भुगतान की गई राशि
payment_amount_usdग्राहक द्वारा वास्तव में भुगतान की गई राशि (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उस मुद्रा के बारे में जानकारी जिसमें भुगतान स्वचालित रूप से परिवर्तित हो जाएगा। रूपांतरण भुगतानकर्ता_मुद्रा से USDT में किया जाता हैयदि आपने payer_currency के लिए स्वचालित रूपांतरण फ़ंक्शन सक्षम नहीं किया है, तो convert फ़ील्ड मौजूद नहीं होगी (उदाहरण के लिए BTC को USDT में स्वचालित रूप से परिवर्तित करना) संरचना
txidब्लॉकचेन पर लेनदेन हैश.txid फ़ील्ड मौजूद नहीं होगी यदि1) भुगतान पी2पी द्वारा किया गया था (भुगतानकर्ता ने अपने क्रिप्टोमस खाते से चालान में दिए गए पते पर धनराशि निकाली और भुगतान ब्लॉकचेन के बिना, केवल हमारे सिस्टम में किया गया था)2) भुगतान नहीं किया गया3) भुगतान में कुछ गड़बड़ी थी या ग्राहक ने कोई गलती की थी और हमने उसे मैन्युअल रूप से 'भुगतान किया गया' चिह्नित कर दिया था
signहस्ताक्षर

परिभाषा

चालान प्रकार (वॉलेट / भुगतान)

परिभाषा

भुगतान का यूयूआईडी

परिभाषा

आपके सिस्टम में ऑर्डर आईडी (ऑर्डर की पहचान करने के लिए)

परिभाषा

चालान की राशि

परिभाषा

ग्राहक द्वारा वास्तव में भुगतान की गई राशि

परिभाषा

ग्राहक द्वारा वास्तव में भुगतान की गई राशि (USD में)

परिभाषा

व्यापारी के शेष में जोड़ी गई राशि, जिसमें से सभी कमीशन घटा दिए गए हैं।

परिभाषा

क्रिप्टोमस कमीशन राशि

परिभाषा

क्या चालान अंतिम रूप से तैयार हो गया है। जब चालान अंतिम रूप से तैयार हो जाता है, तो उसका भुगतान करना असंभव होता है (या तो उसका भुगतान हो चुका होता है या उसकी समय सीमा समाप्त हो चुकी होती है)

परिभाषा

भुगतान स्थितिउपलब्ध विकल्प:- confirm_check- paid- paid_over- fail- wrong_amount- cancel- system_fail- refund_process- refund_fail- refund_paid

परिभाषा

भुगतानकर्ता का वॉलेट पता

परिभाषा

स्थिर वॉलेट का uuid

परिभाषा

ब्लॉकचेन नेटवर्क जिसमें भुगतान किया जाता है

परिभाषा

चालान मुद्रा

परिभाषा

वह मुद्रा जिससे ग्राहक ने वास्तव में भुगतान किया

परिभाषा

अतिरिक्त जानकारी स्ट्रिंग जो आपने इनवॉइस बनाते समय प्रदान की थी

परिभाषा

उस मुद्रा के बारे में जानकारी जिसमें भुगतान स्वचालित रूप से परिवर्तित हो जाएगा। रूपांतरण भुगतानकर्ता_मुद्रा से USDT में किया जाता हैयदि आपने payer_currency के लिए स्वचालित रूपांतरण फ़ंक्शन सक्षम नहीं किया है, तो convert फ़ील्ड मौजूद नहीं होगी (उदाहरण के लिए BTC को USDT में स्वचालित रूप से परिवर्तित करना) संरचना

परिभाषा

ब्लॉकचेन पर लेनदेन हैश.txid फ़ील्ड मौजूद नहीं होगी यदि1) भुगतान पी2पी द्वारा किया गया था (भुगतानकर्ता ने अपने क्रिप्टोमस खाते से चालान में दिए गए पते पर धनराशि निकाली और भुगतान ब्लॉकचेन के बिना, केवल हमारे सिस्टम में किया गया था)2) भुगतान नहीं किया गया3) भुगतान में कुछ गड़बड़ी थी या ग्राहक ने कोई गलती की थी और हमने उसे मैन्युअल रूप से 'भुगतान किया गया' चिह्नित कर दिया था

परिभाषा

हस्ताक्षर

की संरचना convert

नामपरिभाषा
to_currencyवह मुद्रा कोड जिसमें भुगतान परिवर्तित किया जाएगा
commissionरूपांतरण शुल्क
rateरूपांतरण दर
amountto_currency में रूपांतरण राशि जो व्यापारी के शेष में जोड़ी गई, जिसमें से सभी कमीशन घटा दिए गए।यहाँ राशि व्यापारी राशि * दर के बराबर है

परिभाषा

वह मुद्रा कोड जिसमें भुगतान परिवर्तित किया जाएगा

परिभाषा

रूपांतरण शुल्क

परिभाषा

रूपांतरण दर

परिभाषा

to_currency में रूपांतरण राशि जो व्यापारी के शेष में जोड़ी गई, जिसमें से सभी कमीशन घटा दिए गए।यहाँ राशि व्यापारी राशि * दर के बराबर है

प्रतिक्रिया उदाहरण


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}
प्रतिलिपि

वेबहुक सत्यापन

चूंकि वेबहुक प्राप्त करके आप उत्पाद जारी कर रहे हैं या अपने उपयोगकर्ताओं के शेष राशि को क्रेडिट कर रहे हैं, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि आप क्रिप्टोमस से वेबहुक प्राप्त कर रहे हैं, किसी और से नहीं।

हम आपको दोनों तरीकों से इसकी जांच करने की सलाह देते हैं:

  • आईपी एड्रेस श्वेतसूची का उपयोग करें और केवल हमारे आईपी से ही url_callback अनुरोधों की अनुमति दें। हम वेबहुक आईपी 91.227.144.54 से भेजते हैं।
  • अपने url_callback पर आने वाले प्रत्येक वेबहुक में हस्ताक्षर सत्यापित करें, इसके बारे में नीचे और पढ़ें।

वेबहुक हस्ताक्षर सत्यापित करना

आपकी API i कुंजियाँ गुप्त हैं और आपके और क्रिप्टोमस के अलावा किसी को भी उनकी जानकारी नहीं होनी चाहिए। इसलिए, हस्ताक्षर सत्यापित करते समय, आपको यकीन हो जाएगा कि वेबहुक क्रिप्टोमस द्वारा भेजा गया था।

हम इस एल्गोरिथ्म का उपयोग करके एक संकेत बनाते हैं। POST अनुरोध के मुख्य भाग का MD5 हैश, जो base64 में एनकोड किया गया है और आपकी API कुंजी के साथ संयुक्त है।

चूंकि हस्ताक्षर अनुरोध के मुख्य भाग में आता है, इसे सत्यापित करने के लिए, आपको प्रतिक्रिया मुख्य भाग से हस्ताक्षर निकालने, मुख्य भाग और अपनी API कुंजी से एक हैश उत्पन्न करने और इसे हस्ताक्षर पैरामीटर के साथ मिलान करने की आवश्यकता है।

php में एक उदाहरण:

अपने वेबहुक हैंडलर पर डाक द्वारा भेजा गया json डेटा प्राप्त करने के लिए:


1$data = file_get_contents('php://input');
2$data = json_decode($data, true);
प्रतिलिपि

मान लीजिए कि हमें डेटा के साथ वेबहुक प्राप्त हुआ यह सरणी
सबसे पहले, हमें सरणी से चिह्न निकालने की आवश्यकता है:


1$sign = $data['sign'];
2unset($data['sign']);
प्रतिलिपि

अब आइए हमारी एपीआई भुगतान कुंजी का उपयोग करके एक संकेत उत्पन्न करें:


1$hash = md5(base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)) . $apiPaymentKey);
प्रतिलिपि

अंत में, हम यह जांच सकते हैं कि क्या हमारे API भुगतान कुंजी के साथ उत्पन्न किया गया संकेत वेबहुक पर आए संकेत के बराबर है।


1if (!hash_equals($hash, $sign)) {
2   return new InvalidHashException();
3}
4
5// or
6
7if ($hash !== $sign) {
8   return new InvalidHashException();
9}
प्रतिलिपि

इस बिंदु पर, आप सुनिश्चित हो सकते हैं कि वेबहुक क्रिप्टोमस से था और आपको सभी डेटा सही ढंग से प्राप्त हुआ था

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"}
प्रतिलिपि

जेएस में:


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            
प्रतिलिपि