# AdditionalPaymentButton(APB)機能について知りたいです。

AdditionalPaymentButton(APB)機能をご利用いただくと、決済手段の一つとしてAmazon Payをご利用頂けます。APB機能では通常のAmazon Pay機能とは異なり、注文確認画面を挟まずに Amazon Pay で管理する画面からスムーズに支払い完了のフローを構築することができます。

この機能は Onetime(都度支払い)およびRecurring（継続支払い）でご利用頂くことができ、配送の伴う商材・デジタル商材ともにご利用頂くことが可能です。

 **注意：**  配送の伴う商材で当機能を用いた場合は、Amazonアカウントの住所をご利用頂くことができません。事業者様のサイトに入力された住所情報を決済時にAmazon Payにご連携いただく形となります。

## 処理フロー

![image](https://d2squ3eekfa1zc.cloudfront.net/image/QA-66-1.png)

※HTTPステータスコード　2xx 正常系 ベースの処理フローでの記載です。
Amazon Pay APIのレスポンス受信後、HTTPステータスコードが正常系であることを確認後に、処理フローへ進むよう実装してください。

## ご利用方法
ボタン描画時のPayloadに下記サンプルのように"checkoutMode": "ProcessOrder"、金額、住所情報(配送を伴う商材の場合)、継続支払い情報（Recurringの場合）を設定頂くことで、ご利用頂けます。設定項目についてはの詳細はインテグレーションガイドを参照してください。


```
{
    "storeId": "xxx",
    "webCheckoutDetails": {
        "checkoutResultReturnUrl": "https://merchant1/xxxxxxxx",
        "checkoutMode": "ProcessOrder"
    },
    "paymentDetails": {
        "paymentIntent": "Confirm",
        "chargeAmount": {
            "amount": "1",
            "currencyCode": "JPY"
        }
    },
    //recurring case
    "chargePermissionType": "Recurring", 
    "recurringMetadata": {
        "frequency": { 
            "unit": "Month", 
            "value": "1" 
        },
        "amount": { 
            "amount": "10",
            "currencyCode": "JPY"
        }
    },
    "addressDetails": {
        "stateOrRegion":"%E6%9D%B1%E4%BA%AC%E9%83%BD",
        "addressLine1": "%E7%9B%AE%E9%BB%92%E5%8C%BA%E4%B8%8B%E7%9B%AE%E9%BB%92",
        "addressLine2": "%EF%BC%91%EF%BC%8D%EF%BC%94%EF%BC%8D%EF%BC%91",
        "addressLine3": "%E3%82%A2%E3%83%89%E3%83%AC%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%B3%EF%BC%93",
        "name": "%E5%90%8D%E5%89%8D%E3%80%80%E3%83%86%E3%82%B9%E3%83%88%EF%BC%91%EF%BC%92%EF%BC%93",
        "countryCode": "JP",
        "postalCode": "1560064",
        "phoneNumber": "0333333333"
    }
}
```

## 住所情報(addressDetails)に関する補足
・住所情報の設定必須項目については、 [インテグレーションガイド](https://developer.amazon.com/ja/docs/amazon-pay-checkout/address-formatting-and-validation.html) をご参照ください。
・各項目の最大桁については、下部インテグレーションガイドをご参照ください。
・マルチバイト文字列を設定する場合は、UTF-8のURLエンコードを行い、設定する必要があります。(全角数字、全角アルファベットもご利用頂けます。)
・マルチバイト文字列ご利用時の留意点は以下のとおりです。
　1.郵便番号に6文字以上のマルチバイト文字を設定した場合、自動的にシングルバイトに変換されます。
　2.住所１、２、３に20文字以上のマルチバイト文字を設定した場合、自動的にシングルバイトに変換されます。
　3.氏名に16文字以上のマルチバイト文字を設定した場合、自動的にシングルバイトに変換されます。
　4.電話番号にマルチバイト文字を設定した場合、自動的にシングルバイトに変換されます。

## PlatformIdをご利用の場合

APBのフローにはUpdateCheckoutSessionを実行しないため、
2 step checkoutと同じくUpdateCheckoutSession時にPlatformIdを設定することができません。
ただし、Payloadの一部としてご設定いただけます。（設定後、GetCheckoutSessionに設定結果の確認ができます。）

Payloadの例：

```
{
    "storeId":"xxx",
    "webCheckoutDetails":{
        "checkoutResultReturnUrl":"https://merchant1/xxxxxxxx",
        "checkoutMode": "ProcessOrder"
    },
    "paymentDetails":{
        "paymentIntent":"Authorize",
        "chargeAmount":{
            "amount":"1000",
            "currencyCode":"JPY"
            }
        },
    "platformId":"XXXXX"
};
```

## その他ご注意点
* 配送の伴う商材でAPB機能を用いた場合は、productTypeに`PayAndShip`を設定し、決済時に事業者様のサイトからAmazon Payに購入者の配送先住所を連携することで、[支払い保証ポリシー](https://www.amazonpay-faq.jp/faq/QA-672)の対象となります。

## 参考
* [インテグレーションガイド OneTime](https://developer.amazon.com/ja/docs/amazon-pay-apb-checkout/get-set-up-for-integration.html)

* [インテグレーションガイド Recurring](https://developer.amazon.com/docs/amazon-pay-recurring-apb-checkout/get-set-up-for-integration.html)