شبکه وب

Webhook نوعی روش بازخورد برای اطلاعات پرداخت است.
هنگامی که وضعیت فاکتور تغییر می کند ، درخواست ارسال به url_callback مشخص شده هنگام ایجاد فاکتور ارسال می شود.

واکنش

پارامترهای پاسخ

نامتعریف
typeنوع فاکتور (کیف پول / پرداخت)
uuidUUID پرداخت
order_idشناسه سفارش در سیستم خود (برای شناسایی سفارش)
amountمقدار فاکتور
payment_amountمبلغی که در واقع توسط مشتری پرداخت می شود
payment_amount_usdمبلغی که در واقع توسط مشتری به دلار پرداخت می شود
merchant_amountمبلغی که به تعادل بازرگان اضافه شده است ، با همه کمیسیون ها کم می شود.
commissionمبلغ کمیسیون رمزنگاری
is_finalآیا فاکتور نهایی شده است. وقتی فاکتور نهایی شد ، پرداخت فاکتور غیرممکن است (پرداخت می شود یا منقضی می شود)
statusوضعیت پرداختگزینه های موجود:confirm_checkpaidpaid_overfailwrong_amountcancelsystem_failrefund_processrefund_failrefund_paid
fromآدرس کیف پول پرداخت کننده
wallet_address_uuiduuid از کیف پول استاتیک
networkشبکه blockchain که در آن پرداخت انجام می شود
currencyفاکتور
payer_currencyارز که مشتری در واقع با آن پرداخت کرده است
additional_dataرشته اطلاعات اضافی که هنگام ایجاد فاکتور ارائه داده اید
convertاطلاعات مربوط به ارز که پرداخت به طور خودکار به آن تبدیل می شود. تبدیل از payer_currency به USDT انجام می شوداگر شما عملکرد تبدیل خودکار را برای payer_currency فعال نکرده اید (به عنوان مثال تبدیل خودکار BTC به USDT) قسمت convert وجود نخواهد داشت. ساختار
txidهش معامله در blockchain.قسمت txid وجود نخواهد داشت1) پرداخت توسط P2P پرداخت شده است (پرداخت کننده وجوه را از حساب رمزنگاری خود به آدرس مندرج در فاکتور پس گرفت و پرداخت بدون blockchain انجام شد ، فقط در سیستم ما)2) پرداخت پرداخت نشده است3) با پرداخت یا مشتری اشتباه کرد و ما آن را به صورت دستی "پرداخت شده" مشخص کردیم
signامضاء

تعریف

نوع فاکتور (کیف پول / پرداخت)

تعریف

UUID پرداخت

تعریف

شناسه سفارش در سیستم خود (برای شناسایی سفارش)

تعریف

مقدار فاکتور

تعریف

مبلغی که در واقع توسط مشتری پرداخت می شود

تعریف

مبلغی که در واقع توسط مشتری به دلار پرداخت می شود

تعریف

مبلغی که به تعادل بازرگان اضافه شده است ، با همه کمیسیون ها کم می شود.

تعریف

مبلغ کمیسیون رمزنگاری

تعریف

آیا فاکتور نهایی شده است. وقتی فاکتور نهایی شد ، پرداخت فاکتور غیرممکن است (پرداخت می شود یا منقضی می شود)

تعریف

وضعیت پرداختگزینه های موجود:- confirm_check- paid- paid_over- fail- wrong_amount- cancel- system_fail- refund_process- refund_fail- refund_paid

تعریف

آدرس کیف پول پرداخت کننده

تعریف

uuid از کیف پول استاتیک

تعریف

شبکه blockchain که در آن پرداخت انجام می شود

تعریف

فاکتور

تعریف

ارز که مشتری در واقع با آن پرداخت کرده است

تعریف

رشته اطلاعات اضافی که هنگام ایجاد فاکتور ارائه داده اید

تعریف

اطلاعات مربوط به ارز که پرداخت به طور خودکار به آن تبدیل می شود. تبدیل از payer_currency به USDT انجام می شوداگر شما عملکرد تبدیل خودکار را برای payer_currency فعال نکرده اید (به عنوان مثال تبدیل خودکار BTC به USDT) قسمت convert وجود نخواهد داشت. ساختار

تعریف

هش معامله در blockchain.قسمت txid وجود نخواهد داشت1) پرداخت توسط P2P پرداخت شده است (پرداخت کننده وجوه را از حساب رمزنگاری خود به آدرس مندرج در فاکتور پس گرفت و پرداخت بدون blockchain انجام شد ، فقط در سیستم ما)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}
کپی

تأیید صحت وب

از آنجا که با دریافت وب سایت های وب ، محصولات خود را منتشر می کنید یا به مانده کاربران خود اعتبار می دهید ، باید مطمئن شوید که از طریق Cryptomus و نه از طرف دیگر ، وب سایت های وب را دریافت می کنید.

ما به شما توصیه می کنیم هر دو روش را بررسی کنید:

  • از Whitelist آدرس IP استفاده کنید و درخواست کنید فقط از IPS ما URL_CALLBACK استفاده کنند. ما از IP وب های وب ارسال می کنیم. 91.227.144.54
  • امضا را در هر صفحه وب که به url_callback شما می آید ، تأیید کنید ، در مورد این موضوع بیشتر بخوانید.

تأیید امضای Webhook

کلیدهای API شما مخفی هستند و هیچ کس جز شما و رمزنگاری نباید آنها را بشناسد. بنابراین ، هنگام تأیید امضای ، مطمئن خواهید بود که وب سایت توسط Cryptomus ارسال شده است.

ما با استفاده از این الگوریتم یک علامت ایجاد می کنیم. MD5 هش از بدنه درخواست پست رمزگذاری شده در Base64 و همراه با کلید API شما.

از آنجا که امضای در بدنه درخواست می آید ، برای تأیید آن ، باید علامت را از بدن پاسخ استخراج کنید ، یک هش را از بدن و کلید API خود تولید کنید و آن را با پارامتر علامت مطابقت دهید.

نمونه ای در PHP:

برای دریافت داده JSON ارسال شده از طریق پست به Webhook Handler خود:


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

بیایید بگوییم که ما با داده های موجود در وب دریافت کرده ایم این آرایه
ابتدا باید علامت را از آرایه استخراج کنیم:


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}
کپی

در این مرحله ، می توانید مطمئن باشید که وب سایت از Cryptomus بوده و تمام داده ها را به درستی دریافت کرده اید

در هنگام رمزگذاری مجموعه ای از داده ها در PHP و سایر زبان ها تفاوت وجود دارد. PHP از بریدگی ها فرار می کند و برخی از زبان های دیگر چنین نمی کنند. بنابراین ، ممکن است با عدم تطابق علامت روبرو شوید. شما باید از برش ها با backslash فرار کنید تا به درستی کار کند.

در 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            
کپی