Amazon Payの統合
Amazon Pay API SDK は、pay-api.amazon.com|eu|jp エンドポイントへの API 呼び出しにのみ使用できることに注意してください。
mws.amazonservices.com|jp または mws-eu.amazonservices.com エンドポイントを使用する Amazon Pay API 呼び出しを行う必要がある場合は、オリジナルの Amazon Pay SDK (PHP) を使用する必要があります。
Composer を使用して、SDK の最新リリースとその依存関係をインストールします。
composer require amzn/amazon-pay-api-sdk-php
次のテスト スクリプトを使用してインストールを確認します。
<?php
include ' vendor/autoload.php ' ;
echo " SDK_VERSION= " . Amazon Pay API Client :: SDK_VERSION . "n" ;
?>
以前の MWS 統合からの MWS アクセス キー、MWS 秘密キー、および MWS 認証トークンは、この SDK では使用できません。
この SDK で API 呼び出しを行うには、独自の公開キーと秘密キーのペアを生成する必要があります。
Windows 10 では、これは ssh-keygen コマンドで実行できます。
ssh-keygen -t rsa -b 2048 -f private.pem
ssh-keygen -f private.pem -e -m PKCS8 > public.pub
Linux または macOS では、openssl コマンドを使用してこれを行うことができます。
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout > public.pub
上記の最初のコマンドは秘密キーを生成し、2 行目はその秘密キーを使用して公開キーを生成します。
キーをアカウントに関連付けるには、こちらの手順に従って公開キー ID を取得してください。
このパッケージの名前空間は AmazonPayAPI であるため、AmazonPay 名前空間を使用する元の Amazon Pay MWS SDK と競合することはありません。
$ amazonpay_config = array (
' public_key_id ' => ' ABC123DEF456XYZ ' , // RSA Public Key ID (this is not the Merchant or Seller ID)
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' sandbox ' => true , // true (Sandbox) or false (Production) boolean
' region ' => ' us ' , // Must be one of: 'us', 'eu', 'jp'
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' // Amazon Signing Algorithm , Optional : uses AMZN - PAY - RSASSA - PSS if not specified
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
セラーセントラルで環境固有のキー(つまり、LIVE または SANDBOX で始まる公開キー)を作成した場合は、それらの PublicKeyId と PrivateKey を使用します。この場合、Sandbox パラメーターを ApiConfiguration に渡す必要はありません。
$ amazonpay_config = array (
' public_key_id ' => ' MY_PUBLIC_KEY_ID ' , // LIVE-XXXXX or SANDBOX-XXXXX
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' region ' => ' us ' , // Must be one of: 'us', 'eu', 'jp'
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' // Amazon Signing Algorithm , Optional : uses AMZN - PAY - RSASSA - PSS if not specified
);
プロキシ サポートを有効にしたい場合は、次の方法で $amazonpay_config で設定できます。
$ amazonpay_config = array (
' public_key_id ' => ' ABC123DEF456XYZ ' , // RSA Public Key ID (this is not the Merchant or Seller ID)
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' sandbox ' => true , // true (Sandbox) or false (Production) boolean
' region ' => ' us ' , // Must be one of: 'us', 'eu', 'jp'
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' , //Amazon Signing Algorithm, Optional: uses AMZN-PAY-RSASSA-PSS if not specified
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' , // (optional) Solution Provider Platform Version in Semantic Versioning Format
' proxy ' => [
' host ' => ' proxy_host ' ,
' port ' => ' proxy_port ' ,
' username ' => ' proxy_username ' ,
' password ' => ' proxy_password ' ,
]
);
pay-api.amazon.com|eu|jp エンドポイントは、バージョン管理を使用して将来の更新を可能にします。この SDK のメジャー バージョンは、エンドポイントの API バージョンと一致したままになります。
この SDK のバージョン 1.xy をダウンロードした場合、以下の例の $version は「v1」になります。 2.xy は「v2」などになります。
組み込みの便利な関数を利用して、API 呼び出しを簡単に実行できます。さらに下にスクロールすると、コード スニペットの例が表示されます。
便利な機能を使用する場合、要求ペイロードは提供された秘密キーを使用して署名され、HTTPS 要求が正しいリージョン エンドポイントに対して行われます。リクエストのスロットルが発生した場合、HTTPS 呼び出しは指数バックオフ アプローチを使用して最大 3 回試行されます。
この API を使用して Amazon Pay に出荷追跡情報を提供すると、Amazon Pay は出荷予定日と配達日を Alexa で購入者に通知できます。詳細については、配信トラッカー API ドキュメントを参照してください。
この機能を使用するには、ソリューション プロバイダー アカウントが販売者アカウントとの既存の関係 (有効でアクティブな MWS 認証トークン) を持っている必要があることに注意してください。
API統合ガイド
$headers フィールドは、少なくとも x-amz-pay-idempotency-key ヘッダーが必要であるため、以下の create/POST 呼び出しではオプションではありません。
$ headers = array ( ' x-amz-pay-idempotency-key ' => uniqid ());
実稼働環境で In-Store API 呼び出しを使用する前に、Amazon Pay アカウント マネージャーに問い合わせて、In-Store Integration Guide のコピーを入手してください。
API 呼び出しを行うには、次の 4 つの簡単な手順が必要です。
ステップ 1. クライアントを構築します (以前に定義した構成配列を使用)。
$ client = new Amazon Pay API Client ( $ amazonpay_config );
ステップ 2. ペイロードを生成します。
$ payload = ' {"scanData":"UKhrmatMeKdlfY6b","scanReferenceId":"0b8fb271-2ae2-49a5-b35d7","merchantCOE":"US","ledgerCurrency":"USD","chargeTotal":{"currencyCode":"USD","amount":"2.00"},"metadata":{"merchantNote":"Merchant Name","communicationContext":{"merchantStoreName":"Store Name","merchantOrderId":"789123"}}} ' ;
ステップ 3. 通話を実行します。
$ result = $ client -> instoreMerchantScan ( $ payload );
ステップ 4. 結果を確認します。
$result は次のキーを含む配列になります。
最初の 2 つの項目 (ステータス、応答) が重要です。残りの項目は、トラブルシューティングの場合に役立ちます。
PHP で応答を解析するには、PHP json_decode() 関数を使用できます。
$ response = json_decode ( $ result [ ' response ' ], true );
$ id = $ response [ ' chargePermissionId ' ];
ソリューション プロバイダーで、別の販売アカウントに代わって API 呼び出しを行う必要がある場合は、追加の認証トークン パラメーターを API 呼び出しに渡す必要があります。
$ headers = array ( ' x-amz-pay-authtoken ' => ' other_merchant_super_secret_token ' );
$ result = $ client -> instoreMerchantScan ( $ payload , $ headers );
ステップ 2 を実行する別の方法は、PHP 配列を使用し、プログラムで JSON ペイロードを生成することです。
$ payload = array (
' scanData ' => ' UKhrmatMeKdlfY6b ' ,
' scanReferenceId ' => uniqid (),
' merchantCOE ' => ' US ' ,
' ledgerCurrency ' => ' USD ' ,
' chargeTotal ' => array (
' currencyCode ' => ' USD ' ,
' amount ' => ' 2.00 '
),
' metadata ' => array (
' merchantNote ' => ' Merchant Name ' ,
' communicationContext ' => array (
' merchantStoreName ' => ' Store Name ' ,
' merchantOrderId ' => ' 789123 '
)
)
);
$ payload = json_encode ( $ payload );
<?php
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' MY_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' ,
' region ' => ' US ' ,
' sandbox ' => false ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
);
$ payload = array (
' amazonOrderReferenceId ' => ' P01-0000000-0000000 ' ,
' deliveryDetails ' => array ( array (
' trackingNumber ' => ' 01234567890 ' ,
' carrierCode ' => ' FEDEX '
))
);
try {
$ client = new Amazon Pay API Client ( $ amazonpay_config );
$ result = $ client -> deliveryTrackers ( $ payload );
if ( $ result [ ' status ' ] === 200 ) {
// success
echo $ result [ ' response ' ] . "n" ;
} else {
// check the error
echo ' status= ' . $ result [ ' status ' ] . ' ; response= ' . $ result [ ' response ' ] . "n" ;
}
} catch ( Exception $ e ) {
// handle the exception
echo $ e . "n" ;
}
?>
<?php
session_start ();
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' MY_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' ,
' region ' => ' US ' ,
' sandbox ' => true ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
$ payload = array (
' webCheckoutDetails ' => array (
' checkoutReviewReturnUrl ' => ' https://localhost/store/checkout_review ' ,
' checkoutResultReturnUrl ' => ' https://localhost/store/checkout_result '
),
' storeId ' => ' amzn1.application-oa2-client.000000000000000000000000000000000 '
);
$ headers = array ( ' x-amz-pay-Idempotency-Key ' => uniqid ());
try {
$ client = new Amazon Pay API Client ( $ amazonpay_config );
$ result = $ client -> createCheckoutSession ( $ payload , $ headers );
header ( " Content-type:application/json; charset=utf-8 " );
echo $ result [ ' response ' ];
if ( $ result [ ' status ' ] !== 201 ) {
http_response_code ( 500 );
}
} catch ( Exception $ e ) {
// handle the exception
echo $ e . "n" ;
http_response_code ( 500 );
}
?>
<?php
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' YOUR_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' region ' => ' YOUR_REGION_CODE ' ,
' sandbox ' => true ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
$ payload = array (
' webCheckoutDetails ' => array (
' checkoutReviewReturnUrl ' => ' https://localhost/store/checkout_review ' ,
' checkoutResultReturnUrl ' => ' https://localhost/store/checkout_result '
),
' storeId ' => ' amzn1.application-oa2-client.000000000000000000000000000000000 '
);
$ headers = array ( ' x-amz-pay-Idempotency-Key ' => uniqid ());
try {
$ client = new Amazon Pay API Client ( $ amazonpay_config );
$ result = $ client -> createCheckoutSession ( $ payload , $ headers );
if ( $ result [ ' status ' ] === 201 ) {
// created
$ response = json_decode ( $ result [ ' response ' ], true );
$ checkoutSessionId = $ response [ ' checkoutSessionId ' ];
echo " checkoutSessionId= $ checkoutSessionId n" ;
} else {
// check the error
echo ' status= ' . $ result [ ' status ' ] . ' ; response= ' . $ result [ ' response ' ] . "n" ;
}
} catch ( Exception $ e ) {
// handle the exception
echo $ e . "n" ;
}
?>
<?php
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' YOUR_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' region ' => ' YOUR_REGION_CODE ' ,
' sandbox ' => true ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
try {
$ checkoutSessionId = ' 00000000-0000-0000-0000-000000000000 ' ;
$ client = new Amazon Pay API Client ( $ amazonpay_config );
$ result = $ client -> getCheckoutSession ( $ checkoutSessionId );
if ( $ result [ ' status ' ] === 200 ) {
$ response = json_decode ( $ result [ ' response ' ], true );
$ checkoutSessionState = $ response [ ' statusDetails ' ][ ' state ' ];
$ chargeId = $ response [ ' chargeId ' ];
$ chargePermissionId = $ response [ ' chargePermissionId ' ];
// NOTE: Once Checkout Session moves to a "Completed" state, buyer and shipping
// details must be obtained from the getCharges() function call instead
$ buyerName = $ response [ ' buyer ' ][ ' name ' ];
$ buyerEmail = $ response [ ' buyer ' ][ ' email ' ];
$ shipName = $ response [ ' shippingAddress ' ][ ' name ' ];
$ shipAddrLine1 = $ response [ ' shippingAddress ' ][ ' addressLine1 ' ];
$ shipCity = $ response [ ' shippingAddress ' ][ ' city ' ];
$ shipState = $ response [ ' shippingAddress ' ][ ' stateOrRegion ' ];
$ shipZip = $ response [ ' shippingAddress ' ][ ' postalCode ' ];
$ shipCounty = $ response [ ' shippingAddress ' ][ ' countryCode ' ];
echo " checkoutSessionState= $ checkoutSessionState n" ;
echo " chargeId= $ chargeId ; chargePermissionId= $ chargePermissionId n" ;
echo " buyer= $ buyerName ( $ buyerEmail ) n" ;
echo " shipName= $ shipName n" ;
echo " address= $ shipAddrLine1 ; $ shipCity $ shipState $ shipZip ( $ shipCounty ) n" ;
} else {
// check the error
echo ' status= ' . $ result [ ' status ' ] . ' ; response= ' . $ result [ ' response ' ] . "n" ;
}
} catch ( Exception $ e ) {
// handle the exception
echo $ e . "n" ;
}
?>
<?php
include ' vendor/autoload.php ' ;
$ amazonpay_config = array (
' public_key_id ' => ' YOUR_PUBLIC_KEY_ID ' ,
' private_key ' => ' keys/private.pem ' , // Path to RSA Private Key (or a string representation)
' region ' => ' YOUR_REGION_CODE ' ,
' sandbox ' => true ,
' algorithm ' => ' AMZN-PAY-RSASSA-PSS-V2 ' ,
' integrator_id ' => ' AXXXXXXXXXXXXX ' , // (optional) Solution Provider Platform Id in Amz UID Format
' integrator_version ' => ' 1.2.3 ' , // (optional) Solution Provider Plugin Version in Semantic Versioning Format
' platform_version ' => ' 0.0.4 ' // (optional) Solution Provider Platform Version in Semantic Versioning Format
);
$ payload = array (
' paymentDetails ' =>