StripeではユーザーのIPアドレスなどの情報を元に、現地の通貨で決済ができる Adaptive Pricingという機能が用意されています。これを Stripe Checkout でサブスクリプション提供フローを提供しているケースにて実装する方法を紹介します。
curlで簡単に作成してみる
Stripe Checkout での Adaptive Pricing対応はとても簡単です。作成時のAPIリクエストパラメータにadaptive_pricing[enabled]=true を追加するだけで、その Checkout Session は訪問者の利用したい通貨での決済やサブスクリプション申し込みに対応します。

curlで試してみる方法
以下の curl を試してみてください。 APIキー・Priceの2つは試すStripeアカウントの情報を設定します。なお、日本のStripeアカウントの場合、Priceは日本円で作成されたものを利用してください。
curl https://api.stripe.com/v1/checkout/sessions \
-u sk_test_YOUR_KEY: \
-d "line_items[0][price]=price_YOUR_JPY_PRICE_ID" \
-d "line_items[0][quantity]=1" \
-d "mode=subscription" \
-d "adaptive_pricing[enabled]=true" \
-d "success_url=https://yourwebsite.com/success?session_id={CHECKOUT_SESSION_ID}" \
-d "cancel_url=https://yourwebsite.com/cancel" \
--data-urlencode "customer_email=test+location_US@example.com"
customer_emailで地域ごとシミュレーション
customer_email に test+location_US@example.com を渡すことで、アメリカからアクセスした場合の表示をシミュレートできます。国コードの部分を変えれば他の国もテストできます。ちなみにPayment Links の場合は URL パラメータ(prefilled_email)をつかうことでテストできます。Checkout Sessions の場合は、 customer_email フィールドですので、取り違えに注意しましょう。
複数商品でも動く
line_items に複数の Price を渡しても、合算した金額が現地通貨で表示されます。
curl https://api.stripe.com/v1/checkout/sessions \
-u sk_test_YOUR_KEY: \
-d "line_items[0][price]=price_YOUR_JPY_PRICE_ID_1" \
-d "line_items[0][quantity]=1" \
-d "line_items[1][price]=price_YOUR_JPY_PRICE_ID_2" \
-d "line_items[1][quantity]=1" \
-d "mode=subscription" \
-d "adaptive_pricing[enabled]=true" \
-d "success_url=https://yourwebsite.com/success?session_id={CHECKOUT_SESSION_ID}" \
-d "cancel_url=https://yourwebsite.com/cancel" \
--data-urlencode "customer_email=test+location_US@example.com"
各商品の USD 換算額が個別に表示され、合計も USD で表示されます。

Webhook で確認できること
決済完了後、checkout.session.completed イベントに presentment_details が付きます。
{
"type": "checkout.session.completed",
"data": {
"object": {
"currency": "jpy",
"amount_total": 1000,
"presentment_details": {
"presentment_amount": 649,
"presentment_currency": "usd"
}
}
}
}
currency と amount_total は常に JPY(基準通貨)で記録されます。顧客が USD を選んで支払った場合、presentment_details に表示された通貨と金額が入ります。売上管理で「何 USD で表示・請求したか」を記録したい場合はこのフィールドを参照します。
まとめ
adaptive_pricing[enabled]=true を渡すだけで subscription mode の Checkout Sessions でも Adaptive Pricing が動きます。JPY の Price を用意する点は Payment Links と同じです。
複数商品の合算表示も、通貨切り替え UI の自動表示も、追加実装なしで動きます。海外展開のための通貨対応に、新たに USD 料金を作って管理する手間はかかりません。
Payment Links でデモを確認し、Checkout Sessions で本番に組み込む。この2ステップで、JPY の既存サブスクをそのまま世界に出せます。
