شبکه وب
هنگامی که وضعیت فاکتور تغییر می کند ، درخواست ارسال به url_callback مشخص شده هنگام ایجاد فاکتور ارسال می شود.
واکنش
پارامترهای پاسخ
نام | تعریف |
---|---|
type | نوع فاکتور (کیف پول / پرداخت) |
uuid | UUID پرداخت |
order_id | شناسه سفارش در سیستم خود (برای شناسایی سفارش) |
amount | مقدار فاکتور |
payment_amount | مبلغی که در واقع توسط مشتری پرداخت می شود |
payment_amount_usd | مبلغی که در واقع توسط مشتری به دلار پرداخت می شود |
merchant_amount | مبلغی که به تعادل بازرگان اضافه شده است ، با همه کمیسیون ها کم می شود. |
commission | مبلغ کمیسیون رمزنگاری |
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 | شبکه 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:
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
کپی