Kiểm thử
Trước khi go-live, hãy chạy cả hai luồng challenge đầu-cuối trên môi trường test. Cake cung cấp base URL riêng cùng với ProcessorId, IssuerId, và khóa HMAC riêng cho môi trường onboarding — không bao giờ tái sử dụng credential production ở đây.
Kiểm thử luồng OTP
- Bắt đầu một giao dịch thanh toán bằng thẻ test thuộc dải bạn xác thực, với số tiền kích hoạt challenge.
/step_upcủa bạn được gọi. Trả vềStatus: "SUCCESS"vớiStepupType: "OTP"./initiate_actioncủa bạn được gọi kèmVerificationToken. Hãy gửi đúng giá trị đó.- Nhập mã đã gửi vào cửa sổ challenge.
Cần kiểm tra: mã bạn gửi được chấp nhận. Nếu bị từ chối, nguyên nhân thường gặp là nền tảng của bạn tự sinh mã riêng thay vì truyền VerificationToken đi.
Kiểm thử luồng out-of-band
- Bắt đầu một giao dịch thanh toán theo cách tương tự.
- Trả về
Status: "SUCCESS"vớiStepupType: "OUTOFBAND"từ/step_up. /initiate_actioncủa bạn được gọi kèmOOBCallbackUrl. Hãy gửi push notification của bạn.- Phê duyệt trong app, sau đó gửi một callback đã ký đến URL đó.
Cần kiểm tra: trang chờ hoàn tất mà chủ thẻ không cần nhấn Continue. Nếu nó chỉ hoàn tất khi nhấn, callback của bạn chưa đến — hãy kiểm tra mã response bạn nhận lại.
Kiểm thử fallback
Lặp lại luồng out-of-band nhưng bỏ qua hoàn toàn callback. Nhấn Continue trên trang chờ thay vào đó.
Cần kiểm tra: /validate được gọi, và trả về RETRY sẽ giữ trang tiếp tục chờ trong khi trả về SUCCESS sẽ hoàn tất xác thực. Đây là đường đi sẽ chạy bất cứ khi nào push của bạn bị trễ, nên đáng để kiểm thử chủ động thay vì phát hiện ra khi đã lên production.
Kiểm thử các trường hợp lỗi
Những trường hợp này quyết định tiền thật, nên hãy xác minh thay vì giả định:
| Kịch bản | Cách kích hoạt | Kỳ vọng |
|---|---|---|
| Chủ thẻ từ chối | Trả về REJECTED từ /validate | Xác thực bị từ chối |
| Nền tảng của bạn bị downtime | Trả về ERROR từ /step_up | Xác thực thất bại — không được phê duyệt |
| Endpoint bị timeout | Trì hoãn quá thời gian timeout của request | Giống như ERROR |
| Signature sai | Gửi một callback được ký bằng khóa sai | 401, và kết quả không được ghi nhận |
| Phiên không xác định | Gửi một callback với StepupRequestId ngẫu nhiên | 404 |
TIP
Trường hợp timeout là trường hợp thường bị bỏ qua nhất và thường sai nhất khi lên production. Một dependency chậm bên trong handler /step_up của bạn sẽ làm thất bại xác thực chắc chắn như một sự cố downtime, vì ACS không thể chờ đợi mãi — hãy kiểm thử nó bằng một độ trễ có chủ đích.
Kiểm tra signature offline
Nếu callback liên tục trả về 401, hãy kiểm tra signature một cách độc lập trước khi debug đường truyền mạng — xem ví dụ minh họa trong Bảo mật. Hai nguyên nhân thường gặp là dùng trực tiếp ký tự hex thay vì decode nó, và serialize lại body sau khi đã ký.