Mutabakat (Reconciliation)
Gün sonu mutabakat, ödeme işlemlerinizin banka kayıtlarıyla eşleştiğini doğrulama sürecidir.
Neden Gerekli?
| Sorun | Mutabakat ile |
|---|---|
| Eksik ödeme kaydı | Tespit edilir |
| Mükerrer tahsilat | Fark edilir |
| Tutarsız tutarlar | Belirlenir |
| Başarısız iade | Takip edilir |
Mutabakat Akışı
Günlük Rapor Çekme
Her gün sonunda Paylox API'den o güne ait işlemleri çekin:
import requests
from datetime import date
def get_daily_transactions(target_date):
response = requests.get(
"https://api.jetcheckout.com/api/v1/payment/transactions",
params={
"start_date": target_date.isoformat(),
"end_date": target_date.isoformat(),
"status": "completed",
"per_page": 100
}
)
return response.json()
today_transactions = get_daily_transactions(date.today())
Eşleştirme Mantığı
Her Paylox işlemini kendi veritabanınızdaki kayıtlarla order_id üzerinden eşleştirin:
def reconcile(paylox_transactions, local_orders):
mismatches = []
paylox_map = {t["order_id"]: t for t in paylox_transactions}
local_map = {o["ref"]: o for o in local_orders}
for order_id, paylox_tx in paylox_map.items():
local = local_map.get(order_id)
if not local:
mismatches.append({"type": "missing_local", "order_id": order_id})
elif local["amount"] != paylox_tx["amount"]:
mismatches.append({"type": "amount_mismatch", "order_id": order_id})
for order_id in local_map:
if order_id not in paylox_map:
mismatches.append({"type": "missing_paylox", "order_id": order_id})
return mismatches
Yaygın Uyumsuzluk Nedenleri
| Neden | Açıklama | Çözüm |
|---|---|---|
| Gecikmeli callback | Webhook geç teslim edildi | İşlem durumunu API'den doğrulayın |
| Kısmi iade | İade tutarı yansımamış | İade raporunu ayrıca kontrol edin |
| 3DS timeout | Müşteri 3DS sayfasında bekledi | Session durumunu kontrol edin |
| Mükerrer kayıt | Aynı callback birden fazla geldi | İdempotent handler kullanın |
Otomatik Mutabakat
Günlük mutabakatı cron job ile otomatikleştirin:
from datetime import date, timedelta
def daily_reconciliation():
yesterday = date.today() - timedelta(days=1)
paylox_data = get_daily_transactions(yesterday)
local_data = get_local_orders(yesterday)
mismatches = reconcile(paylox_data["transactions"], local_data)
if mismatches:
send_alert_email(mismatches)
log_mismatches(mismatches)