Webhook
Fatura durumu değiştiğinde, faturayı oluştururken belirtilen url_callback'e bir posta isteği gönderilir.
Cevap
Yanıt parametreleri
| İsim | Tanım | 
|---|---|
| type | Fatura Türü (Cüzdan / Ödeme) | 
| uuid | Ödemenin UUID'si | 
| order_id | Sistemizde Sipariş Kimliği (siparişi tanımlamak için) | 
| amount | Faturanın miktarı | 
| payment_amount | Gerçekten müşteri tarafından ödenen miktar | 
| payment_amount_usd | USD'de Müşteri tarafından gerçekten ödenen tutar | 
| merchant_amount | Tüccar bakiyesine eklenen miktar, tüm komisyonlar çıkarılır. | 
| commission | Cryptomus Komisyon Miktarı | 
| is_final | Faturanı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_check• paid• paid_over• fail• wrong_amount• cancel• system_fail• refund_process• refund_fail• refund_paid | 
| from | Ödüllü Cüzdan Adresi | 
| wallet_address_uuid | Statik cüzdanın uuid | 
| network | Ödemenin yapıldığı blockchain ağı | 
| currency | Fatura para birimi | 
| payer_currency | Müşterinin gerçekten ödediği para birimi | 
| additional_data | Fatura 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ı | 
| txid | 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 | 
| 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
| İsim | Tanım | 
|---|---|
| to_currency | Ödemenin dönüştürüleceği para birimi kodu | 
| commission | Dönüşüm ücreti | 
| rate | Dönüşüm oranı | 
| amount | 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 | 
- 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}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'a yalnızca bizim IP'lerimizden gelen istekleri kabul edin. Webhook'ları IP 91.227.144.54'ten gönderiyoruz.
- 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);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']);Ş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);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}Bu noktada, webhook'un Cryptomus'tan olduğundan ve tüm verileri doğru bir şekilde aldığınızdan emin olabilirsiniz.
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"}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