Amazon Payボタンを追加する
[ステップ2/9] Amazon Payの決済エクスペリエンスは、購入者がAmazon Payボタンをクリックすると開始されます。ミニカート、ショッピングカートページ、チェックアウトページなど、購入者が決済を開始する場所にボタンを追加します。
このステップでは、Amazon Pay Checkout Sessionオブジェクトを設定してから、Amazon Payボタンをレンダリングします。このステップの最後に、購入者をAmazon Hosted Pageにリダイレクトして、希望の配送先住所と支払い方法を選択できるようになります。
1. Amazon Payスクリプトを追加します
Amazon PayスクリプトをHTMLファイルに追加します。必ず正しいリージョンを選択してください。
<script src="https://static-na.payments-amazon.com/checkout.js"></script>
<script src="https://static-eu.payments-amazon.com/checkout.js"></script>
<script src="https://static-fe.payments-amazon.com/checkout.js"></script>
2. CheckoutSession ペイロードを生成します
Amazon Payボタンをレンダリングするには、 Amazon PayがCheckoutSessionオブジェクトを作成するために使用するペイロードを提供する必要があります。CheckoutSessionオブジェクトを使用して、Webサイトでの購入者のアクティブなセッションを管理します。
ボタンペイロードを生成するための手順:
checkoutReviewReturnUrl
パラメータに、購入者が希望の配送先住所と支払い方法を選択した後にリダイレクトされるURLを設定します。CheckoutSession IDはクエリパラメータとして追加されます。recurringMetadata.frequency
を設定することで、購入者の信頼性を高めることができます。もしこのステップで値を提供しない場合は、購入者が決済を完了する前までに値を設定する必要があります。Amazon Payは、提供された値を使用して、Charge Permissionの有効期限を計算し、購入者とのコミュニケーションに用います。事業者がCreate Chargeを呼び出して、請求サイクルごとに購入者に請求する必要があります。scopes
パラメータを使用して、決済を完了するために必要な購入者情報を指定します。この値を設定した場合、請求先住所など追加で取得できます。
オプションのインテグレーション手順:
deliverySpecifications
パラメータを使用して、住所制限を指定し、購入者がAmazon Hosted Pageのお届け先からサポートされていない住所を選択できないようにします。 一般的なユースケースの処理のついては、アドレス制限のサンプルを参照してください。- (EU/UKのみ)
presentmentCurrency
パラメータを使用して、 他のサポートされている通貨を使用して購入者に請求できます。詳細については、こちら を参照してください。
ペイロード の例
{
"webCheckoutDetails": {
"checkoutReviewReturnUrl": "https://a.com/merchant-review-page"
},
"storeId": "amzn1.application-oa2-client.8b5e45312b5248b69eeaStoreId",
"scopes": ["name", "email", "phoneNumber", "billingAddress"],
"chargePermissionType": "Recurring",
"recurringMetadata": {
"frequency": {
"unit": "Month",
"value": "1"
},
"amount": {
"amount": "30",
"currencyCode": "USD"
}
},
"deliverySpecifications": {
"specialRestrictions": ["RestrictPOBoxes"],
"addressRestrictions": {
"type": "Allowed",
"restrictions": {
"US": {
"statesOrRegions": ["WA"],
"zipCodes": ["95050", "93405"]
},
"GB": {
"zipCodes": ["72046", "72047"]
},
"IN": {
"statesOrRegions": ["AP"]
},
"JP": {}
}
}
}
}
名前
|
ロケーション
|
説明
|
webCheckoutDetails (必須) Type: webCheckoutDetails |
Body
|
決済を完了するために使用されるCheckoutSessionに関連付けられたURL。 URLはHTTPSプロトコルを使用する必要があります
|
storeId (必須) Type: string |
Body
|
Amazon Pay Store ID。 Amazon Pay インテグレーションセントラルからこの値を取得します: US, EU, JP
|
scopes Type: list <scope> |
Body
|
リクエストする購入者の詳細情報。手順4のボタンパラメータproductType を使用して、配送先住所が必要かどうかを指定します。サポートされている値:
scopes パラメータが設定されていない場合、請求先住所以外のすべての購入者情報をリクエストしたことになります
|
chargePermissionType Type: string |
Body
|
リクエストされたCharge PermissionのType サポートされている値:
|
recurringMetadata Type: recurringMetadata |
Body
|
RecurringのChargePermissionの使用方法に関するメタデータ。 Amazon Payは、この情報をChargePermissionの有効期限を計算と、購入者とのコミュニケーションにのみ使用します 各請求サイクルで購入者に請求するためにCreate Charge を呼び出すのは、依然として事業者の責任であることに注意してください。 |
deliverySpecifications Type: deliverySpecifications |
Body
|
配送先の制限を指定して、購入者がAmazonアドレス帳からサポートされていないアドレスを選択できないようにします
|
3. ペイロードに署名します
署名を使用してペイロードを保護する必要があります。ペイロードにはタイムスタンプが含まれていないため、ペイロードが変更されない限り、署名を再利用できます。ペイロードを変更する必要があり、ボタンの署名が動的である場合は、ボタンの再レンダリングを回避するために、決済の初期化からボタンのレンダリングを切り離す 必要があります。
オプション1(推奨): Amazon Pay SDKで提供されるヘルパー関数を使用して署名を生成します。このヘルパー関数によって生成された署名は、ボタンに対してのみ有効であり、API リクエストに対しては有効ではありません。
<?php
include 'vendor/autoload.php';
$amazonpay_config = array(
'public_key_id' => 'MY_PUBLIC_KEY_ID',
'private_key' => 'keys/private.pem',
'region' => 'US',
'sandbox' => true
);
$client = new Amazon\Pay\API\Client($amazonpay_config);
$payload = '{"storeId":"amzn1.application-oa2-client.xxxxx","webCheckoutDetails":{"checkoutReviewReturnUrl":"https://example.com/review.html"},"chargePermissionType":"Recurring","recurringMetadata":{"frequency":{ unit":"Month","value":"1"},"amount":{"amount":"30","currencyCode":"USD"}}}';
$signature = $client->generateButtonSignature($payload);
echo $signature . "\n";
?>
var payConfiguration = new ApiConfiguration
(
region: Region.Europe,
environment: Environment.Sandbox,
publicKeyId: "MY_PUBLIC_KEY_ID",
privateKey: "PATH_OR_CONTENT_OF_MY_PRIVATE_KEY"
);
var request = new CreateCheckoutSessionRequest
(
checkoutReviewReturnUrl: "https://example.com/review.html",
storeId: "amzn1.application-oa2-client.xxxxx"
);
request.ChargePermissionType = ChargePermissionType.Recurring;
request.RecurringMetadata.Frequency.Unit = FrequencyUnit.Month;
request.RecurringMetadata.Frequency.Value = 1;
request.RecurringMetadata.Amount.Unit = 99.99M;
request.RecurringMetadata.Amount.CurrencyCode = Currency.EUR;
// generate the button signature
var signature = client.GenerateButtonSignature(request);
// the payload as JSON string that you must assign to the button in the next step
var payload = request.ToJson();
PayConfiguration payConfiguration = null;
try {
payConfiguration = new PayConfiguration()
.setPublicKeyId("YOUR_PUBLIC_KEY_ID")
.setRegion(Region.YOUR_REGION_CODE)
.setPrivateKey("YOUR_PRIVATE_KEY_STRING")
.setEnvironment(Environment.SANDBOX);
}catch (AmazonPayClientException e) {
e.printStackTrace();
}
AmazonPayClient client = new AmazonPayClient(payConfiguration);
String payload = "{\"storeId\":\"amzn1.application-oa2-client.xxxxxx\",\"webCheckoutDetails\":{\"checkoutReviewReturnUrl\":\"https://example.com/review.html\"},\"chargePermissionType\":\"Recurring\",\"recurringMetadata\":{\"frequency\":{\"unit\":\"Month\",\"value\":\"1\"},\"amount\":{\"amount\":\"30\",\"currencyCode\":\"USD\"}}}";
String signature = client.generateButtonSignature(payload);
const fs = require('fs');
const Client = require('@amazonpay/amazon-pay-api-sdk-nodejs');
const config = {
publicKeyId: 'ABC123DEF456XYZ',
privateKey: fs.readFileSync('tst/private.pem'),
region: 'us',
sandbox: true
};
const testPayClient = new Client.AmazonPayClient(config);
const payload = {
"webCheckoutDetails": {
"checkoutReviewReturnUrl": "https://example.com/review.html"
},
"storeId": "amzn1.application-oa2-client.xxxxx",
"chargePermissionType": "Recurring",
"recurringMetadata": {
"frequency": {
"unit": "Month",
"value": "1"
},
"amount": {
"amount": "30",
"currencyCode": "USD"
}
}
};
const signature = testPayClient.generateButtonSignature(payload);
オプション2: 署名リクエストガイドのステップ2と3に従って、手動で署名を作成します。
4. ボタンのレンダー
前の2つの手順の値を使用して、Amazon PayボタンをHTMLコンテナ要素にレンダリングします。ボタンはレスポンシブになり、コンテナ要素のサイズを継承します。詳細については、レスポンシブボタンのロジック を参照してください。
以下のサンプルコードは、ボタンをクリックするとすぐにAmazon Payの決済を開始します。クリックイベントの制御が必要な場合は、ボタンのレンダリングと決済の開始を切り離すことができます。詳細については、 Amazon Payスクリプトを参照してください。
コードサンプル
関数パラメータ
パラメータ
|
説明
|
merchantId (必須) Type: string |
Amazon Pay 事業者アカウント識別子
|
createCheckoutSessionConfig (必須) Type: buttonConfig |
Checkout Session構成を作成します。productType をPayAndShipかPayOnlyで利用する場合、これは必須フィールドです |
placement (必須) Type: string |
ウェブサイトへのAmazon Payボタンの配置場所 サポートされている値:
|
ledgerCurrency (必須) Type: string |
指定された出品者IDの登録時に提供された通貨 サポートされている値:
|
productType Type: string |
決済用に選択されたProduct type サポートされている値:
|
buttonColor Type: string |
Amazon Payボタンの色 サポートされている値: 'Gold', 'LightGray', 'DarkGray' デフォルト値: 'Gold' |
checkoutLanguage Type: string |
Amazon Pay Hosted pageでボタンとテキストをレンダリングするために使用される言語。サポートされている言語は、Amazon Payアカウントの申し込みを行った地域によって異なることに注意してください。 サポートされている値:
|
sandbox Type: boolean |
ボタンをSANDBOXに設定します
デフォルト値: false |