# Payment Links を使用して iOS でデジタル商品の支払いを受け付ける アプリから Stripe 上のオンライン決済ページにリンクして、デジタル商品やサブスクリプションを販売します。 アメリカまたは欧州経済領域 (EEA) で販売されるデジタル製品、コンテンツ、サブスクリプションの場合、iOS アプリでは [Payment Links](https://docs.stripe.com/payment-links.md) を使用して Apple Pay を受け付けることができます。 その他の地域では、デジタル製品、コンテンツ、またはサブスクリプションに対して App で Apple Pay を使用することはできません。 このガイドでは、Payment Links を使用してアプリ内でデジタル商品やサービスを販売し、顧客を Stripe がホストする決済ページにリダイレクトする方法について説明します。 Payment Links は、商品と価格が限定されており、サーバーを実行したくない場合に使用します。[Stripe Checkout](https://docs.stripe.com/mobile/digital-goods/checkout.md) または [Elements](https://docs.stripe.com/mobile/digital-goods/custom-checkout.md) を使用して、より動的なカートを作成したり、`Customer` を `Checkout Session` に関連付けたりします。 このガイドでは、アプリ内デジタル商品を販売するプロセスのみを説明します。次のいずれかを販売する場合は、代わりに [ネイティブ iOS 支払いガイド](https://docs.stripe.com/payments/mobile.md) を使用してください。 - 物理的品目 - アプリ外での使用を目的とする商品やサービス - リアルタイムの個人間サービス ## 作成する内容 このガイドでは以下の方法を説明します。 - *商品* (Products represent what your business sells—whether that's a good or a service) と *価格* (Prices define how much and how often to charge for products. This includes how much the product costs, what currency to use, and the interval if the price is for subscriptions)を使用して、デジタル商品またはサブスクリプションをモデル化します。 - ダッシュボードから決済用リンクを作成します。 - *ユニバーサルリンク* (Use Universal links on iOS and macOS to link directly to in-app content. They're standard HTTPS links, so the same URL works for your website and your app)を使用して 決済用リンクからアプリへと直接リダイレクトします。 - *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) を監視して顧客のアプリ内サブスクリプションを更新します。 ## 対象範囲外の内容 このガイドでは、既存のアプリ内購入システムと並行して決済用リンクを追加する方法を説明します。以下は対象範囲に含まれません。 - ユーザー認証。既存の認証プロバイダーがない場合には、[Sign in with Apple (Apple でサインイン)](https://developer.apple.com/sign-in-with-apple/) や [Firebase Authentication](https://firebase.google.com/docs/auth) などのサードパーティプロバイダーを使用できます。 - ネイティブのアプリ内購入。StoreKit を使用してアプリ内購入を実装するには、[Apple のアプリ内課金](https://developer.apple.com/in-app-purchase/) ガイドをご覧ください。 ## ユニバーサルリンクを設定する [クライアント側] [サーバー側] *ユニバーサルリンク* (Use Universal links on iOS and macOS to link directly to in-app content. They're standard HTTPS links, so the same URL works for your website and your app)を使用すると、決済成功後に、決済用リンクをお使いのアプリにディープリンクできます。ユニバーサルリンクを設定するには、次の手順を行います。 1. ドメインに `apple-app-site-association` ファイルを追加します。 1. アプリに Associated Domains エンタイトルメントを追加します。 1. Checkout リダイレクト URL のフォールバックページを追加します。 #### 関連ドメインを定義する `.well-known/apple-app-site-association` でドメインにファイルを追加し、アプリで処理する URL を定義します。アプリ ID の前にチーム ID を付加します。チーム IDは、[Apple Developer Portal のメンバーシップページ](https://developer.apple.com/account)にあります。 ```json { "applinks": { "apps": [], "details": [ { "appIDs": [ "A28BC3DEF9.com.example.MyApp1", "A28BC3DEF9.com.example.MyApp1-Debug" ], "components": [ { "/": "/checkout_redirect*", "comment": "Matches any URL whose path starts with /checkout_redirect" } ] } ] } } ``` > このファイルは、MIME タイプ `application/json` で提供する必要があります。`curl -I` を使用してコンテンツタイプを確認します。 > > ```bash curl -I https://example.com/.well-known/apple-app-site-association ``` 詳細については、[関連ドメインのサポート](https://developer.apple.com/documentation/xcode/supporting-associated-domains)に関する Apple のページを参照してください。 #### アプリに Associated Domains エンタイトルメントを追加する 1. アプリのターゲットの、**Signing & Capabilities (署名とケイパビリティ)** ウィンドウを開きます。 1. **+ ケイパビリティ** をクリックし、**関連ドメイン** を選択します。 1. `applinks:example.com` のエントリーを Associated Domains リストに追加します。 ユニバーサルリンクの詳細については、Apple の[ユニバーサルリンク](https://developer.apple.com/ios/universal-links/)のドキュメントを参照してください。 iOS は、`apple-app-site-association` ファイルで定義された URL へのリンクをインターセプトしますが、リダイレクトでアプリを開くことができないケースが発生することがあります。 ## 商品またはサブスクリプションの決済用リンクを作成する #### 1 回限りの商品 1. ダッシュボードで [Payment Links](https://dashboard.stripe.com/payment-links) ページを開き、 **+新規** をクリックします (またはプラス記号 (+) をクリックして **決済用リンク** を選択します)。 1. (オプション) **顧客が支払う金額を選択する** を選択して、顧客が希望する金額を支払うようにします (例えば、購入するクレジットの数を決定するため)。 1. 既存の商品を選択するか、**+新しい商品を追加** をクリックします。 1. 新しく商品を追加する場合は、商品詳細を入力して **商品を追加** をクリックします。 1. **支払い後** に移動し、**確認ページを表示しない** を選択します。 1. 成功 URL として[ユニバーサルリンク](https://developer.apple.com/ios/universal-links/)を設定し、支払い完了後に顧客をあなたのアプリに誘導します。 1. **Create Link** をクリックします。 #### サブスクリプション 1. ダッシュボードで [Payment Links](https://docs.stripe.com/payment-links/create.md) ページを開き、 **+新規** をクリックします (またはプラス記号 (+) をクリックして **決済用リンク** を選択します)。 1. 既存の商品を選択するか、**+新しい商品を追加** をクリックします。 1. 新しく商品を追加する場合は、商品詳細を入力して **商品を追加** をクリックします。 1. **支払い後** タブに移動し、**確認ページを表示しない** を選択します。 1. 成功 URL として[ユニバーサルリンク](https://developer.apple.com/ios/universal-links/)を設定し、支払い完了後に顧客をあなたのアプリに誘導します。 1. **Create Link** をクリックします。 Payment Links は、カード支払いと Apple Pay にデフォルトで対応しています。[ダッシュボード](https://dashboard.stripe.com/settings/payment_methods)から追加の支払い方法を有効にできます。 ## URL パラメーターを使用して関連情報を添付する [URL パラメーター](https://docs.stripe.com/payment-links/customize.md#customize-checkout-with-url-parameters)を使用すると、決済ページにその他の詳細情報を追加して、決済を効率化できます。URL パラメーターを使用して、決済ページの言語を変えたり、メールアドレスやプロモーションコードを事前入力したり、関連付けられたメタデータを添付して照合しやすくしたりできます。 決済を効率化し、消し込みに役立てるために、`prefilled_email` (または `locked_prefilled_email`) と `client_reference_id` を使用することをお勧めします。 | パラメータ | 説明 | 構文 | | ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | `prefilled_email` | `prefilled_email` を使用して、決済ページにメールアドレスを自動的に入力します。顧客は引き続きこのフィールドを編集できるため、決済フローに渡すメールアドレスが、支払いを完了するために使用されるメールアドレスとは異なる場合があります。 | `prefilled_email` は有効なメールアドレスである必要があります。無効な値は無視され、決済ページは引き続き正常に機能します。 URL パラメーターとして付与するメールアドレスは、決済ページに渡されないリスクを下げるために、[エンコーディング](https://en.wikipedia.org/wiki/Percent-encoding)することをお勧めします。 | | `locked_prefilled_email` | `locked_prefilled_email`を使用して、決済ページに編集不可能なメールアドレスを自動的に入力します。 | `locked_prefilled_email`は有効なメールアドレスである必要があります。無効な値は無視され、決済ページは引き続き正常に機能します。`prefilled_email` と `locked_prefilled_email` の両方が渡された場合は、`locked_prefilled_email` が優先されます。 URL パラメーターとして付与するメールアドレスは、決済ページに渡されないリスクを下げるために、[エンコーディング](https://en.wikipedia.org/wiki/Percent-encoding)することをお勧めします。 | | `client_reference_id` | `client_reference_id` を使用して、Checkout セッションに選択した一意の文字列を関連付けます。アプリ ID やカート ID (または同様のもの) を指定でき、内部システムでセッションを照合するために使用できます。この値は決済時に顧客には表示されませんが、支払いの完了後に [checkout.session.completed](https://docs.stripe.com/api/events/types.md#event_types-checkout.session.completed) [Webhook](https://docs.stripe.com/webhooks.md) で送信されます。 | `client_reference_id` は英数字、ダッシュ、アンダースコアで構成され、最大 200 文字までの任意の値を指定できます。無効な値は無視され、決済ページは引き続き正常に機能します。 | 以下は、`prefilled_email` と `client_reference_id` が指定されたリンクの例です。 `https://buy.stripe.com/test_eVa3do41l4Ye6KkcMN?prefilled_email=jenny%40example.com&client_reference_id=id_123` ## アプリにリンクを追加する アプリに決済ボタンを追加します。このボタンは以下を行います。 - 決済用リンクに `prefilled_email` と `client_reference_id` が事前入力されます。 - Stripe 上のオンライン決済ページを Safari で開きます。 ## 注文のフルフィルメントを処理する [サーバー側] 購入が成功すると、Stripe は `checkout.session.completed` *Webhook* (A webhook is a real-time push notification sent to your application as a JSON payload through HTTPS requests) をお客様に送信します。Webhook イベントのペイロードで、`Checkout.session オブジェクト`の下に `client_reference_id` があります。これは、システム内の特定の注文やユーザーへの決済の関連付けなどのビジネスロジックに使用できます。 実装内容をテストするには、[ダッシュボード](https://dashboard.stripe.com/events)または [Stripe CLI](https://docs.stripe.com/webhooks.md#test-webhook) を使用してイベントをモニタリングします。本番環境では、Webhook エンドポイントを設定して適切なイベントタイプに登録します。`STRIPE_WEBHOOK_SECRET` キーが不明な場合は、ダッシュボードで [Webhook](https://dashboard.stripe.com/webhooks) をクリックして表示します。 ### テスト 決済ボタンが機能することをテストするには、次の手順を実行します。 1. 決済ボタンをクリックすると、Stripe Checkout 支払いフォームにリダイレクトされます。 1. 4242 4242 4242 4242 のテストカード番号、3 桁のセキュリティコード、将来の有効期限日、および任意の有効な郵便番号を入力します。 1. **支払う** をタップします。 1. `checkout.session.completed` Webhook が起動し、Stripe が取引についてサーバーに通知します。リダイレクトによってアプリへと戻されます。 ## Optional: Lemon Squeezy を使用したアプリ内購入 Lemon Squeezy で支払いを受け付けます。Lemon Squeezy は、お客様に代わって多くの業務タスク (税金計算や不審請求の申し立てなど) を処理するプラットフォームです。アプリ内購入のマーチャントオブレコードに [Lemon Squeezy を使用する方法](https://docs.lemonsqueezy.com/guides/tutorials/in-app-purchases)については、こちらの記事をご覧ください。 ## See also - [割引を追加する](https://docs.stripe.com/payments/checkout/discounts.md) - [税金を徴収する](https://docs.stripe.com/payments/checkout/taxes.md)