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
{}
Request parameters
Name
|
Location
|
Description
|
checkoutSessionId (required) Type: string |
Path parameter
|
Checkout Session identifier
|
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": "PaymentMethodOnFile",
"recurringMetadata": null,
"productType": null,
"paymentDetails": null,
"merchantMetadata": null,
"supplementaryData":null, // Amazon Pay system data
"paymentMethodOnFileMetadata": {
"setupOnly": true
},
"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": "B01-5105180-3221187",
"chargeId": "null",
"constraints": [
null
],
"creationTimestamp": "20191015T204313Z",
"expirationTimestamp": null,
"storeId": null,
"deliverySpecifications": null,
"providerMetadata": null,
"checkoutButtonText": null,
"releaseEnvironment": null
}