# OneTimeからRecurringへアップグレードするにはどうしたらよいですか？

アップセルのユースケースなど向けに、OneTimeからRecurringへ決済の途中および終了後にOneTimeで作成したCheckoutSessionおよびChargePermissionオブジェクトをRecurringに更新することが可能です。

# 決済の途中での更新

## 処理フロー

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

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

※checkoutResultReturnUrl後に表示されるAmazon Hosted Page上では住所情報は表示されません。

## ご利用方法
UpdateCheckoutSessionのリクエスに以下のようにchargePermissionType、recurringMetadataを追加してコールし、取得したcheckoutResultReturnUrlへリダイレクトしてください。設定項目についての詳細はインテグレーションガイドを参照してください。


```
{
    "chargePermissionType": "Recurring",   
    "recurringMetadata": {
        "frequency": { 
            "unit": "Month", 
            "value": "1" 
        },
        "amount": { 
            "amount": "30",
            "currencyCode": "USD"
        }
    }
}
```

# 決済の終了後からの更新

![image](https://d2squ3eekfa1zc.cloudfront.net/image/QA-490-2.jpg)

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

※checkoutResultReturnUrl後に表示されるAmazon Hosted Page上では住所情報は表示されません。

※指定されたOneTimeのChargePermissionは当処理を経ても、何も影響はございません。

## ご利用方法
以下のようなPayloadを作成し、そのSignatgure。そしてbindUpgradeActionを呼び出し、Amazon Hosted Pageへ遷移させます。設定項目についての詳細はインテグレーションガイドを参照してください。


```
{  
    "merchantId":"merchant_id",
    "storeId":"amzn1.application-oa2-client.8b5e45312b5248b69eeaStoreId",
    "ledgerCurrency": "JPY",
    "chargePermissionType": "Recurring", 
    "chargePermissionId":"charge_permission_id",
    "webCheckoutDetails": {
        "checkoutResultReturnUrl":"https://a.com/merchant-result-page"
    },
    "productType": "PayAndShip",
    "paymentDetails": {
        "paymentIntent": "Confirm",
        "chargeAmount": {
            "amount": "10",
            "currencyCode": "JPY"
        }
    },
    "recurringMetadata": {
        "frequency": { 
            "unit": "Month", 
            "value": "1" 
        },
        "amount": { 
            "amount": "10",
            "currencyCode": "JPY"
        }
    },
    "scopes": ["name", "email", "phoneNumber", "billingAddress"]
}   
```

```
<script type="text/javascript" charset="utf-8">
  amazon.Pay.bindUpgradeAction('#changeButton1', {
    payloadJSON: 'payload', // string generated in step 2
    signature: 'xxxx', // signature generated in step 3 
    publicKeyId: 'xxxxxxxxxx',
    upgradeAction: 'recurringUpgrade'
  });
</script>
  
```


## 参考
* [インテグレーションガイド](https://developer.amazon.com/ja/docs/amazon-pay-checkout/upgrading-from-onetime-to-recurring.html)