Operasyonlar

Kripto satıcıları için ödeme mutabakatı

Kripto ödemelerini siparişleriniz ve bakiyenizle nasıl mutabık kılarsınız: ne kaydedilmeli, günlük kontroller, kaçırılan webhook'lar ve eksik ödemeler nasıl bulunur, ücretler ve çekimler nasıl muhasebeleştirilir.

Mutabakat tek bir soruya yanıt verir: ödenmiş saydığınız her sipariş gerçekten gelmiş bir ödemeyle eşleşiyor mu ve gelen her ödeme bir siparişle eşleşiyor mu? Kriptoda bu zor değildir, çünkü her ödeme kendi sipariş numaranızı taşır, ama yalnızca doğru şeyleri kaydeder ve zamanlanmış kontroller yaparsanız işler. Bu rehber neyi kaydedeceğinizi, hangi kontrolleri çalıştıracağınızı ve bulduğunuz farkları nasıl açıklayacağınızı gösteriyor.

Neyi mutabık kılıyorsunuz

Üç kayıt kümesinin tutması gerekir:

  1. Siparişleriniz: sattığınız şey, ABD doları cinsinden ve hangilerini ödenmiş saydığınız.
  2. Webhook günlüğünüz: Qvard'ın size gönderdiği bildirimler ve her biriyle ne yaptığınız.
  3. Qvard paneli: ağ geçidinin gördüğü haliyle ödemeler ve bakiye.

Genel API'de ödemeleri listeleyen veya okuyan bir rota yoktur, bu yüzden ağ geçidi tarafını bir betiğe çekemezsiniz. Siparişlerinizi ve kendi webhook günlüğünüzü birbiriyle mutabık kılar, sonra toplamları panelin gösterdikleriyle karşılaştırırsınız.

Mutabakat mümkün olsun diye neyi kaydetmeli

Veri varsa mutabakat kolaydır, yoksa acı vericidir.

  • Kendi sipariş numaranızı ödeme id değeri olarak kullanın. Ödemeyi oluşturduğunuzda Qvard'a gider ve webhook'ta geri gelir; yani her şeyi birleştiren anahtardır.
  • Her webhook'u günlüğe yazın: id, status, zaman ve kararınız (uygulandı, tekrar, bilinmeyen sipariş veya anahtar reddedildi). Gizli anahtarınızı asla günlüğe yazmayın.
  • Sipariş değerini sipariş anında dolar olarak saklayın ve ödendi işaretlediğiniz zamanı da.
  • Destek için isterseniz yanıttaki Qvard ödeme id değerini saklayın.

Siparişi yalnızca bir ödeme tamamlandığında Qvard'ın gönderdiği webhook'tan ödendi işaretleyin ve işleyiciyi idempotent yapın. Ayrıntılar kripto ödeme webhook'ları nasıl güvenli hale getirilir yazısında.

Günlük kontroller

Üç küçük sorgu hemen her şeyi yakalar; örnek onları gösteriyor.

  1. Kur penceresini aşmış ödenmemiş siparişler. Ödeme sayfasındaki kur bir saat sabittir. Bundan sonra hâlâ bekleyen bir sipariş ya terk edilmiştir ya da bildirimi kaçırılmıştır. O ödemelere panelde bakın.
  2. «completed» olayı olmayan ödenmiş siparişler. Bir siparişi ödendi işaretlediyseniz ama günlüğünüzde tamamlanma bildirimi yoksa bir şey webhook'u atlamıştır; bu asla olmamalı. Daha fazla göndermeden önce araştırın.
  3. Günlük toplam. Ödendi işaretlediğiniz siparişlerin sayısını ve dolar toplamını, panelin aynı gün için gösterdiği ödemelerle karşılaştırın.

Panel bir ödemeyi tamamlanmış gösterirken siparişiniz hâlâ ödenmemişse bildirim kaçırılmıştır: panelden yeniden gönderin ve idempotent işleyicinin uygulamasına izin verin.

SQLreconciliation.sql
-- Your side: every webhook you receive is logged with your decision.
CREATE TABLE qvard_events (
  id           BIGSERIAL PRIMARY KEY,
  order_id     TEXT        NOT NULL,           -- the id you sent to Qvard
  status       TEXT        NOT NULL,           -- completed, ...
  decision     TEXT        NOT NULL,           -- applied | repeat | unknown_order | rejected_key
  received_at  TIMESTAMPTZ NOT NULL DEFAULT now()
);

-- 1. Orders still unpaid after the rate window: candidates for a missed notification.
SELECT id, amount_usd, created_at
FROM   orders
WHERE  state = 'awaiting_payment'
  AND  created_at < now() - interval '1 hour'
ORDER  BY created_at;

-- 2. Orders you consider paid, with no logged "completed" event: investigate before fulfilling more.
SELECT o.id, o.amount_usd, o.paid_at
FROM   orders o
LEFT   JOIN qvard_events e ON e.order_id = o.id AND e.status = 'completed'
WHERE  o.state = 'paid' AND e.id IS NULL;

-- 3. The daily total to compare with the Qvard cabinet.
SELECT date_trunc('day', paid_at) AS day, count(*) AS orders, sum(amount_usd) AS usd
FROM   orders
WHERE  state = 'paid'
GROUP  BY 1
ORDER  BY 1 DESC;

Bulduğunuz farkları açıklamak

Çoğu açığın kısa bir neden listesi vardır.

  • Eksik bir ödeme. Tam tutardan az geldi, bu yüzden ödeme partial durumundadır ve tamamlanma webhook'u gönderilmedi. Sipariş ödenmemiştir; farkı isteyin veya iade edin. Bkz. USDT eksik ödemeleri nasıl ele alınır.
  • Kaçırılan bir bildirim. Sunucunuz yeniden deneme penceresinden (yaklaşık altı dakikada beş deneme) uzun süre kapalı kaldı ya da tam olarak HTTP 200 dışında bir şey yanıtladı. Bkz. ödeme sistemlerinde webhook yeniden deneme stratejisi.
  • Bir kopya. Aynı olay iki kez geldi. Doğru bir işleyici onu tekrar olarak günlüğe yazar ve hiçbir şeyi değiştirmez.
  • Bilinmeyen bir sipariş. Sizde olmayan bir id ile gelen bildirim. Gönderdiğiniz id'deki yazım hatalarını ve aynı anahtarla başka bir sistemden oluşturulan ödemeleri kontrol edin.
  • Bir iade. İade, sizin gönderdiğiniz bir transferdir; toplamlar kendini açıklamaya devam etsin diye onu orijinal siparişe kaydedin.

Ücretler, bakiyeler ve çekimler

Siparişlerin dolar değeri, cüzdanınızdaki para ile aynı şey değildir.

  • Komisyon. Abonelik ücreti yoktur; komisyon projenize özeldir ve fiyatlandırma sayfasına göre %1'den başlar, %0,1'e kadar inebilir. Onu ayrı bir satır olarak kaydedin.
  • Ağ ücretleri. Transferin ağ ücretini müşteri öder. Siz yalnızca kendi cüzdanınıza çekim yaptığınızda ağ ücretini ödersiniz.
  • Çekimler. Her birini tarihi, ağı ve ücretiyle kaydedin. Fiat banka hesabına çekim mevcut değildir; nakde çeviriyorsanız bu adım Qvard dışında gerçekleşir ve kendi kayıtları vardır.
  • Coin ve ağ. Farklı ağlardaki ödemeler ayrı birikir. Bakiyeleri varlık ve ağ bazında kontrol edin; bkz. kripto ödeme operasyonlarında ağ ücretleri.

Muhasebecinizi de bilgilendirin: kripto tahsilatların vergi ve muhasebe işlemi ülkenize bağlıdır.

FAQ

Mutabakat için ödemelerimi API ile çekebilir miyim?

Genel API'de ödemeleri listeleyen veya okuyan bir rota yoktur. Siparişlerinizi ve kendi webhook günlüğünüzü mutabık kılın, toplamları Qvard panelindeki ödemeler ve bakiyeyle karşılaştırın.

Bir ödemeyi siparişle nasıl eşleştiririm?

id ile. Ödemeyi oluştururken kendi sipariş numaranızı gönderirsiniz ve aynı id webhook'ta geri gelir.

Panel tamamlanmış bir ödeme gösteriyor ama siparişim ödenmemişse?

Bildirim kaçırılmış. Panelden yeniden gönderin; idempotent bir işleyici onu güvenle uygular.

Ne sıklıkla mutabakat yapmalıyım?

Günlük makul bir varsayılandır; ayrıca bir dizi webhook isteği hata aldığında uyarı kurun.

İlgili makaleler

İlgili makaleler