Webhook

Webhook — bu to'lov ma'lumotlari uchun fikr-mulohaza usulining bir turi.
Hisob-faktura holati o'zgarganda, hisob-faktura yaratishda ko'rsatilgan url_callback manziliga POST so'rovi yuboriladi.

Javob

Javob parametrlari

IsmTa'rif
typeHisob-faktura turi (hamyon / to'lov)
uuidTo'lovning UUID
order_idTizimdagi buyurtma identifikatori (buyurtmani aniqlash uchun)
amountHisob-faktura miqdori
payment_amountAslida mijoz tomonidan to'langan miqdor
payment_amount_usdAslida mijoz tomonidan AQSh dollarida to'langan miqdor
merchant_amountSavdogarning muvozanatiga qo'shilgan summa, barcha komissiyalar olib tashlandi.
commissionHeleket komissiyasi miqdori
is_finalHisob-faktura yakunlanadimi. Hisob-faktura tugagach, hisob-fakturani to'lash mumkin emas (u to'langan yoki muddati tugagan)
statusTo'lov holatiMavjud variantlar:confirm_checkpaidpaid_overfailwrong_amountcancelsystem_failrefund_processrefund_failrefund_paid
fromTo'lovchining hamyon manzili
wallet_address_uuidStatik hamyonning uuid
networkTo'lov amalga oshiriladigan bokkain tarmog'i
currencyHisob-faktura valyutasi
payer_currencyMijoz aslida to'langanligi haqidagi valyutasi
additional_dataHisob-fakturani yaratishda siz bergan qo'shimcha ma'lumot
convertTo'lov avtomatik ravishda o'zgartirilgan valyuta haqidagi ma'lumotlar. Konversiya to'lovchi_currenience dan USDT uchun amalga oshiriladimethods.The convert field will not exist if you have not enabled the automatic conversion function for payer_currency Tuzilish
txidBlokchinda bitim.Agar bo'lsa, txid maydoni mavjud bo'lmaydi1) To'lov p2p orqali amalga oshirildi (To'lov qiluvchi Heleket hisobidan invoisda ko'rsatilgan manzilga mablag'ni olib chiqdi va to'lov blokcheynsız, faqat bizning tizimda amalga oshirildi).2) To'lov to'lanmagan3) To'lov bilan bog'liq bo'lgan narsa yoki mijoz xato qilgan va biz uni "to'langan" qo'lda deb belgiladik
signImzo

Ta'rif

Hisob-faktura turi (hamyon / to'lov)

Ta'rif

To'lovning UUID

Ta'rif

Tizimdagi buyurtma identifikatori (buyurtmani aniqlash uchun)

Ta'rif

Hisob-faktura miqdori

Ta'rif

Aslida mijoz tomonidan to'langan miqdor

Ta'rif

Aslida mijoz tomonidan AQSh dollarida to'langan miqdor

Ta'rif

Savdogarning muvozanatiga qo'shilgan summa, barcha komissiyalar olib tashlandi.

Ta'rif

Heleket komissiyasi miqdori

Ta'rif

Hisob-faktura yakunlanadimi. Hisob-faktura tugagach, hisob-fakturani to'lash mumkin emas (u to'langan yoki muddati tugagan)

Ta'rif

To'lov holatiMavjud variantlar:- confirm_check- paid- paid_over- fail- wrong_amount- cancel- system_fail- refund_process- refund_fail- refund_paid

Ta'rif

To'lovchining hamyon manzili

Ta'rif

Statik hamyonning uuid

Ta'rif

To'lov amalga oshiriladigan bokkain tarmog'i

Ta'rif

Hisob-faktura valyutasi

Ta'rif

Mijoz aslida to'langanligi haqidagi valyutasi

Ta'rif

Hisob-fakturani yaratishda siz bergan qo'shimcha ma'lumot

Ta'rif

To'lov avtomatik ravishda o'zgartirilgan valyuta haqidagi ma'lumotlar. Konversiya to'lovchi_currenience dan USDT uchun amalga oshiriladimethods.The convert field will not exist if you have not enabled the automatic conversion function for payer_currency Tuzilish

Ta'rif

Blokchinda bitim.Agar bo'lsa, txid maydoni mavjud bo'lmaydi1) To'lov p2p orqali amalga oshirildi (To'lov qiluvchi Heleket hisobidan invoisda ko'rsatilgan manzilga mablag'ni olib chiqdi va to'lov blokcheynsız, faqat bizning tizimda amalga oshirildi).2) To'lov to'lanmagan3) To'lov bilan bog'liq bo'lgan narsa yoki mijoz xato qilgan va biz uni "to'langan" qo'lda deb belgiladik

Ta'rif

Imzo

Tarkibi convert

IsmTa'rif
to_currencyTo'lovni amalga oshiradigan valyuta kodi
commissionKonvertatsiya to'lovi
rateKonvertatsiya darajasi
amountSavdogarning muvozanatiga qo'shilgan to_currency aylantirish miqdori, barcha komissiyalar olib tashlandi.Mumkin Bu erda savdogar_amount * stavkaga teng

Ta'rif

To'lovni amalga oshiradigan valyuta kodi

Ta'rif

Konvertatsiya to'lovi

Ta'rif

Konvertatsiya darajasi

Ta'rif

Savdogarning muvozanatiga qo'shilgan to_currency aylantirish miqdori, barcha komissiyalar olib tashlandi.Mumkin Bu erda savdogar_amount * stavkaga teng

Javob namunasi


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}
Copy

Webhook tasdiqlash

Webhooks qabul qilganingizda siz mahsulotlarni chiqarish yoki foydalanuvchilaringizning balanslarini kreditlashni amalga oshirasiz, shuning uchun Heleket'dan webhooks qabul qilayotganingizga va boshqa hech kimdan emasligingizga ishonch hosil qilishingiz kerak.

Ikkala usulni tekshirishni maslahat beramiz:

  • IP manzillari oq ro'yxatini ishlating va url_callback ga faqat bizning IP-larimizdan kelgan so'rovlarni ruxsat bering. Biz webhooks'ni IP 31.133.220.8 dan yuboramiz.
  • Har bir webhookda, url_callback manzilingizga kelayotgan imzoni tekshiring, bu haqda quyida ko'proq o'qing.

Webhook imzoini tekshirish

Sizning API kalitlaringiz maxfiydir va ularni faqat siz va Heleket bilishi kerak. Shunday qilib, imzoni tekshirayotganda, siz webhook'ning Heleket tomonidan yuborilganiga ishonch hosil qilasiz.

Biz ushbu algoritm yordamida imzo yaratamiz. Post so'rovining yostiqchisining yostiqchisining bachadonining tanasi va API kaliti bilan birlashtirilgan MD5 has.

Imzo talabning organida bo'lgani sayin, uni tekshirish uchun siz javob berish organidan belgini olish, tanadan xeshni va API tugmachasini yaratishingiz va uni belgilash parametringiz bilan uyg'unlashtirishingiz kerak.

PHP-da misol:

Webhook handler'ga POST orqali yuborilgan json ma'lumotni olish uchun:


1$data = file_get_contents('php://input');
2$data = json_decode($data, true);
Copy

Faraz qiling, biz webhook bilan ma'lumotni oldik bu massiv
Birinchidan, biz yozuvni massivdan chiqarib olishimiz kerak:


1$sign = $data['sign'];
2unset($data['sign']);
Copy

Endi bizning API to'lovi kaliti yordamida belgi yaratishga imkon beradi:


1$hash = md5(base64_encode(json_encode($data, JSON_UNESCAPED_UNICODE)) . $apiPaymentKey);
Copy

Nihoyat, biz API to'lov kalitimiz bilan yaratgan imzo webhook-ga kelgan imzo bilan tengligini tekshira olamiz.


1if (!hash_equals($hash, $sign)) {
2   return new InvalidHashException();
3}
4
5// or
6
7if ($hash !== $sign) {
8   return new InvalidHashException();
9}
Copy

Hozirgi paytda siz webhook Heleket’dan ekanligiga va barcha ma'lumotlarni to‘g‘ri olganingizga ishonch hosil qilishingiz mumkin.

PHP va boshqa tillarda ma'lumotlar qatorini kodlashda farq bor. PHP-ni silkitadi va boshqa boshqa tillarni o'chiradi. Shuning uchun siz imzo chekishga duch kelishingiz mumkin. To'g'ri ishlash uchun siz orqa tomondan siljishlar bilan qochishingiz kerak.

PHP-da:


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"}
Copy

JS-da:


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            
Copy