決済を確認・完了する
[Step 4 of 7] onCompleteCheckoutイベントハンドラが呼び出されたら、Finalize Checkout Session
APIを利用します。このAPIは標準的なAmazon Pay CV2フローのComplete Checkout Session
APIを置き換えるものです。このAPIは重要な情報を検証するのでこのAPIからの応答が成功した場合のみ、決済が成功したとみなします。このステップの最後に購入者にチェックアウト結果を提示することができます。
Finalize Checkout Session
OnCompleteCheckout
イベントを正常に受信したことを確認するには、Finalize Checkout Session を使用します。
リクエストの chargeAmount
は、注文金額を確認するためのチェックアウトセッションオブジェクト paymentDetails.chargeAmount
と一致しなければならないです。また、チェックアウトセッションで totalOrderAmount
と supplementaryData
が提供されている場合は、それを指定する必要があります。PayAndShip
のユースケースでは、shippingAddress
も必須で、Amazonが共有する住所と一致しなければなりません。billingAddress
にも同じ要件があります。
paymentIntent
を確定しません。24時間以内に確認されなかったチェックアウトセッションはキャンセルされます。オーソリが要求された場合もキャンセルされます。成功のレスポンス:
Finalize Checkout Sessionはトランザクションが正常に処理された場合、成功レスポンスを返します。チェックアウトセッションの paymentIntent
に対応するガイダンスを実装してください:
paymentIntent
|
説明
|
AuthorizeWithCapture
|
支払いのオーソリが取得され、売上請求も実施されます。 1. ChargeId の保管 - ChargeId は返金実施時の為に必ず保管してください。2. ChargePermissionId の保管 - もし totalOrderAmount を設定していて、売上請求が未済のレコードがある場合は、 延期されたトランザクションを管理する を参照してください。また、30日以内であれば、ChargePermissionId を使用して、Get Charge Permissionを行い、購入者とトランザクションの情報を取得することもできます。情報を30日を超えて保持するには、データを事業者側で保存する必要があります。
|
Authorize
|
オーソリが取得されます。 1. ChargeId の保管 - 後に売上請求するのCharge IDを格納する必要があります。詳細については、延期されたトランザクションを管理するを参照してください。2. ChargePermissionId の保管 - もし totalOrderAmount を設定していて、売上請求が未済のレコードがある場合は、 延期されたトランザクションを管理する を参照してください。また、30日以内であれば、ChargePermissionId を使用して、Get Charge Permissionを行い、購入者とトランザクションの情報を取得することもできます。情報を30日を超えて保持するには、データを事業者側で保存する必要があります。
|
Confirm
|
オーソリが取得されず、売上請求も行なわれません。 1. ChargePermissionId の保管 - ChargePermissionId を将来行うオーソリ取得、売上請求の為に保管します。詳細については、延期されたトランザクションを管理するを参照してください。また、30日以内であれば、ChargePermissionId を使用して、Get Charge Permissionを行い、購入者とトランザクションの情報を取得することもできます。情報を30日を超えて保持するには、データを事業者側で保存する必要があります。
|
エラーレスポンス:
Finalize Checkout Session は失敗したトランザクションに対しては、エラーレスポンスを返します。購入者は決済を途中でキャンセルしたか、有効なお支払い方法を選択し決済を完了できませんでした。この場合は次の手順を実施してください。
- 購入者を決済の開始時点にリダイレクトします。
- 「Amazon Payでのお支払いに失敗しました。別のお支払い方法をお試しください。」などのメッセージを表示します。
Finalize Checkout Session - API
onCompleteCheckout
イベントハンドラが paymentIntent
を確定するために呼び出された後、チェックアウトセッションを確定します。
リクエストの chargeAmount
は、注文金額を確認するためにチェックアウトセッションオブジェクト paymentDetails.chargeAmount
と一致しなければなりません。また、チェックアウトセッションで totalOrderAmount
と supplementaryData
が提供されている場合は、それも指定しなければならない。PayAndShipのユースケースでは、
shippingAddressも必須で、Amazonが共有する住所と一致しなければなりません。
billingAddress`にも同じ要件があります。
このリクエストは、canHandlePendingAuthorization
がtrueに設定され、オーソリがまだ保留中の場合、HTTP 202 ステータスレスポンスを返します。オーソリの結果が確定した場合、このリクエストはオーソリが成功した場合は HTTP 200 ステータスレスポンスコードを、オーソリに失敗した場合は 4xx/5xx レスポンスを返します。詳しくは非同期処理 をご覧ください。
Request
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"
},
"billingAddress": {
"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"
},
"totalOrderAmount": {
"amount": "14",
"currencyCode": "USD"
},
"paymentIntent": "AuthorizeWithCapture",
"canHandlePendingAuthorization": "false"
}
Request parameters
名前
|
ロケーション
|
説明
|
checkoutSessionId (必須) Type: string |
Path parameter
|
Checkout Session識別子
|
paymentIntent (必須) Type: string |
Body
|
購入者への支払いフロー
|
chargeAmount (必須) Type: price |
Body
|
決済時にpaymentIntent を使用して処理される金額。Checkout SessionオブジェクトのpaymentDetails.chargeAmount と一致する必要があります
|
totalOrderAmount Type: price |
Body
|
注文の総額。この項目に値が指定されている場合は、Checkout SessionオブジェクトpaymentDetails.totalOrderAmount と一致する必要があります
|
canHandlePendingAuthorization Type: boolean |
Body
|
非同期オーソリ処理を行うかどうかのBoolean 詳細は asynchronous processing をご参照ください |
shippingAddress (必須) Type: address |
Body
|
Amazonが検証するための配送先住所
`PayAndShip`では必須 です |
billingAddress (必須) Type: address |
Body
|
Amazonが検証するための請求先住所
`PayOnly`では必須 です |
supplementaryData Type: string |
Body
|
オーダーにおける補足データ(通常は利用しません)
|
Sample Code
Response
paymentIntent
が成功した場合、HTTP 200 ステータスレスポンスコード を返し、オーソリが保留中の場合はHTTP 202 ステータスレスポンスコードを返します。
{
"checkoutSessionId": "bd504926-f659-4ad7-a1a9-9a747aaf5275",
"webCheckoutDetails": null,
"chargePermissionType": "OneTime",
"recurringMetadata": null,
"productType": null,
"paymentDetails": null,
"merchantMetadata": null,
"supplementaryData":null, // Amazon Pay system data
"buyer": null,
"billingAddress": null,
"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
}
Error codes
HTTPステータスコード
|
理由コード
|
説明
|
400 BAD_REQUEST |
CurrencyMismatch |
リクエストで提供された通貨コードが、決済時に設定された通貨と一致しません
|
400 BAD_REQUEST |
TransactionAmountExceeded |
Checkout Sessionで許可されている最大請求金額を超えました
|
404 NOT_FOUND |
ResourceNotFound |
Checkout Sessionは、30日後に完全に削除されます。以降、Checkout Sessionに対してリクエストを行うと、このエラーコードが返されます
|
409 CONFLICT
|
ChargeAmountMismatch
|
Checkout SessionオブジェクトのchargeAmount とリクエストchargeAmount が一致していません
|
409 CONFLICT
|
TotalOrderAmountMismatch
|
Checkout SessionオブジェクトのTotalOrderAmount とリクエストTotalOrderAmount が一致していません
|
409 CONFLICT
|
CanHandlePendingAuthorizationMismatch
|
Checkout SessionオブジェクトのcanHandlePendingAuthorization とリクエストcanHandlePendingAuthorization が一致していません
|
409 CONFLICT
|
PaymentIntentMismatch
|
Checkout SessionオブジェクトのpaymentIntent とリクエストpaymentIntent が一致していません
|
409 CONFLICT
|
ShippingAddressMismatch
|
Checkout SessionオブジェクトとリクエストShippingAddress が一致していません
|
409 CONFLICT
|
BillingAddressMismatch
|
Checkout SessionオブジェクトとリクエストbillingAddress が一致していません
|
422 UNPROCESSABLE_ENTITY |
CheckoutSessionCanceled |
購入者が取引をキャンセルしたか、支払いが拒否されたため、決済に失敗しました
|
422 UNPROCESSABLE_ENTITY |
InvalidCheckoutSessionStatus
|
その処理が許可されていないstateのCheckout Sessionに対して処理を実行しようとしました
|
422 UNPROCESSABLE_ENTITY |
InvalidChargeStatus
|
その処理が許可されていないstateのChargeに対して処理を実行しようとしました。または、paymentIntent がAuthorizeWithCaptureでcanHandlePendingAuthorization をtrueに設定しているCheckout Sessionに対して、Complete Checkout Sessionを実行しようとしました
|
422 UNPROCESSABLE_ENTITY
|
HardDeclined
|
Chargeはhard declinedとなりました。再試行は成功しません。購入者に連絡して、別のお支払い方法を選択してもらいます
|
422 UNPROCESSABLE_ENTITY
|
PaymentMethodNotAllowed
|
購入者が選択した支払い方法は、このChargeに対しては許可されていません
|
422 UNPROCESSABLE_ENTITY
|
AmazonRejected
|
ChargeはAmazonによって拒否されました。紐づくCharge Permissionもキャンセルされます
|
422 UNPROCESSABLE_ENTITY
|
MFANotCompleted
|
トランザクションを処理するには、購入者が多要素認証(MFA)を完了する必要があります
|
422 UNPROCESSABLE_ENTITY
|
TransactionTimedOut
|
canHandlePendingAuthorization がfalseの場合,Amazon Payがオーソリを取得するのに十分な時間な時間が取れずChargeは拒否されました。購入者に連絡して、別の支払い方法を選択してもらいます。このエラーが頻繁に発生する場合は、canHandlePendingAuthorization をtrueに設定して下さい。もしcanHandlePendingAuthorization をtrueにした場合,Amazon Payが注文の有効性を判断できなかったため、このChargeは拒否されました。購入者に連絡して、別の支払い方法を選択してもらいます。詳細については、非同期処理を参照してください
|
500 INTERNAL_SERVER_ERROR
|
ProcessingFailure
|
内部処理エラーのため、AmazonはChargeを処理できませんでした。 Charge PermissionがChargeable状態の場合にのみChargeを再試行する必要があります
|
その他エラーは こちらをご参照ください.