Ödeme Kancaları
Paranın gerçekten girdiği on üç kanca: ödeme kapıları, kaydedilen ödeme satırı ve otomatik tahsilat.
Genel Bakış
Bir fatura tek seferde ödenmek zorunda değildir: kısmi ödemeler birikir ve bakiye sıfırlandığında fatura kendiliğinden ödenmişe geçer. Bu yüzden ödeme kancaları fatura durum kancasından daha sık çalışır.
İkinci nokta kimin ödediğidir. Paylaşım bağlantısıyla yapılan ödemede ödeyen kişi kimliksizdir; kancanın verdiği hesap kimliği faturanın sahibini gösterir, ödeyeni değil.
Referans
Müşteri ödemesini durdurma
Müşteri fatura öderken, hiçbir para hareket etmeden önce çalışır.
true iken oturum yoktur ve ödeyenin kim olduğu bilinmez.Hook::add('gate:invoice.client_pay', 10, function ($invoice, $uid, $method, $share) {
// Paylasim odemesinde odeyen kimliksizdir: risk kurallarini ona gore kurun.
if ($share && (float) ($invoice['total'] ?? 0) > 5000)
return 'Bu tutar paylasim linkiyle odenemez.';
return null;
});Toplu ödemeyi durdurma
Müşteri birden çok faturayı birlikte öderken çalışır.
Hook::add('gate:invoice.bulk_pay', 10, function ($invoices, $cid, $method) {
if (count($invoices) > 50) return 'Tek seferde en fazla 50 fatura odenir.';
return null;
});Ödeme satırını yazılmadan değiştirme
Ödeme satırı yazılmadan önce çalışır. Bu satırdan sonra fatura kendiliğinden ödenmişe geçebilir.
owner_id, amount_in, currency, rate, fees, pmethod, transaction_id, paid_at.Hook::add('filter:invoice.payment_data', 10, function (&$payment_row, $invoice) {
// Kendi referansinizi tasiyin; tutari degistirmek odendi kararini etkiler.
$payment_row['transaction_id'] = Acme::ref($payment_row['transaction_id'] ?? '');
});Ödemenin kaydedildiğini öğrenme
Ödeme satırı yazıldıktan sonra çalışır. Fatura bu noktada hâlâ ödenmemiş olabilir.
Hook::add('action:invoice.payment_recorded', 10,
function ($payment_id, $invoice_id, $payment) {
// Kismi odeme olabilir: 'fatura kapandi' demeden once bakiyeye bakin.
Accounting::received($invoice_id, (float) ($payment['amount_in'] ?? 0));
});Ödemenin eklendiğini izleme
Faturaya ödeme eklendikten sonra çalışır. Bir önceki kancanın aksine değerler ayrı ayrı gelir.
Hook::add('action:invoice.payment_added', 10,
function ($invoice_id, $amount, $currencyId, $pmethod, $txn_id) {
Accounting::line($invoice_id, (float) $amount, (int) $currencyId, $pmethod);
});Ödemenin silindiğini izleme
Bir ödeme kaydı silindikten sonra çalışır.
0 gelir.Hook::add('action:invoice.payment_deleted', 10, function ($payment_id, $invoice_id) {
if ($invoice_id === 0) return; // faturaya bagli degil
Accounting::reversed($invoice_id, (int) $payment_id);
});Otomatik tahsilatı izleme
Otomatik ödeme denendikten sonra çalışır — başarılı olsun ya da olmasın.
paid ya da unpaid. Denemenin başarısını buradan okuyun.outcome, amount, error), ayrıca başlangıç ve bitiş bakiyesi. Kart neden düştü sorusunun cevabı buradadır.Hook::add('action:invoice.auto_payment_attempted', 10,
function ($invoice_id, $final_status, $result) {
// Kart adiminin hatasi ayri gelir: musteriye dogru sebebi soyleyin.
if ($final_status !== 'paid')
Dunning::failed($invoice_id, $result['card_step']['error'] ?? '');
});Havale bildirimini izleme
Müşteri havale ettiğini bildirdiğinde çalışır. Para gelmiş değildir: bu yalnız bir beyandır, fatura ödenmemiş kalır.
Hook::add('action:invoice.bank_transfer_notified', 10, function ($id, $uid, $transfer) {
// Para gelmedi, yalnizca beyan var: ekstre eslesmesini referanstan kurun.
Acme::watchStatement($transfer['rce'] ?? '', $id);
});Kasa kaydını izleme
Kasaya elle bir gelir ya da gider kaydı girildiğinde çalışır.
income ya da expense.Hook::add('action:invoice.cash_recorded', 10,
function ($inex_id, $type, $amount, $currency) {
Acme::postToLedger($inex_id, $type, $amount, $currency);
});Kuruluş üzerinden iadeyi izleme
Bir fatura ödeme kuruluşu üzerinden iade edildiğinde çalışır. Para gerçekten geri gönderilmiştir.
Hook::add('action:invoice.refunded_via_module', 10, function ($invoice, $pmethod) {
Acme::recordRefund((int) ($invoice['id'] ?? 0), $pmethod);
});Ödeme yönteminin değişmesini izleme
Bir faturanın ödeme yöntemi değiştikten sonra çalışır.
Hook::add('action:invoice.gateway_changed', 10,
function ($id, $oldPmethod, $newPmethod, $invoice) {
// Yontem degistiyse eski kurulustaki bekleyen oturumu kapatin.
if ($oldPmethod !== '') Acme::dropPendingSession($id, $oldPmethod);
});Kartın otomatik ödeme sırasını izleme
Bir kartın otomatik ödeme zincirindeki yeri değiştiğinde çalışır. Zincir, yenileme sırasında hangi kartın önce denendiğini belirler.
on zincire eklendi, off çıkarıldı, promote ilk sıraya alındı.Hook::add('action:payment.card_autopay_changed', 10, function ($uid, $cardId, $action) {
// Zincir bosaldiysa musteri yenilemede odemesiz kalir.
if ($action === 'off') Acme::warnIfChainEmpty($uid);
});Abonelik tahsilatını izleme
Ödeme kuruluşundan gelen abonelik tahsilatı işlendikten sonra çalışır. Sonucun başarılı olması şart değildir: reddedilen ve tekrarlanan bildirimler de buraya düşer.
paid olabileceği gibi kısmi, tekrarlanmış ya da reddedilmiş de olabilir. Başarı varsaymayın.Hook::add('action:subscription.payment_recorded', 10, function ($identifier, $result) {
// Basari varsaymayin: durum reddedilmis de olabilir.
if (($result['status'] ?? '') !== 'paid') return;
Acme::confirmCharge($identifier, (int) ($result['invoice_id'] ?? 0));
});Tuzaklar
Kısmi ödemeler ayrı satırlar olarak birikir; kanca her satırda çalışır. Fatura ancak bakiye sıfırlandığında ödenmişe geçer ve o an durum kancasında görünür. "Ödeme geldi, hizmeti aç" mantığını buraya yazmak, eksik ödemede hizmeti açar.
Ödeme kapısındaki hesap kimliği her zaman faturanın sahibidir. Paylaşım bağlantısıyla ödeyen kişi bambaşka biri olabilir ve oturumu yoktur. "Bu ödemeyi kim yaptı" sorusunu bu kimlikten cevaplamak yanlış kişiyi gösterir.
Biri ödemeyi tek dizi içinde verir, diğeri tutar, para birimi, yöntem ve işlem numarasını ayrı parametreler olarak. Yanlışını yazmak dinleyiciyi düşürür ve dışarıdan "çalışmıyor" gibi görünür.
Önce bakiye denenir, sonra kart. Sonuç dizisi ikisini ayrı ayrı raporlar. Müşteriye "kartınız reddedildi" demeden önce bakiye adımının ne yaptığına bakın: fatura bakiyeden kısmen kapanmış olabilir.
İlgili Makaleler
- Fatura Yaşam Döngüsü Kancaları
- Fatura ve Ödeme Kancaları
- Sipariş Akışı Kancaları
Geri bildiriminiz için teşekkürler!
Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.