オーソリ失敗のハンドリング

オーソリ処理の呼び出しが失敗した場合は、レスポンス内に失敗した理由コードを確認できます。以下のリストでは理由コードとそれに対応する推奨方法を説明します。

このセクションでは以下の内容を説明します。

同期モード

InvalidPaymentMethod

InvalidPaymentMethodは選択された支払方法に問題があることを示します。このシチュエーションでは、Order Referenceは Suspended に遷移し、インスタント支払通知(IPN)の設定がされている場合はそれを発行します。(注意:SoftDeclineパラメータはIPNのオーソリ通知(AuthorizationNotification)内でも示されます。)レスポンスパラメータにSoftDeclineがSoftまたはHard Declineなのか確認します。Amazonでは次の対応方法を推奨します。

  • SoftDeclineパラメータがtrue の場合は、追加のオーソリ(Authorize)を少し経ってから発行できます。リトライした結果が成功ではなかった場合は、購入者に https://pay.amazon.com/jp ページにログインして支払方法の更新を行って頂くように案内します。
  • トランザクション(オーソリ)失敗がSoft Declineではなかった場合は、SoftDeclineパラメータは false になります。Webサイトの購入処理フロー中に購入者へ選択された支払方法は失敗しましたとエラー通知を表示し、Webサイト上で支払方法を更新するように要求します。
  • Webページ上でAmazon Payのお支払い方法ウィジェットを再表示します。(サンプルコードは「Step 4:アドレス帳とお支払い方法ウィジェットの追加」を参照してください。) レンダリングするときに、現在のOrder Reference IDをお支払い方法ウィジェットのamazonOrderReferenceId値にセットすることを確実にしてください。その後で、Amazon Payは前回選択した支払方法に Declinedとマークします。購入者が支払方法の更新をするための Declined リンクをクリックすること、または、ウィジェット内のその他の支払方法を選択することができることをメッセージで提供することができます。

    上記のスクリーンショットは、お支払い方法ウィジェットが失敗情報をレンダリングする場合に、購入者へ表示される失敗メッセージのサンプルです。
  • 購入者が支払方法の更新、または、新しい支払方法を選択した後は、Amazon PayのウィジェットからonPaymentSelectコールバックをトリガーします。
  • 購入者は完了するまでに何回か支払方法をクリックするかもしれません。購入者がいろいろなユーザーエクスペリエンスフローで「 買い物をする」、「更新する 」、または、よく似たボタンなどをクリックして最終的に選択した場合は、ConfirmOrderReference APIを呼び出します。これによって、Order ReferenceはSuspendedから Open状態に遷移します。Draft状態ではないOrder Referenceオブジェクトに対して、SetOrderReferenceDetails処理を呼び出せません、また、追加属性をセットできません。ステータスが変更されたことを含むインスタント支払通知(IPN)を受け取ります、または、Order Referenceステータスが更新された確認するためにGetOrderReferenceDetailsを呼び出すこともできます。
  • Order ReferenceがOpen 状態である場合は、オーソリ(Authorize)APIを利用して新しいオーソリを試みてください。購入者には提供可能な購入者メールコンテンツと同様のメールを受信します。

AmazonRejected

AmazonRejectedはAmazonによってオーソリ処理が失敗として決定されたことを示します。Order ReferenceはClosed状態に遷移し、トランザクションを失敗させる必要があります。

ProcessingFailure

ProcessingFailureは内部処理の結果としてAmazonがトランザクションを処理できなかったことを示します。1、2分後にリクエストをリトライしてください。Order ReferenceがOpen 状態のままで残ります。リトライが成功しなかった場合は、数分後に注文してくださいと案内してください。

TransactionTimedOut

TransactionTimedOutは30秒以内にAmazonがリクエストを処理できず、オーソリリクエストが失敗したことを示します。
一般的に購入者は新しい注文を実行するか、支払方法を変更してもこの失敗した理由を解決できません。購入者のために(Order ReferenceがOpenであれば)非同期モードでリトライするか、トランザクションをキャンセルできます。

非同期モード

InvalidPaymentMethod

InvalidPaymentMethodは選択された支払方法に問題があることを示します。このシチュエーションでは、Order Referenceは Suspended に遷移し、インスタント支払通知(IPN)の設定がされている場合はそれを発行します。(注意:SoftDeclineパラメータはIPNのオーソリ通知(AuthorizationNotification)内でも示されます。)レスポンスパラメータにSoftDeclineがSoftかHard Declineなのか確認します。購入者は既にWebサイトには残っていないと想定してAmazonは次の通りの対応方法を推奨します。

  • SoftDeclineパラメータがtrue の場合は、追加のオーソリ(Authorize)を少し経ってから発行できます。リトライした結果が成功ではなかった場合は、購入者に次の方法を説明して、支払方法の更新を行って頂くように案内します。
  • トランザクション(オーソリ)失敗がSoft Declineではなかった場合は、SoftDeclineパラメータは false になります。購入者にメールか電話で問合せし、支払方法の更新を案内します。購入者がログインして直接注文と支払方法が変更できるURLを含めたメール送信します。URLの形式は次の通りになります。
     
    https://pay.amazon.com/us/jr/your-account/apa?action=renderOrderDetails&contractId=<order reference number>
    
    以下はサンプルのURLです。
     
    https://pay.amazon.com/us/jr/your-account/apa?action=renderOrderDetails&contractId=P01-99999-9999999
    
    その他の方法として、Webページ上で購入者に上記の方法と同様に注文を確認して、支払方法を変更する案内を提示することもできます。
  • 購入者が支払方法を更新した後は、Order ReferenceオブジェクトはSuspended状態から Open状態に遷移します。Amazon Payはそれからインスタント支払通知(IPN)を送信し、購入者には提供可能な購入者メールコンテンツと同様のメールを受信します。

AmazonRejected

AmazonRejectedはAmazonによってオーソリ処理が失敗として決定されたことを示します。Order ReferenceはClosed状態に遷移し、トランザクションを失敗させる必要があります。

ProcessingFailure

ProcessingFailureは内部処理の結果としてAmazonがトランザクションを処理できなかったことを示します。1、2分後にリクエストをリトライしてください。Order Referenceが Open 状態のままで残ります。リトライが成功しなかった場合は、数分後に注文してくださいと案内してください。

TransactionTimedOut

TransactionTimedOutはオーソリ処理の呼び出しがデフォルトタイムアウトの24時間かTransactionTimeoutリクエストパラメータで指定された時間内に処理されなかったことを示します。このコードの結果として高い失敗が発生した場合は、タイムアウト値を調整してトライしてください。

トランザクションが非同期モードでリトライすることは重要であり、購入者は注文が通常処理よりも長い時間掛かっていることを理解しますが、購入者は再注文を試みるべきではありません。

Soft Declineハンドリングの代表的なフロー

顧客注文に対してオーソリ(Authorize)APIを呼び出して、SoftDeclineパラメータにtrue がセットされたInvalidPaymentMethodの理由コードを受け取った場合は、再オーソリのオプションがあります。
最初に、再オーソリする前に、Order ReferenceをOpen 状態にリセットする必要があります。それには、ConfirmOrderReference APIを呼び出します。

それを実行しOrder ReferenceオブジェクトがOpen状態になれば、オーソリ(Authorize) APIを再度呼び出します。
必要であれば、最初のオーソリに失敗してからこの処理は3回まで繰返します。