Menyelesaikan Ralat Penyelarasan Pembayaran

Seorang pelanggan kerugian 2,000 dolar. Ketua kewangan mereka menghabiskan masa selama empat malam mencari punca jurang tersebut.

Masalahnya berpunca daripada tugasan cubaan semula (retry job). Sistem memproses 120 pembayaran sebanyak dua kali. Ia tidak mengenakan caj kepada pelanggan sekali lagi. Ia hanya menambah rekod berganda ke dalam lejar.

Kami menyelesaikan masalah ini dengan lapisan idempotensi (idempotency layer). Ini memastikan pembayaran hanya diproses sekali sahaja.

Berikut adalah cara kami melakukannya:

  • Kami menggunakan kunci Redis (Redis lock) untuk menghalang permintaan berganda.
  • Kami menambah indeks unik dalam pangkalan data sebagai sandaran.
  • Kami menggunakan kunci dengan nama gerbang (gateway) dan ID transaksi.

Kami juga membetulkan kadar pertukaran mata wang. Sistem sebelum ini menggunakan kadar langsung (live rates). Kadar berubah dengan pantas. Ini mewujudkan jurang.

Kini, kami mengunci kadar tersebut apabila pesanan bermula. Pelanggan melihat satu harga. Pasukan kewangan melihat harga yang sama.

Kami juga membina laporan harian. Ia membandingkan fail CSV bank dengan rekod kami. Kerja bulanan berkurang daripada 15 jam kepada 2 jam.

Berhenti bergantung kepada Excel dan bekerja sehingga lewat malam. Ralat pembayaran adalah masalah reka bentuk.

Mulakan dengan indeks pangkalan data. Tambah kunci Redis (Redis locks) apabila perniagaan anda berkembang. Jangan sesekali menganggap notifikasi pembayaran hanya akan sampai sekali sahaja.

Sumber: https://dev.to/yanmoheluo/daigou-code-how-we-solved-payment-reconciliation-nightmares-in-cross-border-order-management-3df7