Step 7:支払失敗のハンドリング | Amazon Pay Japan

Step 7:支払失敗のハンドリング

支払失敗に対して、購入者がどのように対応すればよいか手助けすることが出来ます。それぞれの失敗理由コードに対して、適切なメッセージを表示することで、問題を解決することが出来るようにします。

AuthorizeOnBillingAgreement処理の呼び出しが失敗した場合は、レスポンス内に以下の4つの理由コード内の1つが含まれ参照できます。また、それぞれの意味とBilling Agreementの状態に対する影響を示します。

失敗理由コード 意味
InvalidPaymentMethod InvalidPaymentMethodは、選択された支払方法に問題があることを示します。この場合、Billing Agreementは、Suspended状態に遷移します。
TransactionTimedOut TransactionTimedOutは、AuthorizeOnBillingAgreement処理の呼び出しが、TransactionTimeoutリクエストパラメータに指定された期間内に処理できなかったことを示します。Billing Agreementは、Open状態のままとなります。
AmazonRejected AmazonRejectedは、AuthorizeOnBillingAgreement処理の呼び出しが、Amazonによって判断した結果、失敗したことを示します。Billing Agreementは、Open状態のままとなります。
ProcessingFailure ProcessingFailureは、Amazonの内部処理エラーのためにトランザクションを処理できなかったことを示します。Billing Agreementは、Open状態のままとなります。

購入者がオーソリの失敗を解決する方法は、理由コードと購入者がサイト上に存在するかに依存します。オーソリ失敗をハンドリングする方法は、下記何れかになります。

  • 購入者が未だサイト上に存在し、問題と失敗した支払いに対して、直ちに対応可能な場合
  • 購入者はサイト上には存在せず、失敗した支払いに対して、直ちに対応出来ない場合

注意:  過去に作成されたBilling Agreementに対するオーソリの場合、購入者はサイト上に存在しないかもしれません。このシナリオにおいては、下記「購入後のオーソリで購入者が存在しない場合」に従ってください。また、購入者が存在しない場合のオーソリでは、SoftDeclineをチェックしていることを確認してください。

手順

購入過程のオーソリで購入者が存在する場合 (同期オーソリ)

理由コード:InvalidPaymentMethod

  1. Amazon Payお支払い方法ウィジエットを再表示してください。(サンプルコードに関しては、Step 2:アドレス帳とお支払い方法ウィジェットの追加をご確認ください。
  2. 確認事項:
    • お支払い方法ウィジェットを再表示する際に、amazonBillingAgreementIdを設定することで、現在のBilling Agreement IDを紐づけているか確認してください。そうした場合、Amazon Payは前回選択された支払い方法を「Declined」とマークします。
    • もし、アドレス帳ウィジエットを無しでインテグレーションしている場合、Order Referenceをお支払い方法ウィジェット内で作成します。JavaScriptコードを再利用する場合、onReady:function(billingAgreement)を削除することを忘れないでください。
    • ウィジェット内でお支払い方法を変更することで、お支払い方法ウィジェットからonPaymentSelectコールバックを呼び出されます。
  3. お支払い方法ウィジェットの近くに、下記のようなメッセージを表示してください: "指定されたお支払い方法は、処理出来ませんでした。新たなお支払い方法を選択し直してください。"
  4. 同じページで、購入者が新たなお支払い方法選択が確認出来るようなボタンを表示します。このボタンは、onPaymentSelectコールバックが少なくとも1度呼び出されてから有効にしてください。このボタンをクリックすると、下記処理を実行します。
    • ConfirmBillingAgreement APIを呼び出し、Billing Agreementの状態をSuspendedからOpenへ変更します。
    • AuthorizeOnBillingAgreement APIを呼び出し、新しく一意であるAuthorizationReferenceIdを使用していることを確認してください。このケースは、Order ReferenceがOpen状態の場合のみ有効です。
    注意
    • SetBillingAgreementDetails処理は、Billing AgreementオブジェクトがDraft状態ではないため、失敗するので呼び出さないでください。
    • もし、アドレス帳ウィジェットも同じページ内に表示する場合、JavaScriptのコードが下記の通りとなっていることを確認してください。
      • displayMode: "Read"となっていること
      • onReady: function(billingAgreement)が削除されていること
      • amazonBillingAgreementIdを含んでおり、このトランザクションのBilling Agreement IDが設定されていること

理由コード:ProcessingFailure

  1. 1、2分以内にリクエストを再実行してください。
  2. 再実行しても失敗する場合、購入者に時間をあけて再度注文していただくように促します。

理由コード:AmazonRejected

  1. Amazon Payのセッションを終了させます。(例えば、JavaScript functionのamazon.Login.logout()を、Amazon PayのWidgets.jsが読み込まれたページ上で呼び出します。)
  2. カートページに購入者をリダイレクトします。
  3. カートページでは、下記のようなメッセージを表示してください: "お支払い処理が失敗しました。違うお支払い方法で、再度処理をお願いします。"

理由コード:TransactionTimedOut

もし、Pendingの注文がハンドルできない、もしくは、ビジネス上の理由でオーソリの結果を即座に知りたい場合、トランザクションが失敗した際、購入者に他のお支払い方法を選択していただくため、リダイレクトします。

もし、Pendingの注文がハンドルできる場合、非同期オーソリを実装するため、下記を実施してください。

  1. TransactionTimeoutを使用して(1440、もしくは60以上)、AuthorizeOnBillingAgreement APIを呼び出します。最小は5分(5の倍数で増加可能)となっておりますが、非同期オーソリの最大値を設定いただくことを推奨します。
  2. 非同期オーソリの結果が正しく処理されたか確認する処理(IPN通知かポーリング) があることを、確認してください。
  3. 注文完了ページに、購入者をリダイレクトしてください。
  4. 下記のようなメッセージを表示します: "Amazon Payでのご注文が、現在処理されております。処理結果に応じてご連絡させていただきますので、ご確認いただければと思います。"

同期オーソリの詳細な図に関しては、同期オーソリフローを参照ください。

購入後のオーソリで購入者が存在しない場合 (非同期オーソリ)

理由コード:InvalidPaymentMethod

  1. オーソリが失敗した際に、購入者が存在しない場合、レスポンスパラメータのSoftDeclineを確認し、Soft DeclineかHard Declineか判断してください。
  • Soft Decline: Billing AgreementがOpen状態で、SoftDeclineパラメータがTrueの場合、追加でオーソリ処理が実行出来ます。Billing AgreementをOpen状態にするには、ConfirmBillingAgreement処理を使用して、再度オーソリ処理を実行します。もし、この追加のオーソリ処理が失敗した場合、Step 2に進んでください。
  • Hard Decline: Step 2に記載されている通り、購入者に連絡し、Amazon.co.jpの会員ページでお支払い方法を更新するよう促します。
  • 購入者へこちらのURLを含むメールを送付します。https://pay.amazon.com/jp/jr/your-account/ba/[購入者のBilling Agreement ID]
  • 理由コード:ProcessingFailure

    1、2分以内にリクエストを再実行してください。Billing Agreementは、Open状態のままとなります。

    理由コード:AmazonRejected

    トランザクションを終了させ、購入者に連絡し、 他のお支払い方法を選択いただくよう促します。Billing Agreementは、Closed状態へ遷移します。

    理由コード:TransactionTimedOut

    AuthorizeOnBillingAgreementのTransactionTimeoutパラメータの値を大きくして、再度オーソリを実施します。

    非同期オーソリフローをご参照ください。

    試験方法

    Sandbox環境で、事前定義されたクレジットカードの1つを利用することで、オーソリの失敗をシミュレーションすることが出来ます。ただし、ProcessingFailureエラーはシミュレーション出来ません。

    下記も参照ください。

    Step 6:オーソリのリクエスト