Step 7:売上請求(Capture)のリクエスト

売上請求はオーソリ中の確保された資金を販売事業者の口座に資金移動することになります。

資金を回収するためには、本番環境モードではオーソリに成功してから30日以内に売上請求(Capture)APIを呼び出します。テスト環境モードでは2日以内です。30日を過ぎた場合は、Amazonによってオーソリオブジェクトは Closed状態にします。

Amazon Payのポリシーでは、注文された商品を出荷してから売上請求しなければなりません。よって、商品を出荷する前に売上請求してはなりません。

購入者から回収できた場合は、売上請求オブジェクトステータスはCompletedになります。

注意: 既に返金を行っている場合は、売上請求として有効ではありません。

処理内容

次の内容で売上請求をリクエストします。

  1. 売上請求(Capture) APIを呼び出します。リクエスト内のSeller Capture Note をセットして、購入者へのメールにこの情報を含めるます。売上請求はリアルタイムで受け付けますが、Amazon内では非同期で処理されますので、すぐに処理されませんので注意してください。売上請求リクエストが処理された場合は売上請求オブジェクトは CompletedDeclined状態になります。
  2. 売上請求リクエストでのCaptureStatus の確認するために売上請求のインスタント支払通知(IPN)を確認します。リクエストされた直後は Pending 状態になっており、Amazonが処理を完了するまではこの状態のままです。処理が完了するまで1時間以上掛かる場合があります。Amazonにて処理が出来なかった場合は、Captureメッセージとして Declinedを受け取ります。
  3. GetCaptureDetails APIを呼び出します。AmazonCaptureId を利用してGetCaptureDetails APIを呼び出しレスポンスを受け取ることで、売上請求オブジェクトの完全な詳細情報を要求することができます。 AmazonCaptureIdは完了した売上請求に対して返金する場合に必要になります。
  4. エラーまたはDeclined のレスポンスをチェックします。API呼び出しから発生したエラーのハンドリングが必要であり、 Declined 状態の売上請求の管理も必要です。売上請求が Declinedの場合は、レスポンス内に次の理由コードがあります。

    AmazonRejected
    Amazonの決定によって売上請求が Declined になります。Amazonが売上請求を拒否した場合は、オーソリオブジェクトとOrder Referenceオブジェクトは Closedになるかもしれません。オーソリオブジェクトがClosed の場合は、それに関連する売上請求リクエストもDeclinedになります。Order Referenceオブジェクトがまだ Open状態であれば、新しいオーソリとそれからの売上請求をリクエストします。

    ProcessingFailure
    Amazonが内部処理エラーの原因でトランザクションを処理できませんでした。1、2分後に再度リクエストしてください。Order Referenceオブジェクトがまだ Openの場合は、Amazonは新しいオーソリ(Authorize) API呼び出し、次に新しい売上請求(Capture) APIを行うことを勧めます。

    エラーハンドリングについての詳しい情報は、Amazon Pay API呼び出しのエラーハンドリングを参照してください。

サンプルコード

Pythonのサンプルコード(US)

Capture API呼び出し

 
from pay_with_amazon.client import PayWithAmazonClient  
  
client = PayWithAmazonClient(  
    mws_access_key='YOUR_ACCESS_KEY',  
    mws_secret_key='YOUR_SECRET_KEY',  
    merchant_id='YOUR_MERCHANT_ID',  
    region='na',  
    currency_code='USD')  
  
# authorization ID returned from 'Authorize' call.  
response = client.capture(  
    amazon_authorization_id='MY_ATHORIZATION_ID',  
    capture_reference_id='MY_UNIQUE_CAPTURE_ID',  
    capture_amount='1.00',  
    seller_capture_note='Capture note.')

Rubyのサンプルコード(US)

Capture API呼び出し

 
# Capture  
  
require 'pay_with_amazon'  
  
merchant_id = '<    font class="parameter">YOUR_MERCHANT_ID'  
access_key = 'YOUR_ACCESS_KEY'  
secret_key = 'YOUR_SECRET_KEY'  
  
client = PayWithAmazon::Client.new(  
    merchant_id,  
    access_key,  
    secret_key,  
    sandbox: true,  
    currency_code: :usd,  
    region: :na  
)  
  
amazon_authorization_id = 'S23-1234567-1234567-0000001'  
capture_reference_id = 'test_capture_1'  
amount = 106  
  
client.capture(  
    amazon_authorization_id,  
    capture_reference_id,  
    amount,  
    seller_capture_note: 'Lorem ipsum dolor',  
    mws_auth_token: 'amzn.mws.4ea38b7b-f563-7709-4bae-87aeaEXAMPLE'  
)

その他のサンプルコード(US)

Capture API呼び出し

 
https://mws.amazonservices.com/OffAmazonPayments_Sandbox/2013-01-01  
?AWSAccessKeyId=AKIAFBM3LG5JEEXAMPLE  
&Action=Capture  
&AmazonAuthorizationId=S23-1234567-1234567-0000001  
&CaptureAmount.Amount=199.00  
&CaptureAmount.CurrencyCode=USD  
&CaptureReferenceId=test_capture_1  
&SellerCaptureNote=For%20your%20order%20of%20Casad%20%272Jours%20Bonheur  
%27%20Satchel%20in%20Sandstorm  
&SellerId=YOUR_SELLER_ID_HERE  
&SignatureMethod=HmacSHA256  
&SignatureVersion=2  
&Timestamp=2013-11-19T19%3A01%3A11Z  
&Version=2013-01-01  
&Signature=WlQ708aqyHXMkoUBk69Hjxj8qdh3aDcqpY71hVgEXAMPLE

参照

Amazon Pay APIリファレンスのCapture

Amazon Pay APIリファレンスのCapture状態と理由コード

その他のシナリオ