手順4 - Amazon Payボタンクリック以降の流れ
Amazon Pay ボタンクリック後の購入者体験
以降 "お届け先と支払い方法"の記述箇所について、productType=PayOnlyをご利用の場合は "お届け先"に関する記述は無視してください。
1. 手順3 で設置したAmazon Payボタンを購入者がクリックすると、購入者はAmazonサイト (Amazon hosted page)にリダイレクトされ、そこでAmazonアカウントでログインします。
2. ログインが完了すると、購入者はAmazonサイト(Amazon hosted page)上で「続行」ボタンをクリックします。
※ 続行の画面について
- chargePermissionType=OneTime, productType=PayAndShipの場合: "xxとして続行"というシンプルな画面 または "お届け先、支払い方法が選択できる画面"のいずれかが表示されます。購入者にどちらの画面を表示するかは基本的に事業者側で選択できませんので、ご認識ください。
- chargePermissionType=OneTime, productType=PayOnlyの場合: 常に "支払い方法が選択できる画面"が表示されます。
- chargePermissionType=Recurring, productType=PayAndShip および PayOnlyの場合: 常に "お届け先、支払い方法が選択できる画面"が表示されます。また、同画面上に「継続支払い」というリンクが表示されリンクをクリックすると Amazon PayボタンレンダリングスクリプトにセットしたrecurringMetadata.frequencyが表示されます。
3. 続行すると、購入者は事業者の注文確認ページにリダイレクトされます。
4. 購入者は、注文確認ページでAmazonで選択されたお届け先と支払い方法を参照します。
5. 購入者は、注文確認ページでお届け先と支払い方法の「変更」ボタンから再びAmazon hosted pageにリダイレクトされ、別のお届け先や支払い方法を選択し直すことができます。
6. 購入者は、注文確認ページで「購入する」(注文確定)に相当するボタンをクリックします。
7. 事業者は、Amazon Payの決済を行います。この際、購入者はAmazon hosted pageにリダイレクトされ「完了画面が表示されるまでブラウザ・アプリを閉じないでください」という文言とスピナー画像を参照します。
8. 決済が完了すると、購入者は事業者の決済完了相当ページにリダイレクトされます。
9. 事業者は、決済結果をもとに購入者へ決済成功または失敗のページを表示します。
上記の流れを画像つきでご紹介した遷移図は一般的な決済フローをご覧ください。
事業者側での処理①: 上記 "Amazon Pay ボタンクリック後の購入者体験" #3と#4の間
1. Get Checkout Session APIの実行
Amazonは Amazon Payボタンのjavascriptに設定されていた checkoutReviewReturnUrl
(貴社のサーバー)へリダイレクトします。
リダイレクト時には Checkout Session IdがURLパラメータとして付加されています。
例) https://anyurl.com/review/ ?amazonCheckoutSessionId=26be7331-7dc2-4722-be22-f7e75582d3ef
これを受けたら、貴社はURLパラメータからCheckout Session ID(今回の例では "26be7331-7dc2-4722-be22-f7e75582d3ef")を取得し、このCheckout Session IDをパラメータにして Get Checkout Session
APIを実行してお客様の情報や選択されている支払い方法など、貴社ECサイト上に表示する必要のある情報をAmazonから取得します
- Get Checkout Session APIに関してはこちら
- なお、SDKをご利用の場合はgetCheckoutSessionといった名称で機能が用意されていますのでご利用ください。
例) chargePermissionType=OneTime, productType=PayAndShipの場合のAPIのレスポンス例
※ productType=PayOnlyの場合は、shippingAddressがnullとなります。
また、productType=PayOnlyの場合、かつ、購入者のAmazonアカウントの支払い方法にギフトカードのみが設定されている場合は billingAddressもnullとなります。FAQ - Amazonギフトカードの利用について注意点を知りたいです。
{
checkoutSessionId: '26be7331-7dc2-4722-be22-f7e75582d3ef',
webCheckoutDetails: {
checkoutReviewReturnUrl: 'http://localhost:3000/review/',
checkoutResultReturnUrl: null,
amazonPayRedirectUrl: null,
checkoutCancelUrl: 'http://localhost:3000/cancel/'
},
productType: 'PayAndShip',
paymentDetails: {
paymentIntent: null,
canHandlePendingAuthorization: false,
chargeAmount: null,
totalOrderAmount: null,
softDescriptor: null,
presentmentCurrency: null,
allowOvercharge: null,
extendExpiration: null
},
chargePermissionType: 'OneTime',
orderType: null,
recurringMetadata: null,
paymentMethodOnFileMetadata: null,
merchantMetadata: {
merchantReferenceId: null,
merchantStoreName: null,
noteToBuyer: null,
customInformation: null
},
supplementaryData: null,
buyer: {
name: 'Pay Tester',
email: 'jp-amazonpay-tester@amazon.co.jp',
buyerId: 'amzn1.account.AFxxxxxx',
primeMembershipTypes: null,
phoneNumber: '0312345678'
},
billingAddress: null,
paymentPreferences: [ { paymentDescriptor: 'Visa ****1111 (Amazon Pay)' } ],
statusDetails: {
state: 'Open',
reasonCode: null,
reasonDescription: null,
lastUpdatedTimestamp: '20230829T102329Z'
},
shippingAddress: {
name: '七姓 名',
addressLine1: '目黒区下目黒1-8-1 メゾン・コート 101号',
addressLine2: null,
addressLine3: null,
city: null,
county: null,
district: null,
stateOrRegion: '東京都',
postalCode: '153-0064',
countryCode: 'JP',
phoneNumber: '09011112222'
},
platformId: null,
chargePermissionId: null,
chargeId: null,
constraints: [
{
constraintId: 'ChargeAmountNotSet',
description: 'chargeAmount is not set.'
},
{
constraintId: 'CheckoutResultReturnUrlNotSet',
description: 'checkoutResultReturnUrl is not set.'
},
{
constraintId: 'PaymentIntentNotSet',
description: 'paymentIntent is not set.'
}
],
creationTimestamp: '20230829T102316Z',
expirationTimestamp: '20230830T102316Z',
storeId: 'amzn1.application-oa2-client.czzzzzzzzzz ',
providerMetadata: { providerReferenceId: null },
releaseEnvironment: 'Sandbox',
checkoutButtonText: null,
deliverySpecifications: null,
tokens: null
}
2. 注文確認ページにお届け先と支払い方法を表示する。
Get Checkout Session APIのレスポンスを利用して、注文確認ページに情報を表示します。 APIレスポンス例の中で、通常は以下の項目を表示に利用します。
- buyer: Amazonアカウント保有者の情報
- shippingAddress: お届け先住所
- paymentDescriptor: お支払い方法
- billingAddress: お支払い方法に紐づいている請求書住所
各項目の扱いには注意が必要となります。詳細は以下のFAQでご紹介していますので、確認の上適切な処理をお願いいたします。
FAQ - アカウント情報として何が取得できますか?
3. 注文確認ページのお届け先と支払い方法 それぞれに「変更」(または「修正」等相当する)ボタンを設置
Amazonから取得したお届け先と支払い方法の表示部分には 「変更」(または「修正」等相当するボタン)を設置します。
そして、bindChangeActionを使用してクリックイベントをボタンHTML要素にバインドします。
やり方は以下のページに記載していますので、ご確認の上実装してください。
インテグレーションガイド- 配送と支払いの更新
これを実装することにより、購入者がお届け先と支払い方法それぞれの「変更」ボタンをクリックすると、再びAmazon hosted pageへリダイレクトされ、Amazonに登録している別のお届け先や支払い方法を選択し直すことができるようになります。 購入者がAmazon hosted page上で選択し直して「続行」ボタンをクリックすると、Amazonは再び事業者のcheckoutReviewReturnUrlへリダイレクトしますので、事業者は再度Get Checkout Session APIを実行し、最新のお届け先と支払い方法を取得して注文確認画面に表示します(なお、この際Checkout Session IDが変わることはありません)。
なぜbindChangeActionを実装しなくてはいけないのか?
→ 上記 "Amazon Pay ボタンクリック後の購入者体験"の#2でご紹介したとおり、購入者が最初にAmazonサイト上でログインした際には、 必ずお届け先/支払い方法を選択する画面が表示されるわけではありません。購入者が"xxとして続行"というシンプルな画面を経由した場合、Get Checkout Session APIのレスポンスで返されるお届け先や支払い方法は、購入者がAmazonサイト上で「いつものお届け先」「いつもの支払い方法」として登録しているものとなります。今回の購入でも同じお届け先とお支払い方法を利用されるかどうかはわかりませんので、貴社の注文確認ページ上でお届け先や支払い方法を別のものに変更できるよう、bindChangeActionの実装が必要となります。
事業者側での処理②: 上記 "Amazon Pay ボタンクリック後の購入者体験" #6と#7の間
1. Update Checkout Session APIの実行
購入者が注文確認ページで「購入する」(注文確定)に相当するボタンをクリックした際に、事業者はUpdate Checkout Session
APIを実行します。
Update Checkout Sessionの目的は、最終の決済金額と売上方法など決済に必要な情報をAmazonへ連携することです。決済に必要な情報をAmazonに連携できていないと、次の決済完了手続きへ進めませんので必ず実行してください。
そのため、Update Checkout Session APIではリクエストパラメータにCheckout Session IDを指定し、リクエストボディに以下のような内容をセットします。
{
"webCheckoutDetails": {
"checkoutResultReturnUrl": "http://localhost:3000/result/"
},
"paymentDetails": {
"paymentIntent": "Authorize",
"canHandlePendingAuthorization":false,
"chargeAmount": {
"amount": "1000",
"currencyCode": "JPY"
}
},
"merchantMetadata": {
"merchantReferenceId": "Merchant reference ID",
"merchantStoreName": "Merchant store name",
"noteToBuyer": "Note to buyer",
"customInformation": "Custom information"
}
}
chekoutResultReturnUrl: Amazon Pay側での決済実行後にリダイレクトする先をセットします。
paymentDetails
merchantMetadataについてはこちら
merchantMetadataの一部のデータについては、決済完了時にAmazon Payから送信されるメールの内容に含まれます。メール本文に表示される内容についてはこちらをご覧ください。
Update Checkout Session APIに関してはこちら
なお、SDKをご利用の場合は、updateCheckoutSessionといった名称で機能が用意されていますのでご利用ください。
2.amazonPayRedirectUrlへのリダイレクト
Update Checkout Session APIを実行し、決済に必要なデータがAmazonへ連携されている場合、Amazon Payは Update Checkout Session APIのレスポンスで webCheckoutDetails.amazonPayRedirectUrl
にURLを返します。
この値が返ってきたら、webCheckoutDetails.amazonPayRedirectUrlに設定されているURLヘリダイレクトします。 リダイレクトされると、購入者は "Amazon Pay ボタンクリック後の購入者体験"の#7の状態になります。
事業者側での処理③: 上記 "Amazon Pay ボタンクリック後の購入者体験" #8と9の間
Complete Checkout Session APIの実行
事業者がwebCheckoutDetails.amazonPayRedirectUrlへリダイレクトすると、Amazon Payは決済処理を実行します。
決済の準備が整ったら、Amazonは Update Checkout Session APIで指定された checkoutResultReturnUrl
(貴社サーバー)へリダイレクトします。
リダイレクト時には Checkout Session IdがURLパラメータとして付加されています。
例) https://anyurl.com/result/ ?amazonCheckoutSessionId=26be7331-7dc2-4722-be22-f7e75582d3ef
事業者は、リダイレクトを受けたらURLパラメータに付加されている amazonCheckoutSessionIdを取得し、Complete Checkout Session
APIを実行します。
Complete Checkout Session APIのリクエストパラメータにはamazonCheckoutSessionIdを指定し、リクエストボディに以下のような内容をセットします。
{
"chargeAmount": {
"amount": "1000",
"currencyCode": "JPY"
}
}
- chargeAmountについてはこちら
- Complete Checkout Session APIに関してはこちら
- なお、SDKをご利用の場合は、completeCheckoutSessionといった名称で機能が用意されていますのでご利用ください。
APIが成功している場合(HTTPステータスコード 200 または 202 の場合)
APIのレスポンスの中に chargePermissionId
と chargeId
が返りますので、貴社の顧客に紐づけて保存しておきます。
Update Checkout Session APIのpaymentDetails.paymentIntentでConfirmをセットしている場合は、chargeIdが返りません(Confirmでは決済完了時にオーソリを取得しないため)
HTTPステータスコード 200の場合
処理が完了したら、注文完了ページを表示します。
HTTPステータスコード 202の場合
canHandlePendingAuthorizationがtrueに設定されていて、オーソリがまだ保留中の場合、HTTPステータスコード202が返ります。
この場合は、非同期でオーソリが処理されます。最大24時間かけてオーソリ処理しますので、最終的なオーソリ結果は 事業者が Get Charge APIをポーリング実行して取得する必要があります。
APIレスポンスを受け取った時点で注文としては受け付けしたとしてもオーソリ結果が出ていませんので完全に決済が成功している状態ではありません。購入者をどのような画面(ページ)にリダイレクトするかをご検討ください。
非同期オーソリに関しては以下のFAQに記載がありますので、ご確認ください。
FAQ - canHandlePendingAuthorization=true(Dynamic Authorizationおよび非同期オーソリ)はどんな時に設定したら良いですか?
APIが失敗となる場合
適切なエラーハンドリングをお願いいたします。
Complete Checkout Sessionのエラーについては、以下のサイトでご紹介しています。
インテグレーションガイド - エラーハンドリング
- Complete Checkout Sessionを成功裏に完了できなかった決済は、決済失敗となります。たとえUpdate Checkout Sessionやリダイレクトが問題なく処理できていてもComplete Checkout Sessionができていない場合は決済失敗となります。ですので、事業者の受注処理はComplete Checkout Session APIが成功裏に完了してから実行してください。
- Checkout Sessionは、ECサイト上でAmazon Payボタンをクリック〜決済を完了するまでの決済セッションを一時的に保持するためのオブジェクトです。ですので、決済を終了した場合(成功でも失敗でも)はCheckout Sessionはその役割を終え、一定期間後に削除されます。決済が成功裏に完了した場合は、Checkout Sessionで保持していた購入者の情報や決済情報は Charge Permissionオブジェクトに引き継がれますので、決済完了後にそれらの情報を参照する場合は、Get Checkout Session APIではなく、Get Charge Permission APIをご利用ください。
- 詳細情報は Charge Permissionが作成されてから30日間のみ取得できます。