Amazon Pay の請求者住所
Amazon Payで請求者住所を取得できるようになりました。
(1)PayAndShipなどのボタン描画用のpayloadを作ります。このpayloadを作るとき、scopeにbillingAddressを指定します。
{
"webCheckoutDetails": {
"checkoutReviewReturnUrl": "https://a.com/merchant-review-page"
},
"storeId": "amzn1.application-oa2-client.8b5e45312b5248b69eeaStoreId",
"scopes": ["name", "email", "phoneNumber", "billingAddress"],
"deliverySpecifications": {
"specialRestrictions": ["RestrictPOBoxes"],
"addressRestrictions": {
"type": "Allowed",
"restrictions": {
"US": {
"statesOrRegions": ["WA"],
"zipCodes": ["95050", "93405"]
},
"GB": {
"zipCodes": ["72046", "72047"]
},
"IN": {
"statesOrRegions": ["AP"]
},
"JP": {}
}
}
}
}
Code language: JSON / JSON with Comments (json)
このjsonのcheckoutReviewReturnUrlがコールバックURLです。本番環境、ステージング環境、開発環境など、ホストURLが違うので、それぞれのURLごとに、payloadを用意する必要があり、少々面倒です。
(2)あらかじめターミナルで、payload用のsignature(署名)を作ります。Amazon Pay の API を叩いて返ってくるまで、約1秒かかりました。
(3)payloadとsignatureをボタン描画用のjavascriptに記述します。
payloadとsignatureはgitにcommitしてもいいの?
問題ないわ
秘密鍵はgitにcommitしてもいいの?
ブッブー、だめよ
gitにcommitするときは、パスフレーズ付きにしてね
billingAddressがnullになるときとは?
checkoutSessionのresponseをjsonデコードします。
キー | 説明 |
---|---|
paymentPreferences | 支払い方法 |
billingAddress | 請求者情報 |
shippingAddress | 届け先情報 |
これまで、ECサイト側では、注文者情報、お届け先情報どちらもshippingAddress から取得していました。
これで、EC2サイト側の注文者情報をbillingAddressから取得できるようになりました。
ところが、billingAddress が null で返ってくる場合があります。
Amazonアカウントにクレジットカード登録がなく、Amazonギフト券しかない場合、
billingAddress に null が返ってきました。
セラーセントラルのSandbox用アカウントでは、この「クレジットカード登録がなく、Amazonギフト券のみ」に設定する方法が見つかりませんでした。
ふだん使っている本物のAmazonアカウントで試すことにしました。
(1)まず、Amazonアカウントに、Amazonギフト券をチャージしておきます。クレジットカードで購入するのが簡単です。
購入してもすぐにチャージされないので、数分待って、チャージされたことを確認します。
(2)次に、Amazonアカウントのクレジットカード情報を全て削除します。すでに購入済みの商品には影響しません。
すると、このAmazonアカウントは、支払い方法がAmazonギフト券だけとなります。
(3)ECサイトの開発環境で、本番用のPayAndShipボタンを表示するようにします。これが少々手間です。sandboxフラグをfalseにして、payload、signatrueを作り、しかるべきファイルにコピペします。
デバッガーを有効にします。
(4)ECサイトで商品をカートにいれて、PayAndShipボタンをクリックします。Amazonギフト券だけとなったAmazonアカウントでログインします。
(5)PhpStormのデバッガーで見ていると、billingAddressがnullでした。
クレジットカードに請求しないから、かしらね。
(6)開発環境のPayAndShipボタンのpayload、signatureを元に戻しておきます。
billingAddressのnullチェックは忘れないようにね