Webhook

WebHook, ödeme bilgileri için bir tür geri bildirim yöntemidir.
Fatura durumu değiştiğinde, faturayı oluştururken belirtilen url_callback'e bir posta isteği gönderilir.

Cevap

Yanıt parametreleri

İsimTanım
typeFatura Türü (Cüzdan / Ödeme)
uuidÖdemenin UUID'si
order_idSistemizde Sipariş Kimliği (siparişi tanımlamak için)
amountFaturanın miktarı
payment_amountGerçekten müşteri tarafından ödenen miktar
payment_amount_usdUSD'de Müşteri tarafından gerçekten ödenen tutar
merchant_amountTüccar bakiyesine eklenen miktar, tüm komisyonlar çıkarılır.
commissionCryptomus Komisyon Miktarı
is_finalFaturanın sonuçlanıp sonuçlanmadığı. Fatura sonuçlandırıldığında bir fatura ödemek imkansızdır (ödenir veya süresi dolmuş)
statusÖdeme durumuMevcut seçenekler:confirm_checkpaidpaid_overfailwrong_amountcancelsystem_failrefund_processrefund_failrefund_paid
fromÖdüllü Cüzdan Adresi
wallet_address_uuidStatik cüzdanın uuid
networkÖdemenin yapıldığı blockchain ağı
currencyFatura para birimi
payer_currencyMüşterinin gerçekten ödediği para birimi
additional_dataFatura oluştururken sağladığınız ek bilgi dizesi
convertÖdemenin otomatik olarak dönüştürüleceği para birimi hakkında bilgi. Dönüştürme Payer_currency 'den USDT'ye gerçekleştirilir Payer_currency için otomatik dönüşüm işlevini etkinleştirmediyseniz payer_currency alanı mevcut olmayacaktır (örn. BTC'yi otomatik olarak USDT'ye dönüştürmek) Yapı
txidBlockchain'de işlem karma. txid alanı mevcut olmayacak1) Ödeme P2P tarafından ödendi (ödeme yapan kişi, Cryptomus hesabından faturada belirtilen adrese fon çekti ve ödeme sadece sistemimizde blockchain olmadan yapıldı)2) Ödeme ödenmedi3) Ödemede bir sorun vardı veya müşteri bir hata yaptı ve bunu manuel olarak 'ücretli' olarak işaretledik
signİmza

Tanım

Fatura Türü (Cüzdan / Ödeme)

Tanım

Ödemenin UUID'si

Tanım

Sistemizde Sipariş Kimliği (siparişi tanımlamak için)

Tanım

Faturanın miktarı

Tanım

Gerçekten müşteri tarafından ödenen miktar

Tanım

USD'de Müşteri tarafından gerçekten ödenen tutar

Tanım

Tüccar bakiyesine eklenen miktar, tüm komisyonlar çıkarılır.

Tanım

Cryptomus Komisyon Miktarı

Tanım

Faturanın sonuçlanıp sonuçlanmadığı. Fatura sonuçlandırıldığında bir fatura ödemek imkansızdır (ödenir veya süresi dolmuş)

Tanım

Ödeme durumuMevcut seçenekler:- confirm_check- paid- paid_over- fail- wrong_amount- cancel- system_fail- refund_process- refund_fail- refund_paid

Tanım

Ödüllü Cüzdan Adresi

Tanım

Statik cüzdanın uuid

Tanım

Ödemenin yapıldığı blockchain ağı

Tanım

Fatura para birimi

Tanım

Müşterinin gerçekten ödediği para birimi

Tanım

Fatura oluştururken sağladığınız ek bilgi dizesi

Tanım

Ödemenin otomatik olarak dönüştürüleceği para birimi hakkında bilgi. Dönüştürme Payer_currency 'den USDT'ye gerçekleştirilir Payer_currency için otomatik dönüşüm işlevini etkinleştirmediyseniz payer_currency alanı mevcut olmayacaktır (örn. BTC'yi otomatik olarak USDT'ye dönüştürmek) Yapı

Tanım

Blockchain'de işlem karma. txid alanı mevcut olmayacak1) Ödeme P2P tarafından ödendi (ödeme yapan kişi, Cryptomus hesabından faturada belirtilen adrese fon çekti ve ödeme sadece sistemimizde blockchain olmadan yapıldı)2) Ödeme ödenmedi3) Ödemede bir sorun vardı veya müşteri bir hata yaptı ve bunu manuel olarak 'ücretli' olarak işaretledik

Tanım

İmza

Yapısı convert

İsimTanım
to_currencyÖdemenin dönüştürüleceği para birimi kodu
commissionDönüşüm ücreti
rateDönüşüm oranı
amountTüm komisyonlar çıkarıldığında, satıcının bakiyesine eklenen to_currency dönüşüm miktarı.Buradaki miktar satıcı_amount * oranına eşittir

Tanım

Ödemenin dönüştürüleceği para birimi kodu

Tanım

Dönüşüm ücreti

Tanım

Dönüşüm oranı

Tanım

Tüm komisyonlar çıkarıldığında, satıcının bakiyesine eklenen to_currency dönüşüm miktarı.Buradaki miktar satıcı_amount * oranına eşittir

Yanıt örneği


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

Webhook doğrulaması

Webhooks alarak ürünler yayınladığınız veya kullanıcılarınızın bakiyelerini kredilendirdiğiniz için, kimseden değil, Cryptomus'tan webhooks aldığınızdan emin olmanız gerekir.

Her iki şekilde de kontrol etmenizi öneririz:

  • IP adresi beyaz listesini kullanın ve url_callback'e yalnızca IP'lerimizden istekli isteklere izin verin. IP'den web şoförü gönderiyoruz. 91.227.144.54
  • Url_callback'inize gelen her webhook'ta imzayı doğrulayın, bunun hakkında daha fazla bilgi edinin.

Webhook imzasını doğrulamak

API anahtarlarınız gizlidir ve siz ve Cryptomus dışında hiç kimse onları tanımamalıdır. Bu nedenle, imzayı doğrularken, webhook'un Cryptomus tarafından gönderildiğinden emin olacaksınız.

Bu algoritmayı kullanarak bir işaret oluşturuyoruz. Base64'te kodlanan ve API anahtarınızla birleştirilen MD5 Post isteğinin gövdesinin karma.

İmza isteğin gövdesine geldikçe, doğrulamak için, işareti yanıt gövdesinden çıkarmanız, vücuttan ve API anahtarınızdan bir karma oluşturmanız ve işaret parametresi ile eşleştirmeniz gerekir.

PHP'de bir örnek:

Webhook işleyicinize gönderilen bir JSON verisini almak için:


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

Diyelim ki WebHook'u veri ile aldık Bu sıralamak
İlk olarak, işaretin dizisini çıkarmamız gerekiyor:


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

Şimdi API ödeme anahtarımızı kullanarak bir işaret oluşturalım:


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

Son olarak, API ödeme anahtarımızla oluşturduğumuz işaretin WebHook'a gelen işarete eşit olup olmadığını kontrol edebiliriz.


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

Bu noktada, webhook'un Cryptomus'tan olduğundan ve tüm verileri doğru bir şekilde aldığınızdan emin olabilirsiniz.

PHP ve diğer dillerde bir dizi veri kodlarken bir fark vardır. PHP kesikler kesiyor ve diğer bazı diller yok. Bu nedenle, bir işaret uyuşmazlığı ile karşılaşabilirsiniz. Düzgün çalışması için arkadan eğik çizgilerle kaçmanız gerekir.

PHP'de:


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

JS'de:


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            
Kopya