この記事は、dev.toに公開されているJustin Michael氏によって書かれた英語記事の日本語訳です。
🍔 シングルスライダー: 支払いオブジェクトの概要
この短いビデオでは、Stripeの支払いオブジェクトがどのように関係しているかを学び、自分のプロジェクトに最適なオブジェクトを見極めましょう。
テクニカルソリューションエンジニアリング(TSE)とは?
TSEは、Stripeの技術者チームのことです。私たちは、Stripeの内外から寄せられる質問に答え、バグ調査を行い、様々なプロジェクトに取り組み、知識を共有することで、皆さんが素晴らしいものを作れるよう支援しています(ぜひ私たちに参加してみてください)。
🍔 シングルスライダーとは?
🍔 シングルスライダーは、1スライドのユーモア溢れるネーミングのプレゼンテーション形式です。
当初は私たちのTSE内部オフィスアワーの冒頭で会話のきっかけとして使われていましたが、やがてStripe社内で動画とトランスクリプトが公開され、オフィスアワーに参加しなくても視聴できるようになりました。
中には外部でも有益な内容のものがあるので、ここで公開することにしました。
トランスクリプト
TSEシングルスライダーへようこそ!
今回は、Stripeの支払いオブジェクトの概要、それぞれの役割、お互いの関係について見ていきましょう。
Charges
まずは基礎となるChargesから見ていきます。Chargesのプレフィックスはch_
またはpy_
です。Chargesは、Stripeアカウントへの具体的な入金を表します。通常はカード決済や銀行振込など、顧客からの入金ですが、Connectを利用する場合は他のStripeアカウントからの入金も表します。
ch_
プレフィックスはカード決済用、py_
はその他の決済に使われます。
Payment Intents
次はPayment Intentsです。IDプレフィックスはpi_
です。Payment Intentsは、同期・非同期の支払いフローを簡素化する状態マシンです。同期の例はカード決済が即時に成功する場合、非同期の例は3Dセキュア認証が必要な場合です。
Payment Intentsは、全体の支払い意思の現在の状態を表します。Payment Intentが支払いを試行するたび、その具体的な試行がChargeとして生成されます。例えば、あるPayment Intentが2回支払いを試行し、最初は失敗してChargeが作成され、2回目で成功してChargeが作成された場合、その単一のPayment Intentに2つのChargeが関連付けられることになります。Payment Intentは、支払いが成功するか、試行がキャンセルもしくは中止されるまで、必要な数だけChargeを生成し続けます。
Payment IntentsとChargesは、Stripeでいう低レベルの支払いオブジェクトです。これらは指定の金額を特定の支払い方法から回収する仕組みを提供しますが、高レベルの支払いオブジェクトが持つ多くの機能は備えていません。次に高レベルのオブジェクトを見ていきましょう。
Checkout Sessions
最初はcs_
プレフィックスのCheckout Sessionsです。Checkout Sessionsは、Stripeの支払いページCheckoutの個別の利用を設定・追跡するために使われます。Checkout Sessionsには多数の設定オプションがあり、一度限りの支払いの場合、その支払いを実行するためにPayment Intentが作成されます。
Payment Links
次の高レベルオブジェクトはplink_
プレフィックスのPayment Linksです。Payment Linksは共有・再利用可能なURLで、必要に応じてCheckout Sessionを生成します。SNSやメールニュース、ウェブサイトなど、同じリンクを多数の人と共有したい場合に最適です。
Invoices
次はin_
プレフィックスのInvoicesです。Invoicesは顧客の未払い金額の明細書そのものです。Invoiceも支払いプロセスを実行するためにPayment Intentを作成します。
Subscriptions
最後の高レベル支払いオブジェクトはsub_
プレフィックスのSubscriptionsです。Subscriptionsは定期支払いを実現するInvoice生成エンジンです。Subscriptionは各期間ごとにInvoiceを作成し、その期間の支払い詳細を含みます。
オブジェクトの関係と機能について
ここでCheckout Sessionsに戻りましょう。先ほど、Checkout Sessionsには多くの設定オプションがあると述べましたが、その1つがCheckoutを使ってSubscriptionを開始するオプションです。つまり、Checkout SessionsはPayment Intentsに加えてSubscriptionsも作成できます。
これらの高レベル支払いオブジェクトは、製品、価格、品目、配送、税金などの豊富な機能をサポートしています。
また、これらの高レベルオブジェクトはすべて、低レベルオブジェクトを基盤に構築されていることにご注目ください。例えばCheckout SessionでSubscriptionを作成した場合、そのSubscriptionからInvoiceが作成され、そのInvoiceからPayment Intentが、さらにそのPayment IntentからChargeが作成されます。この構造により、優れた機能と使いやすさを備えた高レベルオブジェクトを活用しつつ、強力な低レベルオブジェクトの恩恵も受けられるのです。
低レベルオブジェクトの使用
Stripeの高レベルオブジェクトに加えて、Payment Intentsを直接使ってカスタムの高レベル抽象化を外部で構築することもできます。これにより、Stripeの高レベル機能が不要な場合でも、Stripeを支払いプロセッサーとして使ったフルカスタムの支払いシナリオが実現できます。
技術的にはChargesを直接作成することも可能ですが、この方法は非推奨で推奨されていません。Chargesを直接作成すると、使える支払い方式が限られ、非同期の支払いフローをサポートできず、Stripeの新しい機能を活用できなくなるなど、多くの制約があります。
推奨
Stripeの統合を構築する際は、できる限り高レベル支払いオブジェクトを使うことをおすすめします。ここで紹介したどの高レベルオブジェクトからでも開始できます。例えば、Payment Linksを作成してそこからCheckout Sessionを生成するか、またはPayment Linksを飛ばして直接Checkout Sessionを作成するなど、お好みで選べます。Subscriptions とInvoicesも同様で、状況に応じてInvoiceを直接作成するか、Subscriptionを使って定期的に生成するかを選択できます。
以上がほとんどのニーズに対応するよう設計された様々な高レベル支払いオブジェクトです。これらは強力な低レベルオブジェクトを基盤に構築されており、必要に応じてそちらを直接利用することもできます。
著者について
Justin Michaelは、Stripeのテクニカルソリューションエンジニアとして、皆さんが素晴らしいものを作れるよう支援しています。