Payment — Case thường gặp
Method không hiện ở checkout
Kiểm tra master toggle, BU/provider setting, category availability, site scope và payment option rule. Nếu method bị ẩn đúng do config, đừng sửa flow checkout.
Ví dụ thực tế: Phụ huynh ở site A không thấy Direct Debit khi checkout. → Xác định ẩn do cấu hình hay do bug. → Provider chưa bật cho BU của site A → đó là ẩn đúng config, không sửa flow checkout.
PayNow thành công nhưng UI không cập nhật
Đọc provider result/webhook, batch/payment status và checkout success method resolution. Webhook có thể đến sau redirect; UI cần chịu được trạng thái pending ngắn hạn.
Ví dụ thực tế: Khách trả thẻ xong, bị quay về trang "đang xử lý" vài giây trước khi báo thành công. → UI không được kết luận thất bại quá sớm. → Webhook về sau redirect → giữ trạng thái pending ngắn rồi cập nhật khi webhook tới.
Direct Debit tạo customer sai BU
AccountPaymentCustomer phải unique/active theo (AccountId, BusinessUnitId, PaymentProvider). Nếu thiếu BU filter, đó là lỗi boundary/security chứ không chỉ là lỗi query.
Ví dụ thực tế: Một account hoạt động ở 2 BU, set Direct Debit ở BU2 lại trỏ về customer của BU1. → Tránh rò rỉ thanh toán giữa hai đơn vị. → Query thiếu BU filter → coi là lỗi boundary, thêm
BusinessUnitIdvào điều kiện unique.
Deposit bị double submit
Kiểm tra order lock, provider callback idempotency và trạng thái batch. Deposit không được tạo nhiều transaction slots cho cùng order nếu lock còn hiệu lực.
Ví dụ thực tế: Khách bấm nút trả deposit hai lần do mạng chậm. → Tránh thu deposit hai lần cho một order. → Order lock + callback idempotency chặn slot thứ hai khi lock còn hiệu lực.
Checkout success message sai method
Đối chiếu payment-success-message-by-method, checkout confirmation type guard và method resolution. Message nên phản ánh method thực tế chứ không đoán từ route.
Ví dụ thực tế: Khách trả Direct Debit nhưng màn hình success lại ghi nội dung của PayNow. → Thông báo phải đúng method để khách không hiểu nhầm. → Resolve message theo method thực tế của giao dịch, không đoán theo route checkout.