Вирішення помилок звірки платежів

Клієнт втратив 2000 доларів. Керівник фінансового відділу витратив чотири ночі на пошук розбіжностей.

Проблемою було завдання повторної обробки (retry job). Система двічі обробила 120 платежів. Вона не списувала кошти з клієнтів повторно, а лише додавала подвійні записи до реєстру.

Ми виправили це за допомогою шару ідемпотентності. Це гарантує, що платіж обробляється лише один раз.

Ось як ми це зробили:

  • Ми використали Redis lock, щоб запобігти подвійним запитам.
  • Ми додали унікальний індекс у базу даних як резервний захід.
  • Ми використовували ключ, що містить назву шлюзу та ID транзакції.

Ми також виправили проблему з обмінними курсами. Система використовувала поточні курси. Курси змінюються швидко, що створювало розбіжності.

Тепер ми фіксуємо курс у момент створення замовлення. Клієнт бачить одну ціну. Фінансова команда бачить ту саму ціну.

Ми також створили щоденний звіт. Він порівнює банківські CSV-файли з нашими записами. Обсяг щомісячної роботи скоротився з 15 годин до 2 годин.

Припиніть покладатися на Excel та нічні чергування. Помилки в платежах — це проблеми проєктування.

Почніть з індексу бази даних. Додавайте Redis locks у міру зростання. Ніколи не припускайте, що сповіщення про платіж приходить лише один раз.

Джерело: https://dev.to/yanmoheluo/daigou-code-how-we-solved-payment-reconciliation-nightmares-in-cross-border-order-management-3df7