Checkout
Hướng dẫn tạo phiên Checkout idempotent cho gói sản phẩm định kỳ bằng VND, xử lý redirect URL an toàn và đối soát trạng thái thanh toán bằng Checkout ID.
Tạo checkout trên server
Checkout gắn Customer với ProductPrice đang live của recurring Product. Bạn có thể truyền Customer hiện tại hoặc để VietBilling resolve/tạo Customer từ external_customer_id và email.
const result = await fetch(
`${apiUrl}/public/v2/checkouts`,
{
method: "POST",
headers: apiHeaders,
body: JSON.stringify({
external_customer_id: account.id,
customer_email: account.ownerEmail,
customer_name: account.name,
product_id: productId,
success_url: `${appUrl}/billing/success`,
cancel_url: `${appUrl}/billing`,
}),
},
).then((res) => res.json())
redirect(result.data.checkout_url)
Kiểm tra khi quay lại
Trang success không phải bằng chứng thanh toán. Server nên lấy trạng thái bằng GET /public/v2/checkouts/{checkoutId}; việc cấp quyền cuối cùng vẫn dựa trên webhook hợp lệ.
Tránh session cũ
Retry cùng intent bằng một Idempotency-Key. Không tái sử dụng checkout_url đã succeeded; Checkout open hết hạn sau 30 phút.