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:

  1. Người dùng nhấn nút "Thanh toán với Amazon"
  2. Ứng dụng gọi API tạo Checkout Session
  3. Nhận về amazonPayRedirectUrl và chuyển hướng người dùng
  4. Người dùng đăng nhập và xác nhận thanh toán trên Amazon
  5. Amazon chuyển hướng người dùng trở lại trang web của bạn
  6. Ứ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 sandboxproduction 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.

📚 Tài Nguyên Tham Khảo