Eksik, Fazla ve Geç Kripto Ödemeler Nasıl Yönetilir?
Kripto ödemede eksik, fazla ve geç gelen tutarları nasıl yöneteceğinizi öğrenin. Tolerans ayarı, ek süre, webhook olayları ve kod örnekleri bu rehberde.

Eksik, fazla ve geç kripto ödemeler, kripto ile satış yapan her işletmenin er geç karşılaştığı durumlardır. Müşteri borsadan çekim yaparken ücreti tutardan düşer, fazladan birkaç kuruş gönderir ya da süre dolduktan sonra ödeme yapar. Bu rehberde MercanPay'in bu üç durumu nasıl ele aldığını ve sitenizde nasıl karşılamanız gerektiğini anlatıyoruz.
Neden tutar her zaman tam gelmez?
Kart ödemesinde tutar sistem tarafından belirlenir, müşteri bir şey yazmaz. Kripto ödemede ise müşteri tutarı kendi cüzdanına ya da borsasına elle girer ve bu da farklılıklara yol açar:
- Borsa ücretleri: Bazı borsalar çekim ücretini gönderilen tutardan düşer. Müşteri "25 USDT gönder" dediğinde alıcıya daha az ulaşabilir.
- Yuvarlama ve yazım hataları: Ondalık basamaklar yanlış girilebilir.
- Birden fazla işlem: Müşteri tutarı iki parça halinde gönderebilir.
- Gecikme: Müşteri ödeme sayfasını açık bırakıp saatler sonra ödeme yapabilir.
İyi bir ödeme altyapısı bu durumları bir hata olarak değil, beklenen senaryolar olarak ele alır. Ödeme sayfasının genel işleyişini kripto ödeme sistemi nedir yazımızda anlattık.
Fatura durumları kısa özet
MercanPay faturaları şu durumlardan birinde bulunur:
| Durum | Anlamı | Ne yapmalısınız |
|---|---|---|
pending |
Ödeme bekleniyor | Bekleyin |
partial |
Eksik ödeme geldi | Müşterinin kalanı göndermesini bekleyin |
paid |
Tam ödendi | Siparişi onaylayın |
overpaid |
Fazla ödendi | Siparişi onaylayın, fazlayı değerlendirin |
expired |
Süre doldu, ödeme yok | Siparişi kapatın veya yeni fatura açın |
cancelled |
İptal edildi | Siparişi kapatın |
Her durum değişikliğinde sunucunuza imzalı bir webhook gönderilir: invoice.paid, invoice.partial, invoice.overpaid, invoice.expired, invoice.cancelled.
Eksik ödemeler ve ek süre
Müşteri faturadan daha az gönderdiğinde fatura partial durumuna geçer ve size invoice.partial webhook'u gelir. Bu noktada:
- Ödeme sayfası müşteriye kalan tutarı gösterir.
- Müşteri kalanı aynı adrese gönderebilir.
- Faturaya en az 30 dakika ek süre verilir. Böylece müşteri kalan tutarı gönderirken süre dolmaz.
- API yanıtındaki
remaining_amountalanı kalan tutarı verir.
Kalan tutar geldiğinde fatura paid olur ve invoice.paid webhook'u gönderilir. Sipariş onayını bu olaya bağlamanız yeterlidir.
Eksik ödeme toleransı (%0–20)
Bazı işletmeler çok küçük eksikler için müşteriyi yeniden ödeme yapmaya zorlamak istemez. Birkaç sentlik fark için müşteriyle yazışmak hem size hem müşteriye zaman kaybettirir. Bunun için panelde isteğe bağlı bir eksik ödeme toleransı ayarı bulunur. Oranı %0 ile %20 arasında belirleyebilirsiniz.
Hangi oranı seçmelisiniz? Ürününüzün marjına göre karar verin:
- %0: Her kuruş önemliyse, örneğin düşük marjlı ürünlerde.
- %1–2: Borsa ücreti kaynaklı küçük farkları tolere etmek için makul bir aralık.
- Daha yüksek oranlar: Yalnızca bunu bilinçli bir iş kararı olarak veriyorsanız.
Fazla ödemeler
Müşteri faturadan fazla gönderirse fatura overpaid olur ve invoice.overpaid webhook'u gelir. Alınan tutarın tamamı bakiyenize yazılır. API yanıtında paid_amount ödenen toplamı, overpaid_amount ise fazla kısmı gösterir.
Sipariş açısından overpaid, paid ile aynı şekilde ele alınmalıdır: müşteri en az istenen tutarı ödemiştir. Fazla kısım için kendi politikanızı belirleyin. Bir sonraki siparişe kredi olarak tanımlayabilir ya da müşteriyle iletişime geçip iade edebilirsiniz. İade, bakiyenizden müşterinin bildirdiği adrese yapacağınız bir çekimdir. Çekim ücretinin (1–3 $) bu işleme uygulanacağını unutmayın.
Geç ödemeler
Faturalar en fazla 24 saat açık kalır. Peki müşteri süre dolduktan sonra ödeme yaparsa ne olur?
Geç gelen ödeme yine de bakiyenize yazılır. Para kaybolmaz. İptal edilmiş bir faturaya sonradan gelen ödeme de aynı şekilde bakiyenize eklenir. Webhook içindeki data.payment.late alanı ödemenin geç geldiğini belirtir.
Burada kur konusu önemlidir:
- USDT faturalar: USDT dolara sabitlenmeye çalışan bir stabil coin olduğu için kur farkı pratikte önemsizdir.
- USD fiyatlı TRX faturalar: Geç gelen ödeme o anki kurla yeniden fiyatlanır. Süre boyunca kilitli olan kur artık geçerli değildir, çünkü TRX'in fiyatı arada değişmiş olabilir.
Kur kilidinin nasıl çalıştığını kripto ödemede kur riski yazımızda ayrıntılı anlattık.
Geç ödeme için iş kuralınızı önceden belirleyin. Stokta kalan bir dijital ürünse siparişi yine de teslim edebilirsiniz. Kampanya fiyatı ya da sınırlı stok varsa müşteriyle iletişime geçmek daha doğru olabilir.
Webhook'ta bu durumları kodla karşılamak
Aşağıdaki PHP örneği, resmi kütüphanenin verifyWebhook metodunu kullanarak her durumu ayrı ele alır:
<?php
require 'vendor/autoload.php';
use MercanPay\MercanPay;
$body = file_get_contents('php://input');
$header = $_SERVER['HTTP_X_MERCANPAY_SIGNATURE'] ?? '';
if (!MercanPay::verifyWebhook(getenv('MERCANPAY_WEBHOOK_SECRET'), $body, $header)) {
http_response_code(401);
exit;
}
$event = json_decode($body, true);
$invoice = $event['data']['invoice'] ?? [];
$payment = $event['data']['payment'] ?? [];
switch ($event['type']) {
case 'invoice.paid':
case 'invoice.overpaid':
// Siparişi onaylayın. Aynı olay birden fazla gelebilir: idempotent olun.
// $payment['late'] true ise geç ödeme politikanızı uygulayın.
break;
case 'invoice.partial':
// Siparişi "kısmi ödendi" olarak işaretleyin, teslim etmeyin.
break;
case 'invoice.expired':
case 'invoice.cancelled':
// Siparişi kapatın veya stok rezervasyonunu serbest bırakın.
break;
}
http_response_code(200);
Aynı mantık Python'da verify_webhook fonksiyonuyla kurulabilir. Ayrıntılar için Python ile kripto ödeme entegrasyonu ve webhook imzası doğrulama yazılarımıza bakabilirsiniz.
Dikkat edilmesi gereken üç nokta:
- Tekrarları eleyin. Webhook'lar 2xx yanıt alınana kadar artan aralıklarla yeniden denenir: 30 sn, 2 dk, 10 dk, 30 dk, 1 sa, 3 sa, 6 sa, 12 sa, 24 sa. Olay kimliğiyle (
id) ya daorder_idile aynı olayı ikinci kez işlemeyin. - Tutarı ve coini kontrol edin. Webhook'taki
tokenvepaid_amountdeğerlerinin siparişinizle eşleştiğini doğrulayın. - Tarayıcı yönlendirmesine güvenmeyin.
success_urlyönlendirmesi taklit edilebilir. Siparişi yalnızca doğrulanmış webhook'a ya da API sorgusuna göre onaylayın.
Panelde Webhooklar sayfasındaki teslimat geçmişinden her olayın yanıt kodunu görebilir ve gerekirse yeniden gönderebilirsiniz.
Sık sorulan sorular
Müşteri eksik gönderdi ve süre doldu. Para ne olur?
Gelen tutar bakiyenize yazılır. Kısmi ödeme sonrası faturaya en az 30 dakika ek süre verildiği için müşterinin kalanı göndermek için zamanı olur. Yine de tamamlanmazsa müşteriyle iletişime geçip kalan tutar için yeni bir fatura açabilirsiniz.
Fazla ödenen tutarı otomatik iade ediyor musunuz?
Hayır. Tutarın tamamı bakiyenize yazılır ve iade kararı size aittir. İade etmek isterseniz bakiyenizden müşterinin adresine çekim yaparsınız.
USD fiyatlı bir TRX faturası geç ödendi. Hangi kur geçerli?
Geç gelen TRX ödemesi, ödemenin geldiği andaki güncel kurla yeniden fiyatlanır.
Eksik ödeme toleransını açmalı mıyım?
Borsa ücretlerinden kaynaklanan küçük farklar sık yaşanıyorsa düşük bir tolerans müşteri deneyimini iyileştirir. Oranı marjınıza göre seçin.
MercanPay ile başlayın
Eksik, fazla ve geç ödemeleri otomatik yöneten bir altyapıyla USDT ve TRX kabul etmek için hemen başvurun. Tüm alanlar ve olaylar için dokümantasyonu inceleyin.


