決済を確認・完了する

[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 と一致しなければならないです。また、チェックアウトセッションで totalOrderAmountsupplementaryData が提供されている場合は、それを指定する必要があります。PayAndShipのユースケースでは、shippingAddressも必須で、Amazonが共有する住所と一致しなければなりません。billingAddressにも同じ要件があります。

成功のレスポンス:

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 は失敗したトランザクションに対しては、エラーレスポンスを返します。購入者は決済を途中でキャンセルしたか、有効なお支払い方法を選択し決済を完了できませんでした。この場合は次の手順を実施してください。

  1. 購入者を決済の開始時点にリダイレクトします。
  2. 「Amazon Payでのお支払いに失敗しました。別のお支払い方法をお試しください。」などのメッセージを表示します。

Finalize Checkout Session - API

onCompleteCheckout イベントハンドラが paymentIntent を確定するために呼び出された後、チェックアウトセッションを確定します。 リクエストの chargeAmount は、注文金額を確認するためにチェックアウトセッションオブジェクト paymentDetails.chargeAmount と一致しなければなりません。また、チェックアウトセッションで totalOrderAmountsupplementaryData が提供されている場合は、それも指定しなければならない。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を再試行する必要があります

その他エラーは こちらをご参照ください.