Hướng Dẫn Sử Dụng Amazon Pay API: Tạo Checkout Session và Thanh Toán Ngay Lập Tức
Giới Thiệu
Amazon Pay là một dịch vụ thanh toán kỹ thuật số giúp khách hàng sử dụng thông tin thanh toán và địa chỉ đã lưu trong tài khoản Amazon để thanh toán trên các trang web thương mại điện tử khác. Việc tích hợp Amazon Pay có thể tăng tỷ lệ chuyển đổi nhờ vào sự tin tưởng và tiện lợi mà thương hiệu Amazon mang lại.
Trong bài viết này, chúng ta sẽ khám phá:
- Tổng quan về quy trình thanh toán với Amazon Pay
- Cách tạo
Checkout Session
- Hướng dẫn chuyển hướng người dùng tới Amazon Pay
- Mô phỏng giao dịch trong môi trường sandbox
- Thực hiện thanh toán ngay lập tức (
AuthorizeWithCapture
) - Hoàn tất thanh toán nếu chỉ
Authorize
- Phân tích phản hồi từ API
- Các lưu ý khi triển khai thực tế
- Tài nguyên hữu ích để triển khai và thử nghiệm
Tổng Quan
Amazon Pay là một nền tảng thanh toán đáng tin cậy, cho phép người dùng thanh toán trực tiếp bằng tài khoản Amazon của họ. Trong bài viết này, chúng ta sẽ đi qua:
- Người dùng nhấn nút "Thanh toán với Amazon"
- Ứng dụng gọi API tạo
Checkout Session
- Nhận về
amazonPayRedirectUrl
và chuyển hướng người dùng - Người dùng đăng nhập và xác nhận thanh toán trên Amazon
- Amazon chuyển hướng người dùng trở lại trang web của bạn
- Ứng dụng xác thực trạng thái phiên và tiến hành thanh toán (nếu cần)
1. Tạo Checkout Session
Amazon Pay yêu cầu bạn tạo một phiên giao dịch (checkout session) để bắt đầu quy trình thanh toán.
📌 API Endpoint:
POST /checkoutSessions
🔐 Headers:
Authorization: Bearer <AccessToken>
x-amz-pay-region: <RegionCode>
x-amz-pay-host: pay-api.amazon.com
Content-Type: application/json
📝 Request Body:
{
"webCheckoutDetails": {
"checkoutReviewReturnUrl": "https://your-site.com/checkout/review"
},
"storeId": "amzn1.application-oa2-client.xxxxx",
"paymentDetails": {
"paymentIntent": "AuthorizeWithCapture",
"chargeAmount": {
"amount": "20.00",
"currencyCode": "USD"
}
},
"merchantMetadata": {
"merchantReferenceId": "order-12345",
"merchantStoreName": "My Store",
"noteToBuyer": "Thank you for your order!"
}
}
🧾 Giải thích tham số:
Trường | Ý nghĩa |
---|---|
webCheckoutDetails.checkoutReviewReturnUrl |
URL người dùng được chuyển đến sau khi review đơn hàng |
storeId |
Mã ứng dụng của bạn đã đăng ký trên Amazon Pay |
paymentDetails.paymentIntent |
"AuthorizeWithCapture" : thanh toán ngay lập tức |
paymentDetails.chargeAmount |
Số tiền cần thanh toán |
merchantMetadata |
Thông tin thêm về đơn hàng (dành cho người bán) |
📤 Response:
{
"checkoutSessionId": "abcde-12345",
"webCheckoutDetails": {
"amazonPayRedirectUrl": "https://pay.amazon.com/checkout/abcde-12345"
},
"statusDetails": {
"state": "Open"
}
}
Giải thích:
Trường | Ý nghĩa |
---|---|
checkoutSessionId |
Mã duy nhất dùng để thực hiện thanh toán |
amazonPayRedirectUrl |
URL chuyển người dùng tới giao diện Amazon Pay |
statusDetails.state |
Trạng thái phiên thanh toán (Open , Completed , Canceled ) |
2. Chuyển người dùng tới Amazon Pay
Sau khi nhận được phản hồi từ bước trên, bạn sẽ lấy giá trị:
"amazonPayRedirectUrl": "https://pay.amazon.com/checkout/abcde-12345"
Và sử dụng nó để chuyển hướng người dùng tới giao diện xác nhận thanh toán của Amazon.
Ví dụ trong HTML:
<a href="https://pay.amazon.com/checkout/abcde-12345">
<img src="https://example.com/button-amazon-pay.png" alt="Pay with Amazon">
</a>
3. Mô phỏng thanh toán trong Sandbox
Trước khi đưa vào môi trường thật, bạn nên kiểm thử quá trình thanh toán bằng cách mô phỏng trạng thái.
✅ API Endpoint:
POST /sandbox/checkoutSessions/{checkoutSessionId}/simulate
📌 Headers:
Authorization: Bearer <AccessToken>
Content-Type: application/json
📝 Body Request:
{
"status": "Completed"
}
Giải thích: Dùng để mô phỏng trạng thái hoàn tất thanh toán trong môi trường thử nghiệm (sandbox).
4. Lấy thông tin Checkout Session
Nếu bạn đã chọn AuthorizeWithCapture
, Amazon sẽ tiến hành thanh toán ngay khi người dùng xác nhận. Sau đó, bạn chỉ cần gọi GET /checkoutSessions/{id}
để kiểm tra trạng thái.
📥 API Endpoint:
GET /checkoutSessions/{checkoutSessionId}
📤 Response:
{
"checkoutSessionId": "abcde-12345",
"buyer": {
"name": "John Doe",
"email": "john@example.com"
},
"statusDetails": {
"state": "Completed"
},
"paymentDetails": {
"chargeAmount": {
"amount": "20.00",
"currencyCode": "USD"
}
}
}
5. Hoàn tất thanh toán (nếu chưa auto capture)
Nếu bạn đã dùng Authorize
thay vì AuthorizeWithCapture
, bạn cần thực hiện Capture
thủ công sau khi người dùng xác nhận.
📌 API Endpoint:
POST /charges
📝 Request:
{
"chargePermissionId": "S03-1234567-1234567",
"chargeAmount": {
"amount": "20.00",
"currencyCode": "USD"
},
"captureNow": true,
"softDescriptor": "MyStore"
}
Phân Tích Trạng Thái Giao Dịch
Trạng thái | Giải thích |
---|---|
Open |
Phiên được tạo, chưa thanh toán |
Completed |
Người dùng đã thanh toán thành công |
Canceled |
Người dùng huỷ phiên hoặc hết thời gian |
Expired |
Phiên giao dịch không được xử lý đúng hạn |
Bạn nên lưu trữ checkoutSessionId và thường xuyên kiểm tra trạng thái để cập nhật đơn hàng.
🧠 Lưu Ý:
- Môi trường
sandbox
vàproduction
sử dụng domain khác nhau. - Token OAuth2 có thời hạn. Hãy cache hoặc tự động refresh.
- Amazon Pay có thể gửi webhook về các sự kiện như ChargeSucceeded, ChargeFailed.
- Luôn xác minh thông tin buyer sau thanh toán để tránh gian lận.
- Đảm bảo đồng bộ trạng thái giữa frontend, backend, và hệ thống quản lý đơn hàng của bạn.
✅ Kết Luận
Amazon Pay cung cấp một quy trình thanh toán hiện đại, đáng tin cậy, và được người dùng tin tưởng. Việc tích hợp thành công API này giúp bạn:
- Tăng tỷ lệ chuyển đổi
- Giảm bước nhập thông tin của người dùng
- Giảm rủi ro gian lận
Việc hiểu rõ các bước tạo phiên, chuyển hướng, xử lý thanh toán và phản hồi API sẽ giúp bạn xây dựng hệ thống thanh toán vững chắc và đáng tin cậy.