Add the Amazon Pay Button
[Step 2 of 8] The Amazon Pay checkout experience starts when your buyer clicks on the Amazon Pay button. Add the button wherever buyers start checkout, such as on your product or shopping cart page.
1. Create an Amazon Pay checkout session
Set up an endpoint on your server to Create Checkout Session. Use the Checkout Session object to customize and manage your buyer experience- from the time the buyer clicks on the Amazon Pay button, until they complete checkout. Note that in a later step, you will need the Create Checkout Session response to start the checkout flow.
Use the checkoutReviewReturnUrl
parameter to specify the URL which the buyer is redirected to, after they select their preferred shipping address and payment method.
Best practice:
- Set up your endpoint on the same domain as your website to avoid Cross-Origin Resource Sharing complications.
- Do not implement caching logic to re-use Checkout Session objects. Your endpoint should make a Create Checkout Session request each time it is invoked.
Optional integrations steps:
- Use the
deliverySpecifications
parameter to specify shipping restrictions to prevent buyers from selecting unsupported addresses from their Amazon address book. See address restriction samples for samples how to handle common use-cases. - If you registered for Amazon Pay in the EU or UK, you can use the
presentmentCurrency
parameter to charge your buyer using a different supported currency. See multi-currency integration for more info.
Request
curl "https://pay-api.amazon.com/:environment/:version/checkoutSessions/" \
-X POST
-H "x-amz-pay-idempotency-key: AVLo5tI10BHgEk2jEXAMPLEKEY"
-H "x-amz-pay-authorization: Px2e5oHhQZ88vVhc0DO%2FsShHj8MDDg%3DEXAMPLESIGNATURE"
-d @request_body
Request body
{
"webCheckoutDetail": {
"checkoutReviewReturnUrl": "https://a.com/merchant-review-page"
},
"storeId": "amzn1.application-oa2-client.8b5e45312b5248b69eeaStoreId",
"deliverySpecifications": {
"specialRestrictions": ["RestrictPOBoxes"],
"addressRestrictions": {
"type": "Allowed",
"restrictions": {
"US": {
"statesOrRegions": ["WA"],
"zipCodes": ["95050", "93405"]
},
"GB": {
"zipCodes": ["72046", "72047"]
},
"IN": {
"statesOrRegions": ["AP"]
},
"JP": {}
}
}
}
}
Request parameters
Name
|
Location
|
Description
|
x-amz-pay-idempotency-key (required) Type: string |
Header
|
Idempotency key to safely retry requests
|
webCheckoutDetail (required) Type: webCheckoutDetail |
Body
|
URLs associated to the Checkout Session used to complete checkout. The URLs must use HTTPS protocol
|
storeId (required) Type: string |
Body
|
Login with Amazon client ID. Do not use the application ID Retrieve this value from "Login with Amazon" in Seller Central |
deliverySpecifications Type: deliverySpecifications |
Body
|
Specify shipping restrictions to prevent buyers from selecting unsupported addresses from their Amazon address book
|
Response
{
"checkoutSessionId": "bd504926-f659-4ad7-a1a9-9a747aaf5275",
"webCheckoutDetail": {
"checkoutReviewReturnUrl": "https://a.com/merchant-review-page",
"checkoutResultReturnUrl": null,
"amazonPayRedirectUrl": null
},
"productType": "PayAndShip",
"paymentDetail": {
"paymentIntent": null,
"canHandlePendingAuthorization":false,
"chargeAmount": null,
"softDescriptor": null,
"presentmentCurrency": "USD"
},
"merchantMetadata": {
"merchantReferenceId": null,
"merchantStoreName": null,
"noteToBuyer": null,
"customInformation": null
},
"supplementaryData": null, // Amazon Pay system data
"buyer": null,
"paymentPreferences": [
null
],
"statusDetail": {
"state": "Open",
"reasonCode": null,
"reasonDescription": null,
"lastUpdatedTimestamp": "20191015T204327Z"
},
"shippingAddress": null, // Null for PayOnly product type
"platformId": null,
"chargePermissionId": null,
"chargeId": null,
"constraints": [
{
"constraintId": "BuyerNotAssociated",
"description": "There is no buyer associated with the Checkout Session. Return the checkout session id to the Amazon Pay Button to allow buyer to login."
},
{
"constraintId": "ChargeAmountNotSet",
"description": "chargeAmount is not set."
},
{
"constraintId": "CheckoutResultReturnUrlNotSet",
"description": "checkoutResultReturnUrl is not set."
},
{
"constraintId": "PaymentIntentNotSet",
"description": "paymentIntent is not set."
}
],
"creationTimestamp": "20191015T204313Z",
"expirationTimestamp": "20191016T204313Z",
"storeId": "amzn1.application-oa2-client.8b5e45312b5248b69eeaStoreId",
"deliverySpecifications": {
"specialRestrictions": ["RestrictPOBoxes"],
"addressRestrictions": {
"type": "Allowed",
"restrictions": {
"US": {
"statesOrRegions": ["WA"],
"zipCodes": ["95050", "93405"]
},
"GB": {
"zipCodes": ["72046", "72047"]
},
"IN": {
"statesOrRegions": ["AP"]
},
"JP": {}
}
}
},
"providerMetadata": {
"providerReferenceId": null
},
"checkoutButtonText": null,
"releaseEnvironment": "Sandbox"
}
2. Add the Amazon Pay script
Add the Amazon Pay script to your HTML file. Be sure you select the correct region.
<script src="https://static-na.payments-amazon.com/checkout.js"></script>
<script src="https://static-eu.payments-amazon.com/checkout.js"></script>
<script src="https://static-fe.payments-amazon.com/checkout.js"></script>
3. Render the button
Call amazon.Pay.renderButton to render the Amazon Pay button to an HTML container element. The button will be responsive, and inherit the size of the container element according to the following logic:
- If no height or width is specified, the button container defaults to 200px by 45px.
- If only width is specified, the button container height will be set to 45px. The provided width must be between 150px and 500px or container width will be resized to the closest supported value.
- If only height is specified, the button container width will be set to 500px. The provided height must be between 45px and 192px or container height will be resized to the closest supported value.
- If both height and width are specified, the button container will be resized to meet these conditions:
- The container width must be between 150px and 500px. If the provided width is outside those limits, the container width will be resized to the closest supported value.
- The container height must be between 45px and 192px. If the provided height is outside those limits, the container height will be resized to the closest supported value.
- The container height:width ratio must be between 1:10 and 1:2.6. If the ratio is outside those limits, the container width will be set to the provided value and the container height will be adjusted to a supported ratio value.
The Amazon Pay script will make an AJAX request using the configuration provided for the createCheckoutSession
button parameter. The response must be in JSON format.
The only required parameter is the url
. Specify the endpoint you set up in Step 1 as its value. You can customize the request by changing the HTTP request method. If your endpoint does not return the entire Checkout Session object, use extractAmazonCheckoutSessionId
to specify the Checkout Session ID parameter in the response.
Code sample
<body>
<div id="AmazonPayButton"></div>
<script src="https://static-na.payments-amazon.com/checkout.js"></script>
<script type="text/javascript" charset="utf-8">
amazon.Pay.renderButton('#AmazonPayButton', {
merchantId: 'merchant_id',
createCheckoutSession: {
url: 'https://mystore/amazonpay/createcheckoutsession'
},
sandbox: true, // dev environment
ledgerCurrency: 'USD', // Amazon Pay account ledger currency
checkoutLanguage: 'en_US', // render language
productType: 'PayAndShip', // checkout type
placement: 'Cart', // button placement
buttonColor: 'Gold'
});
</script>
</body>
<body>
<div id="AmazonPayButton"></div>
<script src="https://static-eu.payments-amazon.com/checkout.js"></script>
<script type="text/javascript" charset="utf-8">
amazon.Pay.renderButton('#AmazonPayButton', {
merchantId: 'merchant_id',
createCheckoutSession: {
url: 'https://mystore/amazonpay/createcheckoutsession'
},
sandbox: true, // dev environment
ledgerCurrency: 'EUR', // Amazon Pay account ledger currency
checkoutLanguage: 'en_GB', // render language
productType: 'PayAndShip', // checkout type
placement: 'Cart', // button placement
buttonColor: 'Gold'
});
</script>
</body>
<body>
<div id="AmazonPayButton"></div>
<script src="https://static-eu.payments-amazon.com/checkout.js"></script>
<script type="text/javascript" charset="utf-8">
amazon.Pay.renderButton('#AmazonPayButton', {
merchantId: 'merchant_id',
createCheckoutSession: {
url: 'https://mystore/amazonpay/createcheckoutsession'
},
sandbox: true, // dev environment
ledgerCurrency: 'GBP', // Amazon Pay account ledger currency
checkoutLanguage: 'en_GB', // render language
productType: 'PayAndShip', // checkout type
placement: 'Cart', // button placement
buttonColor: 'Gold'
});
</script>
</body>
<body>
<div id="AmazonPayButton"></div>
<script src="https://static-fe.payments-amazon.com/checkout.js"></script>
<script type="text/javascript" charset="utf-8">
amazon.Pay.renderButton('#AmazonPayButton', {
merchantId: 'merchant_id',
createCheckoutSession: {
url: 'https://mystore/amazonpay/createcheckoutsession'
},
sandbox: true, // dev environment
ledgerCurrency: 'JPY', // Amazon Pay account ledger currency
checkoutLanguage: 'ja_JP', // render language
productType: 'PayAndShip', // checkout type
placement: 'Cart', // button placement
buttonColor: 'Gold'
});
</script>
</body>
Function parameters
Parameter
|
Description
|
merchantId (required) Type: string |
Amazon Pay merchant account identifier
|
createCheckoutSession (required) Type: createCheckoutSession |
Configuration for calling your endpoint to Create Checkout Session. The response must be in JSON format
|
placement (required) Type: string |
Placement of the Amazon Pay button on your website Supported values:
|
ledgerCurrency (required) Type: string |
Ledger currency provided during registration for the given merchant identifier Supported values:
|
productType Type: string |
Product type selected for checkout Supported values:
|
buttonColor Type: string |
Color of the Amazon Pay button Supported values: 'Gold', 'LightGray', 'DarkGray' Default value: 'Gold' |
checkoutLanguage Type: string |
Language used to render the button and text on Amazon Pay hosted pages. Please note that supported language(s) is dependent on the region that your Amazon Pay account was registered for Supported values:
|
sandbox Type: boolean |
Sets button to Sandbox environment Default value: false |