Checkout
Luồng chuẩn: tạo đơn → redirect sang cổng → IPN server-to-server xác nhận tiền → trang kết quả chỉ đọc DB.
Tạo thanh toán
Không cấu hình cổng nào trong .env thì cổng mock được dùng — chạy đủ luồng không cần sandbox.
Điều gì xảy ra sau khi bấm thanh toán
- 1Đơn được tạo ở trạng thái Đang chờ trong PostgreSQL.
- 2Bạn được chuyển sang trang cổng thanh toán (mock hoặc thật).
- 3Cổng gọi IPN về server — chữ ký được verify, số tiền đối chiếu với đơn, ghi nhận idempotent.
- 4Trang kết quả chỉ đọc trạng thái từ DB — return URL không bao giờ là xác nhận thanh toán.