Call finalizeCheckoutSession API
To confirm the buyer has returned to your website, use finalizeCheckoutSession
. AmazonPay will append CheckoutSessionId
as a parameter to your Universal link or App link checkoutResultReturnUrl
. In your delegate function (where you handle Universal link/App link), you’ll need to handle checkoutResultReturnUrl
and retrieve CSId. Then call finalizeCheckoutSession
API to validate button params & get CPId, buyer details, paymentDescriptor and billingAddress
.
Sample code to retrieve the checkout-session id:
Android
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Get the Intent that started this activity and extract the data
val data: Uri? = intent?.data
data?.let { uri ->
when (uri.host) {
"[your url of checkoutResultReturnUrl]" -> {
// 1. retrieve CheckoutSessionId
// 2. pass CheckoutSessionId to your backend service,
// and call finalizeCheckoutSession API with CSId in backend
}
"[your url of checkoutCancelUrl]" -> {
// redirect buyer to your App's page for cancel flow
}
else -> {
// redirect buyer to your App's page for error flow
}
}
}
}
iOS
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
guard let url = userActivity.webpageURL else {
return false
}
// Handle checkoutResultReturnUrl for happy path
if url.host == "[your url of checkoutResultReturnUrl]" {
// 1. retrieve CheckoutSessionId
// 2. pass CheckoutSessionId to your backend service,
// and call finalizeCheckoutSession API with CSId in backend
} else if url.host == "[your url of checkoutCancelUrl]" {
// redirect buyer to your App's page for cancel flow
} else {
// redirect buyer to your App's page for error flow
}
return true
}
Finalize Checkout Session Request
Request
curl "https://pay-api.amazon.com/:version/checkoutSessions/:checkoutSessionId/finalize" \
-X POST
-H "authorization:Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE"
-H "x-amz-pay-date:20201012T235046Z"
-d @request_body
Request body
{
"shippingAddress": {
"name": "Susy S",
"addressLine1": "11 Ditka Ave",
"addressLine2": "Suite 2500",
"city": "Chicago",
"county": null,
"district": null,
"stateOrRegion": "IL",
"postalCode": "60602",
"countryCode": "US",
"phoneNumber": "800-000-0000"
},
{
"chargeAmount": {
"amount": "14",
"currencyCode": "USD"
},
"paymentIntent": "AuthorizeWithCapture",
"canHandlePendingAuthorization": "false"
}
Request parameters
Name
|
Location
|
Description
|
checkoutSessionId (required) Type: string |
Path parameter
|
Checkout Session identifier
|
paymentIntent (required) Type: string |
Body
|
Payment flow for charging the buyer
|
chargeAmount (required) Type: price |
Body
|
Amount to be processed using paymentIntent during checkout. Must match Checkout Session object paymentDetails.chargeAmount
|
totalOrderAmount Type: price |
Body
|
Total order amount. Must match Checkout Session object paymentDetails.totalOrderAmount if a value was provided
|
canHandlePendingAuthorization Type: boolean |
Body
|
Boolean that indicates whether merchant can handle pending response See asynchronous processing for more info |
shippingAddress (required*) Type: address |
Body
|
Shipping address provided by Amazon for validation
*required for `PayAndShip` use cases |
billingAddress (required*) Type: address |
Body
|
Billing address provided by Amazon for validation
*required for `PayOnly` use cases |
supplementaryData Type: string |
Body
|
Supplementary data about your order
|
Finalize Checkout Session Response
Returns HTTP 200 status response code if paymentIntent
was successful. Returns HTTP 202 status response code if authorization is still pending.
{
"checkoutSessionId": "bd504926-f659-4ad7-a1a9-9a747aaf5275",
"webCheckoutDetails": null,
"chargePermissionType": "OneTime",
"recurringMetadata": null,
"productType": null,
"paymentDetails": null,
"merchantMetadata": null,
"supplementaryData":null, // Amazon Pay system data
"billingAddress": {
"name": "Work",
"addressLine1": "440 Terry Ave",
"addressLine2": "",
"addressLine3": "",
"city": "Seattle",
"county": "King",
"district": "Seattle",
"stateOrRegion": "WA",
"postalCode": "98121",
"countryCode": "US",
"phoneNumber": "800-000-0000"
},
"paymentDescriptor": "Amazon Pay Visa (1111)",
"buyer": {
"buyerId": "buyerId",
"name": "name-1",
"email": "name@amazon.com",
"phoneNumber": "800-000-0000"
},
"paymentPreferences": [
null
],
"statusDetails": {
"state": "Completed",
"reasonCode": null,
"reasonDescription": null,
"lastUpdatedTimestamp": "20191015T204327Z"
},
"shippingAddress": null,
"platformId":null,
"chargePermissionId": "S01-5105180-3221187",
"chargeId": "S01-5105180-3221187-C056351",
"constraints": [
null
],
"creationTimestamp": "20191015T204313Z",
"expirationTimestamp": null,
"storeId": null,
"deliverySpecifications": null,
"providerMetadata": null,
"checkoutButtonText": null,
"releaseEnvironment": null
}