# ステーブルコイン支払いによるサブスクリプションを設定する
ステーブルコインを使用したサブスクリプションの作成と支払いの方法をご紹介します。
このガイドを使用して、顧客の暗号資産ウォレットから *ステーブルコイン* (A cryptocurrency that's pegged to the value of a fiat currency or other asset in order to limit volatility) の継続支払いを引き出す *サブスクリプション* (A Subscription represents the product details associated with the plan that your customer subscribes to. Allows you to charge the customer on a recurring basis) を設定します。
# Stripe ホスト型ページ
> This is a Stripe ホスト型ページ for when api-integration is checkout. View the full page at https://docs.stripe.com/billing/subscriptions/stablecoins?api-integration=checkout.
## 商品と価格を作成する [ダッシュボード]
[Products (商品)](https://docs.stripe.com/api/products.md) は、販売しているアイテムまたはサービスを表します。[Prices (価格)](https://docs.stripe.com/api/prices.md) は、商品の価格と請求頻度を定義します。これには、商品の価格、受け付ける通貨、および 1 回限りの支払いか継続支払いかが含まれます。商品と価格が数個のみの場合は、ダッシュボードでそれらを作成および管理します。
このガイドでは、例としてストックフォトサービスを使用し、15 USD の月次サブスクリプションを顧客に請求します。これをモデル化するには、次のようにします。
1. [商品](https://dashboard.stripe.com/products?active=true)ページに移動し、**商品を作成**をクリックします。
1. 商品の**名前**を入力します。オプションで**説明**を追加して、商品の画像をアップロードできます。
1. **商品税コード**を選択します。[商品税コード](https://docs.stripe.com/tax/tax-codes.md)の詳細をご確認ください。
1. **継続**を選択します。次に、価格に**15**を入力し、通貨として**\**を選択します。
1. **価格に税金を含める**かどうかを選択します。[税金設定](https://dashboard.stripe.com/test/settings/tax)のデフォルト値を使用するか、値を手動で設定できます。この例では、**自動**を選択します。
1. **請求期間**で**月次**を選択します。
1. **その他の料金体系オプション**をクリックします。次に、この例の料金体系モデルとして**定額**を選択します。[定額料金](https://docs.stripe.com/products-prices/pricing-models.md#flat-rate)とその他の[料金体系モデル](https://docs.stripe.com/products-prices/pricing-models.md)の詳細をご確認ください。
1. 将来的に特定の価格を整理、クエリ、更新するために、内部**価格の説明**と[検索キー](https://docs.stripe.com/products-prices/manage-prices.md#lookup-keys) 追加します。
1. **次へ**をクリックします。次に、**商品を追加**をクリックします。
商品と価格を作成したら、価格 ID を記録しておき、後続のステップで使用できるようにします。ID は料金体系ページで `price_G0FvDp6vZvdwRZ` のように表示されます。
## Checkout Session を作成 [サーバー側]
顧客は、今後の Stripe を介した決済に暗号資産ウォレットを使用することをお客様に承認する必要があります。
サーバー側のエンドポイントを呼び出す決済ボタンをウェブサイトに追加して [Checkout Session (セッション)](https://docs.stripe.com/api/checkout/sessions.md) を作成します。
```html
Checkout
```
`subscription` モードで Checkout セッションを作成して、必要な情報を収集します。Checkout セッションを作成したら、レスポンスで返される [URL](https://docs.stripe.com/api/checkout/sessions/object.md#checkout_session_object-url) に顧客をリダイレクトします。
```curl
curl https://api.stripe.com/v1/checkout/sessions \
-u "<>:" \
--data-urlencode "success_url=https://example.com/success" \
-d "line_items[0][price]={{RECURRING_PRICE_ID}}" \
-d "line_items[0][quantity]=1" \
-d "payment_method_types[0]=crypto" \
-d mode=subscription
```
## 支払いが成功したことを確認する
顧客は支払いを完了すると、`success_url` パラメータで指定された URL にリダイレクトされます。通常、これはお客様の Web サイト上にある、支払いが成功したことを顧客に知らせるページです。
決済が成功すると、基になる *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) のステータスが `processing` から `succeeded` に変わります。
次のように、複数の方法で支払いが成功したことを確認できます。
#### ダッシュボード
成功した決済は、ダッシュボードの [決済の一覧](https://dashboard.stripe.com/payments) に表示されます。決済をクリックすると、その決済の詳細ページに移動します。**決済サマリー** セクションには、Billing 情報と購入された項目の一覧が含まれ、これを使用して手動で注文のフルフィルメントを実行できます。

> Stripe は顧客が支払いに成功するたびにお客様にメール通知を送信し、今後受領する支払いの最新情報を把握できるようサポートします。ダッシュボードを使用して[メール通知を設定](https://dashboard.stripe.com/settings/user)します。
#### Webhook
決済のステータスに変化があると、以下の決済イベントが送信されます。
| イベント名 | 説明 | 次のステップ |
| ---------------------------------------------------------------------------------------------------------------- | ------------------------------------ | -------------------------------- |
| [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) | 顧客が Checkout フォームを送信して、決済を正常に承認しました。 | 決済の成功または失敗の結果を待ちます。 |
| [invoice.paid](https://docs.stripe.com/api/events/types.md#event_types-invoice.paid) | 顧客の決済が成功しました。 | 顧客が購入した商品またはサービスのフルフィルメントを行います。 |
| [invoice.payment_failed](https://docs.stripe.com/api/events/types.md#event_types-invoice.payment_failed) | 何らかの理由により顧客の支払いが拒否されたか、失敗しました。 | 顧客にメールをして、決済をもう一度試みるようにリクエストします。 |
Webhook コードでこれらの決済イベントのすべてを処理する必要があります。
各 Checkout Webhook のペイロードには [Checkout Session オブジェクト](https://docs.stripe.com/api/checkout/sessions.md) が含まれ、インボイスの Webhook には [Invoice (インボイス)](https://docs.stripe.com/api/invoices/object.md) オブジェクトが含まれます。この両方に、*Customer* (Customer objects represent customers of your business. They let you reuse payment methods and give you the ability to track multiple payments) および *PaymentIntent* (The Payment Intents API tracks the lifecycle of a customer checkout flow and triggers additional authentication steps when required by regulatory mandates, custom Radar fraud rules, or redirect-based payment methods) に関する情報が含まれます。
顧客がリダイレクトされる前に、Stripe から `checkout.session.completed` Webhook がお客様のサーバーに送信されます。Webhook の確認応答 (任意の `2xx` ステータスコード) によって、`success_url` への顧客のリダイレクトが開始されます。支払いに成功してから 10 秒以内に Stripe が成功確認応答を受け取らなかった場合、顧客は自動的に `success_url` ページにリダイレクトされます。
[Webhook を使用](https://docs.stripe.com/webhooks.md)して支払いの成功を確認し、顧客が購入した商品やサービスのフルフィルメントを行うことをお勧めします。以下は、支払いの成功または失敗を処理する Webhook エンドポイントの例です。
#### Ruby
```ruby
# Don't put any keys in code. See https://docs.stripe.com/keys-best-practices.
# Find your keys at https://dashboard.stripe.com/apikeys.
client = Stripe::StripeClient.new('<>')
# You can find your endpoint's secret in your webhook settings
endpoint_secret = 'whsec_...'
# Using Sinatra
post '/webhook' do
payload = request.body.read
event = nil
# Verify webhook signature and extract the event
# See https://stripe.com/docs/webhooks#verify-events for more information.
sig_header = request.env['HTTP_STRIPE_SIGNATURE']
begin
event = Stripe::Webhook.construct_event(
payload, sig_header, endpoint_secret
)
rescue JSON::ParserError => e
# Invalid payload
status 400
return
rescue Stripe::SignatureVerificationError => e
# Invalid signature
status 400
return
end
case event['type']
when 'checkout.session.completed'
session = event['data']['object']
subscription_id = session.subscription
# Find the subscription or save it to your database.
# invoice.paid may have fired before this so there
# could already be a subscription.
find_or_create_subscription(subscription_id)
when 'invoice.paid'
invoice = event['data']['object']
subscription_id = invoice.parent.subscription_details.subscription
# Find the subscription or save it to your database.
# checkout.session.completed may not have fired yet
# so we may need to create the subscription.
subscription = find_or_create_subscription(subscription_id)
# Fulfill the purchase
fulfill_order(invoice)
# Record that the subscription has been paid for
# this payment period. invoice.paid will fire every
# time there is a payment made for this subscription.
record_as_paid_for_this_period(subscription)
when 'invoice.payment_failed'
invoice = event['data']['object']
# Send an email to the customer asking them to retry their payment
email_customer_about_failed_payment(invoice)
end
status 200
end
```
顧客、決済、またはサブスクリプションに関する情報を取得するには、Webhook のペイロードの `customer`、`payment_intent`、および `subscription` のプロパティによって参照される `Customer`、`PaymentIntent`、または `Subscription` のオブジェクトを取得します。
### Webhook からラインアイテムを取得する
デフォルトでは、Checkout Webhook は `line_items` を返しません。Checkout セッションで作成されたアイテムを取得するには、Checkout セッション ID を使用して追加のリクエストを行います。
#### curl
```bash
curl https://api.stripe.com/v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items \
-u <>:
```
#### Stripe CLI
```bash
stripe get /v1/checkout/sessions/{{CHECKOUT_SESSION_ID}}/line_items
```
### Webhook をローカルでテストする
Webhook をローカルでテストするには、[Stripe CLI](https://docs.stripe.com/stripe-cli.md) を使用できます。Stripe CLI をインストールすると、サーバーにイベントを転送できるようになります。
```bash
stripe listen --forward-to localhost:4242/webhook
Ready! Your webhook signing secret is '{{WEBHOOK_SIGNING_SECRET}}' (^C to quit)
```
[Webhook の設定](https://docs.stripe.com/webhooks.md) についてもっと知る。
#### サードパーティのプラグイン
[Zapier](https://stripe.com/works-with/zapier) などのプラグインを使用すると、Stripe の決済からの情報を利用して購入のフルフィルメントシステムを自動更新できます。
プラグインで対応可能な自動化の例の一部を以下に挙げます。
- 支払いの成功に対応して、注文の追跡に使用されるスプレッドシートを更新する
- 支払いの成功に対応して、在庫管理システムを更新する
- メールまたはチャットアプリケーションを使用して、社内のカスタマーサービスチームへの通知を開始する
## 導入をテストする
テスト API キーを使用して決済リダイレクトページを開き、暗号資産決済統合をテストします。[テストネットアセット](https://docs.stripe.com/billing/subscriptions/stablecoins.md#testnet-assets) を使用して、決済フローの成功を無料でテストできます。
1. *サンドボックス* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)で、選択した統合方法を使用して新しいトランザクションを作成し、そのリダイレクト URL を開きます。
1. 任意のウォレットと決済ネットワークを接続します。
1. 決済を完了し、想定する URL にリダイレクトされることを確認します。
### テストネットアセットで決済をテストする
ほとんどの暗号資産は、ブロックチェーントランザクションのテストに使用できるテストネットアセット (金銭的価値のないトークン) を提供しています。Stripe は、テストに MetaMask ウォレット、Polygon Amoy テストネット、Circle Faucet を推奨していますが、独自のサービスを使用することもできます。
#### ウォレットをインストールする
1. Web ブラウザ用の [MetaMask 拡張機能をダウンロード](https://metamask.io/download) します。
1. [新しいウォレットを作成](https://support.metamask.io/start/creating-a-new-wallet/) するか、[既存のウォレットをインポート](https://support.metamask.io/start/use-an-existing-wallet/) します。
#### テストネットを有効にする
1. MetaMask ウォレットで、メインメニューから**ネットワーク**を選択します。
1. **カスタムネットワークを追加**をクリックします。
1. 次の詳細を入力します。
- **ネットワーク名**: `Amoy`
- **デフォルトの RPC URL**: `https://rpc-amoy.polygon.technology/`
- **チェーン ID**: `80002`
- **通貨シンボル**: `POL`
- **ブロックエクスプローラーの URL**: `https://amoy.polygonscan.com/`
1. **保存** をクリックします。
#### トークンをインポートする
1. MetaMask ウォレットの**トークン**で、ネットワークドロップダウンから **Amoy** を選択します。
1. オーバーフローメニュー (⋯) をクリックし、**トークンのインポート**を選択します。
1. **ネットワークを選択** > **Amoy** をクリックします。
1. **トークンコントラクトアドレス**に、Polygon Amoy のテストネットコントラクトアドレスを貼り付けます。
```
0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582
```
**トークンシンボル**フィールドは `USDC` で自動的に更新され、**小数点以下桁数**フィールドは `6` で更新されます。
1. **次へ** をクリックします。
1. `USDC` トークンをインポートしていることを確認し、**インポート**をクリックします。
MetaMask ウォレットのトークンリストに **POL** と **USDC** が表示されるようになりました。
返金をテストする際、ウォレットに送信されるトークンの契約が、決済に使用されるものとは異なることがあります。ブロックエクスプローラーで返金したトークンの [transaction_hash](https://docs.stripe.com/api/refunds/object.md?rds=1#refund_object-destination_details-crypto-reference) を確認し、そのトークンの契約をウォレットに追加することをお勧めします。たとえば、Sepolia ETH USDC 返金の `0x58277ebcabbe2a6694fbca8daf9e23163dbacf3e` トークンの契約アドレスを確認できます。
#### テストネットアセットを取得する
> 一部のテストネットのフォーセットを使用するには、少量のメインネットトークンを保有する必要がある場合があります。
1. [faucet.circle.com](https://faucet.circle.com/) を開きます
1. **USDC** をクリックします。
1. **ネットワーク**で、**Polygon PoS Amoy** を選択します。
1. **送信先**にウォレットアドレスを貼り付けます。
1. **20 USDC を送金**をクリックします。
決済を行うための USDC に加えて、トランザクションコストを支払うための POL が必要です。
1. [faucet.polygon.technology](https://faucet.polygon.technology/) を開きます。
1. **チェーンとトークンの選択**で、**Polygon Amoy** と **POL** を選択します。
1. **本人確認**で、認証に使用するサードパーティプラットフォームをクリックし、ログインプロセスを完了します。
1. **ウォレットアドレスの入力**に、ウォレットアドレスを貼り付けます。
1. **Claim** をクリックします。
テストネットトランザクションの完了には数分かかる場合があります。ウォレットを確認して、USDC と POL が送金されたことを確認してください。
### その他のテストネット Faucet
より多くのテストトークンオプションについては、次の Faucet サービスを確認してください。
- [Paxos USDP](https://faucet.paxos.com/)
- [Devnet SOL](https://faucet.solana.com/)
- [Sepolia ETH](https://faucets.chain.link/sepolia)
- [Amoy POL](https://faucet.polygon.technology/)
# Payment Intents API
> This is a Payment Intents API for when api-integration is paymentintents. View the full page at https://docs.stripe.com/billing/subscriptions/stablecoins?api-integration=paymentintents.
## 商品と価格を作成する [ダッシュボード]
[Products (商品)](https://docs.stripe.com/api/products.md) は、販売しているアイテムまたはサービスを表します。[Prices (価格)](https://docs.stripe.com/api/prices.md) は、商品の価格と請求頻度を定義します。これには、商品の価格、受け付ける通貨、および 1 回限りの支払いか継続支払いかが含まれます。商品と価格が数個のみの場合は、ダッシュボードでそれらを作成および管理します。
このガイドでは、例としてストックフォトサービスを使用し、15 USDC の月次サブスクリプションを顧客に請求します。これをモデル化するには、次のようにします。
1. [商品](https://dashboard.stripe.com/products?active=true)ページに移動し、**商品を作成**をクリックします。
1. 商品の**名前**を入力します。オプションで**説明**を追加して、商品の画像をアップロードできます。
1. **商品税コード**を選択します。[商品税コード](https://docs.stripe.com/tax/tax-codes.md)の詳細をご確認ください。
1. **継続**を選択します。次に、価格に**15**を入力し、通貨として**\**を選択します。
1. **価格に税金を含める**かどうかを選択します。[税金設定](https://dashboard.stripe.com/test/settings/tax)のデフォルト値を使用するか、値を手動で設定できます。この例では、**自動**を選択します。
1. **請求期間**で**月次**を選択します。
1. **その他の料金体系オプション**をクリックします。次に、この例の料金体系モデルとして**定額**を選択します。[定額料金](https://docs.stripe.com/products-prices/pricing-models.md#flat-rate)とその他の[料金体系モデル](https://docs.stripe.com/products-prices/pricing-models.md)の詳細をご確認ください。
1. 将来的に特定の価格を整理、クエリ、更新するために、内部**価格の説明**と[検索キー](https://docs.stripe.com/products-prices/manage-prices.md#lookup-keys) 追加します。
1. **次へ**をクリックします。次に、**商品を追加**をクリックします。
商品と価格を作成したら、価格 ID を記録しておき、後続のステップで使用できるようにします。ID は料金体系ページで `price_G0FvDp6vZvdwRZ` のように表示されます。
## サブスクリプションを作成する [サーバー側]
価格と顧客を指定してサブスクリプションを作成します。[payment_behavior](https://docs.stripe.com/api/subscriptions/create.md#create_subscription-payment_behavior) 値を `default_incomplete` に設定し、ユーザーが支払いを完了するまでサブスクリプションのステータスが `incomplete` のままになるようにします。サブスクリプションが有効化されたら、`payment_settings.save_default_payment_method` パラメーターを `on_subscription` に設定し、支払い方法を保存します。
```curl
curl https://api.stripe.com/v1/subscriptions \
-u "<>:" \
-d customer={{CUSTOMER_ID}} \
-d payment_behavior=default_incomplete \
-d "items[0][price]={{PRICE_ID}}" \
-d "payment_settings[save_default_payment_method]=on_subscription" \
-d "payment_settings[payment_method_types][0]=crypto" \
-d "expand[0]=latest_invoice.payments" \
-d "expand[1]=latest_invoice.confirmation_secret"
```
API レスポンスには、サブスクリプションの最初の [Invoice](https://docs.stripe.com/api/invoices.md) が含まれます。次のステップでサブスクリプションを確定するには、`latest_invoice.payments` に含まれる PaymentIntent ID を使用します。
## PaymentIntent を作成する [サーバー側]
[Payment Intents API](https://docs.stripe.com/api/payment_intents.md) を呼び出して支払いを開始します。前のステップで Subscriptions API から返された PaymentIntents ID に `payment_intents_id` の値を設定します。`payment_method_types` パラメーターの値を `crypto` に設定します。
```curl
curl https://api.stripe.com/v1/payment_intents/:id/confirm \
-u "<>:" \
-d "payment_method_data[type]=crypto" \
--data-urlencode "return_url=https://www.example.com" \
-d "mandate_data[customer_acceptance][type]=online" \
-d "mandate_data[customer_acceptance][online][ip_address]=127.0.0.0" \
-d "mandate_data[customer_acceptance][online][user_agent]=device" \
-d "mandate_data[customer_acceptance][accepted_at]=1660000000"
```
API レスポンスオブジェクトには、ステータス `requires_action` とリダイレクト URL が [next_action.redirect_to_url.url](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-next_action-redirect_to_url-url) に含まれています。顧客をこの URL にリダイレクトして、サブスクリプションの支払い設定を完了します。顧客は決済フローを完了すると、指定した [return_url](https://docs.stripe.com/api/payment_intents/create.md#create_setup_intent-return_url) にリダイレクトされて戻ります。
## 支払い後のイベントを処理する
支払いが完了すると、Stripe は [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) イベントを送信します。ダッシュボード、カスタム *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)、またはパートナーソリューションを使用してこれらのイベントを受信し、また、顧客への注文確認メールの送信、データベースでの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアント側では、コールバックが実行される前に顧客がブラウザーのウィンドウを閉じたり、アプリを終了したりする可能性があります。また、悪意を持つクライアントがレスポンスを不正操作する恐れもあります。非同期型のイベントをリッスンするよう構築済みのシステムを設定することで、これ以降はより多くの決済手段を簡単に受け付けられるようになります。[サポートされているすべての決済手段の違い](https://stripe.com/payments/payment-methods-guide)をご確認ください。
- **ダッシュボードでイベントを手動で処理する**
ダッシュボードを使用して、テスト決済を[ダッシュボードで表示](https://dashboard.stripe.com/test/payments)したり、メール領収書を送信したり、入金を処理したり、失敗した決済を再試行したりできます。
- **Custom Webhook を構築する**
[Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI.
- **構築済みアプリを導入する**
パートナーアプリケーションを統合することで、[自動化](https://stripe.partners/?f_category=automation)や[マーケティング/セールス](https://stripe.partners/?f_category=marketing-and-sales)などの一般的なビジネスイベントを処理します。
## 導入をテストする
テスト API キーを使用して決済リダイレクトページを開き、暗号資産決済統合をテストします。[テストネットアセット](https://docs.stripe.com/billing/subscriptions/stablecoins.md#testnet-assets) を使用して、決済フローの成功を無料でテストできます。
1. *サンドボックス* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)で、選択した統合方法を使用して新しいトランザクションを作成し、そのリダイレクト URL を開きます。
1. 任意のウォレットと決済ネットワークを接続します。
1. 決済を完了し、想定する URL にリダイレクトされることを確認します。
### テストネットアセットで決済をテストする
ほとんどの暗号資産は、ブロックチェーントランザクションのテストに使用できるテストネットアセット (金銭的価値のないトークン) を提供しています。Stripe は、テストに MetaMask ウォレット、Polygon Amoy テストネット、Circle Faucet を推奨していますが、独自のサービスを使用することもできます。
#### ウォレットをインストールする
1. Web ブラウザ用の [MetaMask 拡張機能をダウンロード](https://metamask.io/download) します。
1. [新しいウォレットを作成](https://support.metamask.io/start/creating-a-new-wallet/) するか、[既存のウォレットをインポート](https://support.metamask.io/start/use-an-existing-wallet/) します。
#### テストネットを有効にする
1. MetaMask ウォレットで、メインメニューから**ネットワーク**を選択します。
1. **カスタムネットワークを追加**をクリックします。
1. 次の詳細を入力します。
- **ネットワーク名**: `Amoy`
- **デフォルトの RPC URL**: `https://rpc-amoy.polygon.technology/`
- **チェーン ID**: `80002`
- **通貨シンボル**: `POL`
- **ブロックエクスプローラーの URL**: `https://amoy.polygonscan.com/`
1. **保存** をクリックします。
#### トークンをインポートする
1. MetaMask ウォレットの**トークン**で、ネットワークドロップダウンから **Amoy** を選択します。
1. オーバーフローメニュー (⋯) をクリックし、**トークンのインポート**を選択します。
1. **ネットワークを選択** > **Amoy** をクリックします。
1. **トークンコントラクトアドレス**に、Polygon Amoy のテストネットコントラクトアドレスを貼り付けます。
```
0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582
```
**トークンシンボル**フィールドは `USDC` で自動的に更新され、**小数点以下桁数**フィールドは `6` で更新されます。
1. **次へ** をクリックします。
1. `USDC` トークンをインポートしていることを確認し、**インポート**をクリックします。
MetaMask ウォレットのトークンリストに **POL** と **USDC** が表示されるようになりました。
返金をテストする際、ウォレットに送信されるトークンの契約が、決済に使用されるものとは異なることがあります。ブロックエクスプローラーで返金したトークンの [transaction_hash](https://docs.stripe.com/api/refunds/object.md?rds=1#refund_object-destination_details-crypto-reference) を確認し、そのトークンの契約をウォレットに追加することをお勧めします。たとえば、Sepolia ETH USDC 返金の `0x58277ebcabbe2a6694fbca8daf9e23163dbacf3e` トークンの契約アドレスを確認できます。
#### テストネットアセットを取得する
> 一部のテストネットのフォーセットを使用するには、少量のメインネットトークンを保有する必要がある場合があります。
1. [faucet.circle.com](https://faucet.circle.com/) を開きます
1. **USDC** をクリックします。
1. **ネットワーク**で、**Polygon PoS Amoy** を選択します。
1. **送信先**にウォレットアドレスを貼り付けます。
1. **20 USDC を送金**をクリックします。
決済を行うための USDC に加えて、トランザクションコストを支払うための POL が必要です。
1. [faucet.polygon.technology](https://faucet.polygon.technology/) を開きます。
1. **チェーンとトークンの選択**で、**Polygon Amoy** と **POL** を選択します。
1. **本人確認**で、認証に使用するサードパーティプラットフォームをクリックし、ログインプロセスを完了します。
1. **ウォレットアドレスの入力**に、ウォレットアドレスを貼り付けます。
1. **Claim** をクリックします。
テストネットトランザクションの完了には数分かかる場合があります。ウォレットを確認して、USDC と POL が送金されたことを確認してください。
### その他のテストネット Faucet
より多くのテストトークンオプションについては、次の Faucet サービスを確認してください。
- [Paxos USDP](https://faucet.paxos.com/)
- [Devnet SOL](https://faucet.solana.com/)
- [Sepolia ETH](https://faucets.chain.link/sepolia)
- [Amoy POL](https://faucet.polygon.technology/)
# Setup Intents API
> This is a Setup Intents API for when api-integration is setupintents. View the full page at https://docs.stripe.com/billing/subscriptions/stablecoins?api-integration=setupintents.
## 商品と価格を作成する [ダッシュボード]
[Products (商品)](https://docs.stripe.com/api/products.md) は、販売しているアイテムまたはサービスを表します。[Prices (価格)](https://docs.stripe.com/api/prices.md) は、商品の価格と請求頻度を定義します。これには、商品の価格、受け付ける通貨、および 1 回限りの支払いか継続支払いかが含まれます。商品と価格が数個のみの場合は、ダッシュボードでそれらを作成および管理します。
このガイドでは、例としてストックフォトサービスを使用し、15 USD の月次サブスクリプションを顧客に請求します。これをモデル化するには、次のようにします。
1. [商品](https://dashboard.stripe.com/products?active=true)ページに移動し、**商品を作成**をクリックします。
1. 商品の**名前**を入力します。オプションで**説明**を追加して、商品の画像をアップロードできます。
1. **商品税コード**を選択します。[商品税コード](https://docs.stripe.com/tax/tax-codes.md)の詳細をご確認ください。
1. **継続**を選択します。次に、価格に**15**を入力し、通貨として**\**を選択します。
1. **価格に税金を含める**かどうかを選択します。[税金設定](https://dashboard.stripe.com/test/settings/tax)のデフォルト値を使用するか、値を手動で設定できます。この例では、**自動**を選択します。
1. **請求期間**で**月次**を選択します。
1. **その他の料金体系オプション**をクリックします。次に、この例の料金体系モデルとして**定額**を選択します。[定額料金](https://docs.stripe.com/products-prices/pricing-models.md#flat-rate)とその他の[料金体系モデル](https://docs.stripe.com/products-prices/pricing-models.md)の詳細をご確認ください。
1. 将来的に特定の価格を整理、クエリ、更新するために、内部**価格の説明**と[検索キー](https://docs.stripe.com/products-prices/manage-prices.md#lookup-keys) 追加します。
1. **次へ**をクリックします。次に、**商品を追加**をクリックします。
商品と価格を作成したら、価格 ID を記録しておき、後続のステップで使用できるようにします。ID は料金体系ページで `price_G0FvDp6vZvdwRZ` のように表示されます。
## SetupIntent を作成する [サーバー側]
今後の支払いに備えて顧客の支払い方法を保存するために、[SetupIntent](https://docs.stripe.com/api/setup_intents.md) を作成します。SetupIntent はこの設定プロセスのステップを追跡します。
サーバー上で [payment_method_types](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-payment_method_types) を `crypto` に設定した SetupIntent を作成し、顧客 ID と [usage=off_session](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-usage) を指定します。
```curl
curl https://api.stripe.com/v1/setup_intents \
-u "<>:" \
-d confirm=true \
--data-urlencode "return_url=https://www.example.com" \
-d usage=off_session \
-d customer=cus_00000000000000 \
-d "payment_method_data[type]=crypto" \
-d "payment_method_types[]=crypto" \
-d "mandate_data[customer_acceptance][type]=online" \
-d "mandate_data[customer_acceptance][online][ip_address]=127.0.0.0" \
-d "mandate_data[customer_acceptance][online][user_agent]=device"
```
API レスポンスオブジェクトには、[payment_method](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-payment_method) ID とリダイレクト URL が [next_action.redirect_to_url.url](https://docs.stripe.com/api/setup_intents/object.md#setup_intent_object-next_action-redirect_to_url-url) に含まれています。顧客をこの URL にリダイレクトして、サブスクリプションの支払い設定を完了します。顧客が決済フローを完了すると、[return_url](https://docs.stripe.com/api/setup_intents/create.md#create_setup_intent-return_url) として指定された URL にリダイレクトされて戻ります。
## サブスクリプションを作成する [サーバー側]
価格と顧客を含むサブスクリプションを作成します。`default_payment_method` パラメーターの値を SetupIntent から返された `payment_method` ID に設定します。
```curl
curl https://api.stripe.com/v1/subscriptions \
-u "<>:" \
-d customer={{CUSTOMER_ID}} \
-d "items[0][price]={{PRICE_ID}}" \
-d default_payment_method={{PAYMENT_METHOD_ID}} \
-d off_session=true
```
事前設定されたデフォルトの支払い方法があるため、サブスクリプションを作成すると顧客に自動的に請求されます。支払いが成功すると、Stripe ダッシュボードのステータスが **有効** に変わります。すでに設定済みの価格によって以降の請求額が決まります。
## 支払い後のイベントを処理する
支払いが完了すると、Stripe は [payment_intent.succeeded](https://docs.stripe.com/api/events/types.md#event_types-payment_intent.succeeded) イベントを送信します。ダッシュボード、カスタム *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests)、またはパートナーソリューションを使用してこれらのイベントを受信し、また、顧客への注文確認メールの送信、データベースでの売上の記録、配送ワークフローの開始などのアクションを実行します。
クライアントからのコールバックを待つのではなく、これらのイベントをリッスンします。クライアント側では、コールバックが実行される前に顧客がブラウザーのウィンドウを閉じたり、アプリを終了したりする可能性があります。また、悪意を持つクライアントがレスポンスを不正操作する恐れもあります。非同期型のイベントをリッスンするよう構築済みのシステムを設定することで、これ以降はより多くの決済手段を簡単に受け付けられるようになります。[サポートされているすべての決済手段の違い](https://stripe.com/payments/payment-methods-guide)をご確認ください。
- **ダッシュボードでイベントを手動で処理する**
ダッシュボードを使用して、テスト決済を[ダッシュボードで表示](https://dashboard.stripe.com/test/payments)したり、メール領収書を送信したり、入金を処理したり、失敗した決済を再試行したりできます。
- **Custom Webhook を構築する**
[Build a custom webhook](https://docs.stripe.com/webhooks/handling-payment-events.md#build-your-own-webhook) handler to listen for events and build custom asynchronous payment flows. Test and debug your webhook integration locally with the Stripe CLI.
- **構築済みアプリを導入する**
パートナーアプリケーションを統合することで、[自動化](https://stripe.partners/?f_category=automation)や[マーケティング/セールス](https://stripe.partners/?f_category=marketing-and-sales)などの一般的なビジネスイベントを処理します。
## 導入をテストする
テスト API キーを使用して決済リダイレクトページを開き、暗号資産決済統合をテストします。[テストネットアセット](https://docs.stripe.com/billing/subscriptions/stablecoins.md#testnet-assets) を使用して、決済フローの成功を無料でテストできます。
1. *サンドボックス* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes)で、選択した統合方法を使用して新しいトランザクションを作成し、そのリダイレクト URL を開きます。
1. 任意のウォレットと決済ネットワークを接続します。
1. 決済を完了し、想定する URL にリダイレクトされることを確認します。
### テストネットアセットで決済をテストする
ほとんどの暗号資産は、ブロックチェーントランザクションのテストに使用できるテストネットアセット (金銭的価値のないトークン) を提供しています。Stripe は、テストに MetaMask ウォレット、Polygon Amoy テストネット、Circle Faucet を推奨していますが、独自のサービスを使用することもできます。
#### ウォレットをインストールする
1. Web ブラウザ用の [MetaMask 拡張機能をダウンロード](https://metamask.io/download) します。
1. [新しいウォレットを作成](https://support.metamask.io/start/creating-a-new-wallet/) するか、[既存のウォレットをインポート](https://support.metamask.io/start/use-an-existing-wallet/) します。
#### テストネットを有効にする
1. MetaMask ウォレットで、メインメニューから**ネットワーク**を選択します。
1. **カスタムネットワークを追加**をクリックします。
1. 次の詳細を入力します。
- **ネットワーク名**: `Amoy`
- **デフォルトの RPC URL**: `https://rpc-amoy.polygon.technology/`
- **チェーン ID**: `80002`
- **通貨シンボル**: `POL`
- **ブロックエクスプローラーの URL**: `https://amoy.polygonscan.com/`
1. **保存** をクリックします。
#### トークンをインポートする
1. MetaMask ウォレットの**トークン**で、ネットワークドロップダウンから **Amoy** を選択します。
1. オーバーフローメニュー (⋯) をクリックし、**トークンのインポート**を選択します。
1. **ネットワークを選択** > **Amoy** をクリックします。
1. **トークンコントラクトアドレス**に、Polygon Amoy のテストネットコントラクトアドレスを貼り付けます。
```
0x41E94Eb019C0762f9Bfcf9Fb1E58725BfB0e7582
```
**トークンシンボル**フィールドは `USDC` で自動的に更新され、**小数点以下桁数**フィールドは `6` で更新されます。
1. **次へ** をクリックします。
1. `USDC` トークンをインポートしていることを確認し、**インポート**をクリックします。
MetaMask ウォレットのトークンリストに **POL** と **USDC** が表示されるようになりました。
返金をテストする際、ウォレットに送信されるトークンの契約が、決済に使用されるものとは異なることがあります。ブロックエクスプローラーで返金したトークンの [transaction_hash](https://docs.stripe.com/api/refunds/object.md?rds=1#refund_object-destination_details-crypto-reference) を確認し、そのトークンの契約をウォレットに追加することをお勧めします。たとえば、Sepolia ETH USDC 返金の `0x58277ebcabbe2a6694fbca8daf9e23163dbacf3e` トークンの契約アドレスを確認できます。
#### テストネットアセットを取得する
> 一部のテストネットのフォーセットを使用するには、少量のメインネットトークンを保有する必要がある場合があります。
1. [faucet.circle.com](https://faucet.circle.com/) を開きます
1. **USDC** をクリックします。
1. **ネットワーク**で、**Polygon PoS Amoy** を選択します。
1. **送信先**にウォレットアドレスを貼り付けます。
1. **20 USDC を送金**をクリックします。
決済を行うための USDC に加えて、トランザクションコストを支払うための POL が必要です。
1. [faucet.polygon.technology](https://faucet.polygon.technology/) を開きます。
1. **チェーンとトークンの選択**で、**Polygon Amoy** と **POL** を選択します。
1. **本人確認**で、認証に使用するサードパーティプラットフォームをクリックし、ログインプロセスを完了します。
1. **ウォレットアドレスの入力**に、ウォレットアドレスを貼り付けます。
1. **Claim** をクリックします。
テストネットトランザクションの完了には数分かかる場合があります。ウォレットを確認して、USDC と POL が送金されたことを確認してください。
### その他のテストネット Faucet
より多くのテストトークンオプションについては、次の Faucet サービスを確認してください。
- [Paxos USDP](https://faucet.paxos.com/)
- [Devnet SOL](https://faucet.solana.com/)
- [Sepolia ETH](https://faucets.chain.link/sepolia)
- [Amoy POL](https://faucet.polygon.technology/)