ハッシュアルゴリズム"AMZN-PAY-RSASSA-PSS-V2"のサポートについて
Amazon Payの署名リクエストでは、従来からSHA256ハッシュとソルト長20のRSASSA-PSSアルゴリズムを使用する"AMZN-PAY-RSASSA-PSS"を固定の設定値で利用いただいておりましたが、ソルト長32を使用した"AMZN-PAY-RSASSA-PSS-V2"の指定もサポートされました。
従来からソルト長20を利用されている事業者様がソルト長32に変更する必要はございませんが、新規で実装される事業者様は、ソルト長32を指定いただけますのでご利用ください。
弊社SDKでは、後方互換を保つため未設定の場合は従来通り"AMZN-PAY-RSASSA-PSS"となります。
なお、両者の設定において、原則的にAPI実行時やボタン押下時のパフォーマンス、挙動には影響を与えませんが、Salesforce Cloudのような一部のプラットフォームではソルト長20の署名生成がサポートされていませんので、その場合はソルト長32の指定を推奨いたします。
AMZN-PAY-RSASSA-PSS-V2の利用方法
Signature作成時の指定
SDKを利用する場合
構成パラメーター'algorithm'に該当する項目を'AMZN-PAY-RSASSA-PSS-V2'に設定します。
下記はPHP SDKの例です。設定方法は各種SDKを確認してください。
<?php
include 'vendor/autoload.php';
$amazonpay_config = array(
'public_key_id' => 'MY_PUBLIC_KEY_ID',
'private_key' => 'keys/private.pem',
'region' => 'JP',
'sandbox' => true,
'algorithm' => 'AMZN-PAY-RSASSA-PSS-V2'
);
$client = new Amazon\Pay\API\Client($amazonpay_config);
$payload = '{"storeId":"amzn1.application-oa2-client.xxxxx","webCheckoutDetails":{"checkoutReviewReturnUrl":"https://example.com/review.html"}}';
$signature = $client->generateButtonSignature($payload);
echo $signature . "\n";
?>
SDKを利用しない場合
SDKを利用しない場合は、「署名リクエスト」の手順中、2箇所読み替えてください。
https://developer.amazon.com/ja/docs/amazon-pay-api-v2/signing-requests.html
1箇所目:
「ステップ2. 署名する文字列を作成します」中の、下記の手順を'AMZN-PAY-RSASSA-PSS'から'AMZN-PAY-RSASSA-PSS-V2'に読み替えます。
- アルゴリズムの指定から始めて、改行文字を続けます。この値は、正規リクエストのダイジェストを計算するために使用するハッシュアルゴリズムです。
AMZN-PAY-RSASSA-PSS-V2
2箇所目:
「ステップ3. 署名を計算します」中の、「ソルト長20」を「ソルト長32」に読み替えます。
Amazon Payボタンスクリプトの指定
createCheckoutSessionConfigまたはsignInConfig(Signin機能の場合)のalgorithmに'AMZN-PAY-RSASSA-PSS-V2'を指定する
<body>
<div id="AmazonPayButton"></div>
<script src="https://static-fe.payments-amazon.com/checkout.js"></script>
<script type="text/javascript" charset="utf-8">
amazon.Pay.renderButton('#AmazonPayButton', {
// set checkout environment
merchantId: 'merchant_id',
ledgerCurrency: 'JPY',
sandbox: true,
// customize the buyer experience
checkoutLanguage: 'ja_JP',
productType: 'PayAndShip',
placement: 'Cart',
buttonColor: 'Gold',
// configure Create Checkout Session request
createCheckoutSessionConfig: {
payloadJSON: 'payload', // string generated in step 2
signature: 'xxxx', // signature generated in step 3
publicKeyId: 'xxxxxxxxxx',
algorithm : 'AMZN-PAY-RSASSA-PSS-V2'
}
});
</script>
</body>
補足
- ハッシュアルゴリズム"AMZN-PAY-RSASSA-PSS-V2"の指定は、各々に配置するボタンのスクリプト実装、個別APIの実行で個別に評価されます。
実装される環境で統一する必要はありませんので、例えば、既に"AMZN-PAY-RSASSA-PSS"指定で実装したボタンがある環境で、後続のAPIのみを"AMZN-PAY-RSASSA-PSS-V2"を指定(または、その逆)しても問題ありません。 - Amazon Payボタンスクリプトの指定とボタン用に生成したSignature作成時の指定に乖離がある場合はエラーとなります。