Giải quyết các lỗi đối soát thanh toán
Một khách hàng đã mất 2.000 đô la. Trưởng bộ phận tài chính của họ đã phải dành bốn đêm để tìm ra lỗ hổng đó.
Vấn đề nằm ở một tác vụ retry. Hệ thống đã xử lý trùng 120 giao dịch thanh toán. Nó không thu thêm tiền từ khách hàng, nhưng lại ghi đúp các bản ghi vào sổ cái.
Chúng tôi đã khắc phục điều này bằng một lớp idempotency. Lớp này đảm bảo một giao dịch thanh toán chỉ được xử lý duy nhất một lần.
Đây là cách chúng tôi đã làm:
- Chúng tôi đã sử dụng Redis lock để ngăn chặn các yêu cầu bị trùng lặp.
- Chúng tôi đã thêm một unique index trong cơ sở dữ liệu để dự phòng.
- Chúng tôi đã sử dụng một key bao gồm tên gateway và transaction ID.
Chúng tôi cũng đã xử lý vấn đề tỷ giá hối đoái. Hệ thống trước đây sử dụng tỷ giá trực tiếp. Tỷ giá thay đổi rất nhanh, điều này đã tạo ra các sai lệch.
Giờ đây, chúng tôi chốt tỷ giá ngay khi đơn hàng bắt đầu. Khách hàng thấy một mức giá. Đội ngũ tài chính cũng thấy mức giá tương tự.
Chúng tôi cũng đã xây dựng một báo cáo hàng ngày. Nó so sánh các tệp CSV của ngân hàng với hồ sơ của chúng tôi. Khối lượng công việc hàng tháng đã giảm từ 15 giờ xuống còn 2 giờ.
Đừng phụ thuộc vào Excel và những đêm làm việc muộn nữa. Các lỗi thanh toán là những vấn đề về thiết kế.
Hãy bắt đầu với một database index. Thêm Redis locks khi bạn mở rộng quy mô. Đừng bao giờ mặc định rằng một thông báo thanh toán chỉ đến một lần duy nhất.