CashierはStripeによるサブスクリプション(定期課金)サービスの読みやすく、スラスラと記述できるインターフェイスを提供します。これにより書くのが恐ろしくなるような、サブスクリプション支払いのための決まりきったコードのほとんどが処理できます。基本的なサブスクリプション管理に加え、Cashierはクーポン、サブスクリプションの変更、サブスクリプション数、キャンセル猶予期間、さらにインボイスのPDF発行まで行います。Cashierのアップデート新しいバージョンのCashierへアップグレードする場合は、アップグレードガイドを注意深く確認することが重要です。ブレーキングチェンジを防ぐために、CashierではStripeの固定APIバージョンを使用しています。Cashier10.1では、Stripeの2019-08-14付けAPIバージョンを使用しています。APIのバージョンを更新することがあります。インストールはじめに、Stripe向けCashierパッケージをComposerでインストールしてください。Stripeの全イベントをCashierで確実に処理するために、CashierのWebhook処理の準備を行なってください。データベースマイグレーションCashierサービスプロバーダでCashierのデータベースマイグレーションを登録しています。パッケージをインストールしたら、データベースのマイグレーションを忘れず実行してください。Cashierマイグレーションはusersテーブルにいくつものカラムを追加し、顧客のサブスクリプションをすべて保持するために新しいsubscriptionsテーブルを作成します。Artisanコマンドを使用し公開できます。--tag="cashier-migrations"Cashierのマイグレーション実行を完全に防ぎたい場合は、Cashierが提供しているignoreMigrationsを使います。通常、このメソッドはAppServiceProviderのregisterメソッドの中で実行すべきです。StripeはStripeの識別子を保存しておくカラムはケースセンシティブ(大文字小文字区別)にするべきだと勧めています。そのためstripe_idカラムには、たとえばMySQLではutf8_binのように、適切なカラムコレーションを確実に指定してください。詳しい情報は、Stripeのドキュメントをお読みください。設定BillableモデルCashierを使い始める前に、モデル定義にBillableトレイトを追加します。このトレイトはサブスクリプションの作成やクーポンの適用、支払い情報の更新などのような、共通の支払いタスク実行を提供する数多くのメソッドを提供しています。Billable;}CashierはLaravelに含まれているApp\UserクラスがBillableモデルであると仮定しています。これを変更する場合は、.envファイルでモデルを指定してください。Laravelの提供するApp\Userモデル以外のモデルを使用する場合は、提供しているマイグレーションを公開し、モデルのテーブル名に一致するように変更する必要があります。次に、.envファイルの中のStripeキーを設定する必要があります。APIキーは、Stripeのコントロールパネルから取得できます。STRIPE_KEY=your-stripe-keySTRIPE_SECRET=your-stripe-secret通貨設定Cashierのデフォルト通貨は米ドル(USD)です。CASHIER_CURRENCY環境変数の指定で、デフォルト通貨を変更可能です。CASHIER_CURRENCY=eurCaishierの通貨設定に付け加え、インボイスで表示する金額のフォーマットをローケルを使い指定することも可能です。Cashierは内部で、通貨のローケルを指定するために、PHPのNumberFormatterクラスを利用しています。PHP拡張がインストールされているのを確認してください。ログStripeに関連する例外をすべてログする時に使用できるログチャンネルをCashierでは指定できます。CASHIER_LOGGER環境変数を使用し、ログチャンネルを指定します。IDで顧客を取得できます。Billableモデルのインスタンスを返します。Cashier::findBillable($stripeId);顧客の生成サブスクリプションを開始しなくてもStripeで顧客を作成したい場合が、ときどき起きるでしょう。createAsStripeCustomerを使い、作成できます。$user->createAsStripeCustomer();一度顧客をStripe上に作成しておき、後日サブスクリプションを開始することもできます。APIが提供するオプション($options)を配列として、追加引数に渡すことも可能です。$user->createAsStripeCustomer($options);すでにStripe上に顧客が登録されているときは、Billableエンティティとして顧客オブジェクトを返してもらいたい場合、createOrGetStripeCustomerメソッドが使用できます。$user->createOrGetStripeCustomer();顧客の更新まれに、Stripeの顧客を追加情報と一緒に直接更新したい状況もあります。updateStripeCustomerメソッドを使用してください。$user->updateStripeCustomer($options);メールアドレスのカスタマイズStripeに顧客を作成するために、CashierはデフォルトでBillableモデルのemail属性を使用します。これはstripeEmailメソッドを使い、オーバーライドできます。$this->email;}Stripeでの顧客生成にメールアドレスが不必要ならば、nullを返すこともできます。メールアドレスを提供しない場合、メールでの督促、支払い失敗のリマインダーなどのメールに関連するStripeの機能は使用できません。支払い方法の保存Stripeでサブスクリプションを生成するか「一度だけ」の課金を実行するためには、支払い方法を登録し、IDを取得する必要があります。サブスクリプションのための支払いメソッドか、一回だけの課金ためかによりアプローチが異なるため、以下で両方共にみていきましょう。APIを使う必要があります。Intent(意図)"は、Stripeに対し顧客の支払いメソッドを登録する意図を示しています。Intentを簡単に作成できるcreateSetupIntentを含んでいます。顧客の支払いメソッドの詳細情報を集めるフォームをレンダーしたいルートやコントローラから、このメソッドを呼び出してください。Intentを作成したらそれをビューに渡し、支払い方法を集める要素にsecretを付け加える必要があります。このような「支払い方法更新」フォームを考えてください。Method</button>Stripe.jsライブラリを使い、Stripe要素をフォームに付け加え、顧客の支払いの詳細を安全に収集します。cardElement.mount('#card-element');</script>これでStripeのconfirmCardSetupメソッドを使用してカードを検証し、Stripeから安全な「支払い方法識別子」を取得できます。}});Stripeによりカードが検証されたら、顧客に付け加えたsetupIntent.payment_methodの結果をLaravelアプリケーションへ渡すことができます。支払い方法は新しい支払い方法を追加するのと、デフォルトの支払い方法を使用する、どちらかが選べます。新しい支払い方法を追加の支払いメソッド識別子を即時に使用することもできます。Intentsと顧客支払いの詳細情報の収集に関するより詳しい情報は、Stripeが提供している概要をご覧ください。顧客の支払いメソッドに対し一回のみの課金を作成する場合、ワンタイムの支払いメソッド識別子を使う必要があるだけで済みます。Stripeの制限により、保存されている顧客のデフォルト支払い方法は使用できません。Stripe.jsライブラリを使用し、顧客に支払い方法の詳細を入力してもらえるようにする必要があります。例として、以降のフォームを考えてみましょう。Payment</button>Stripe.jsライブラリを使い、Stripe要素をフォームに付け加え、顧客の支払いの詳細を安全に収集します。cardElement.mount('#card-element');</script>StripeのcreatePaymentMethodメソッドを活用し、Stripeによりカードが検証し、安全な「支払い方法識別子」をSrtipeから取得します。}});カードの検証が成功すれば、paymentMethod.idをLaravelアプリケーションに渡し、1回限りの支払いを処理できます。支払い方法の取得BillableモデルインスタンスのpaymentMethodsメソッドは、Laravel\Cashier\PaymentMethodインスタンスのコレクションを返します。$user->paymentMethods();デフォルト支払いメソッドを取得する場合は、defaultPaymentMethodメソッドを使用してください。$user->defaultPaymentMethod();findPaymentMethodメソッドを使用し、そのBillableモデルが持っている特定の支払いメソッドを取得することもできます。$user->findPaymentMethod($paymentMethodId);ユーザーが支払い方法を持っているかの判定Billableモデルが自身のアカウントに付加されている支払いメソッドを持っているかを判定するには、hasPaymentMethodメソッドを使用します。//}デフォルト支払い方法の更新updateDefaultPaymentMethodメソッドは顧客のデフォルト支払い方法の情報を更新するために使用します。このメソッドはStripe支払いメソッド識別子を引数に取り、その新しい支払い方法がデフォルト支払い方法として設定されます。$user->updateDefaultPaymentMethod($paymentMethod);その顧客のデフォルト支払い方法情報をStripeの情報と同期したい場合は、updateDefaultPaymentMethodFromStripeメソッドを使用してください。顧客のデフォルト支払い方法は、インボイス発行処理と新しいサブスクリプションの生成にだけ使用されます。Stripeの制限により、一回だけの課金には使用されません。新しい支払い方法を追加するには、Billableのユーザーに対し、addPaymentMethodを呼び出します。支払いメソッド識別子を渡してください。支払い方法の識別子の取得方法を学ぶには、支払い方法保持のドキュメントを確認してください。支払い方法を削除するには、削除したいLaravel\Cashier\PaymentMethodインスタンス上のdeleteメソッドを呼び出します。$paymentMethod->delete();deletePaymentMethodsメソッドは、そのBillableモデルの全支払いメソッド情報を削除します。アクティブなサブスクリプションがあるユーザーでは、デフォルト支払いメソッドが削除されないようにする必要があるでしょう。サブスクリプションサブスクリプション作成サブスクリプションを作成するには最初にbillableなモデルのインスタンスを取得しますが、通常はApp\Userのインスタンスでしょう。モデルインスタンスが獲得できたら、モデルのサブスクリプションを作成するために、newSubscriptionメソッドを使います。'premium')->create($paymentMethod);newSubscriptionメソッドの最初の引数は、サブスクリプションの名前です。アプリケーションでサブスクリプションを一つしか取り扱わない場合、defaultかprimaryと名づけましょう。2つ目の引数はユーザーが購入しようとしているサブスクリプションのプランを指定します。この値はStripeのプラン識別子に対応させる必要があります。createメソッドはStripeの支払い方法識別子、もしくはPaymentMethodオブジェクトを引数に取り、サブスクリプションを開始するのと同時に、データベースの顧客IDと他の関連する支払い情報を更新します。サブスクリプションのcreate()へ支払いメソッド識別子を直接渡すと、ユーザーの保存済み支払いメソッドへ自動的に追加します。ユーザー詳細情報の指定ユーザーに関する詳細情報を追加したい場合は、createメソッドの第2引数に渡すことができます。$email,]);Stripeがサポートしている追加のフィールドについてのさらなる情報は、Stripeの顧客の作成ドキュメントを確認してください。クーポンサブスクリプションの作成時に、クーポンを適用したい場合は、withCouponメソッドを使用してください。->create($paymentMethod);サブスクリプション状態の確認ユーザーがアプリケーションで何かを購入したら、バラエティー豊かで便利なメソッドでサブスクリプション状況を簡単にチェックできます。初めにsubscribedメソッドがtrueを返したら、サブスクリプションが現在試用期間であるにしても、そのユーザーはアクティブなサブスクリプションを持っています。//}subscribedメソッドはルートミドルウェアで使用しても大変役に立つでしょう。ユーザーのサブスクリプション状況に基づいてルートやコントローラへのアクセスをフィルタリングできます。$next($request);}ユーザーがまだ試用期間であるかを調べるには、onTrialメソッドを使用します。このメソッドはまだ使用期間中であるとユーザーに警告を表示するために便利です。//}subscribedToPlanメソッドは、そのユーザーがStripeのプランIDで指定したプランを購入しているかを確認します。以下の例では、ユーザーのdefaultサブスクリプションが、購入され有効なmonthlyプランであるかを確認しています。//}subscribedToPlanメソッドに配列を渡せば、ユーザーのdefaultサブスクリプションが、購入され有効なmonthlyかyearlyプランであるかを判定できます。//}recurringメソッドはユーザーが現在サブスクリプションを購入中で、試用期間を過ぎていることを判断するために使用します。//}キャンセルしたサブスクリプションの状態ユーザーが一度アクティブな購入者になってから、サブスクリプションをキャンセルしたことを調べるには、cancelledメソッドを使用します。//}また、ユーザーがサブスクリプションをキャンセルしているが、まだ完全に期限が切れる前の「猶予期間」中であるかを調べることもできます。ユーザーが3月5日にサブスクリプションをキャンセルし、3月10日で無効になる場合、そのユーザーは3月10日までは「猶予期間」中です。subscribedメソッドは、この期間中、まだtrueを返すことに注目してください。//}ユーザーがサブスクリプションをキャンセルし、「猶予期間」を過ぎていることを調べるには、endedメソッドを使ってください。//}不十分と期日超過の状態サブスクリプション作成後、そのサブクリプションが2つ目の支払いアクションを要求している場合、incomplete(不十分)として印がつけられます。サブスクリプションの状態は、Cashierのsubscriptionsデータベーステーブルのstripe_statusカラムに保存されます。同様に、サブスクリプションの変更時に第2の支払いアクションが要求されている場合は、past_due(期日超過)として印がつけられます。サブスクリプションが2つのどちらかである時、顧客が支払いを受領するまで状態は有効になりません。あるサブクリプションに不十分な支払いがあるかを確認する場合は、Billableモデルかサブクリプションインスタンス上のhasIncompletePaymentメソッドを使用します。//}サブクリプションに不完全な支払いがある場合、latestPayment(最後の支払い)識別子を渡したCashierの支払い確認ページをそのユーザーへ表示すべきです。この識別子を取得するには、サブクリプションインスタンスのlatestPaymentメソッドが使用できます。payment.</a>past_due状態のときでも、特定のサブスクリプションをアクティブと見なしたい場合は、Cashierが提供するkeepPastDueSubscriptionsActiveメソッドを使用します。通常このメソッドは、AppServiceProviderのregisterメソッドの中で呼び出すべきです。あるサブクリプションにincomplete状態がある場合、支払いを確認するまでは変更できません。updateQuantityメソッドは例外を投げます。プラン変更アプリケーションの購入済みユーザーが新しいサブスクリプションプランへ変更したくなるのはよくあるでしょう。ユーザーを新しいサブスクリプションに変更するには、swapメソッドへプランの識別子を渡します。App\User::find(1);$user->subscription('default')->swap('provider-plan-id');ユーザーが試用期間中の場合、試用期間は継続します。そのプランに「購入数」が存在している場合、購入個数も継続します。プランを変更し、ユーザーの現プランの試用期間をキャンセルする場合は、skipTrialメソッドを使用します。->swap('provider-plan-id');次の支払いサイクルまで待つ代わりに、プランを変更時即時にインボイスを発行したい場合は、swapAndInvoiceメソッドを使用します。App\User::find(1);$user->subscription('default')->swapAndInvoice('provider-plan-id');按分課金デフォルトでStripeはプランの変更時に按分課金(prorate)を行います。noProrateメソッドは按分課金を行わずにサブスクリプションの更新を指定するために使用します。$user->subscription('default')->noProrate()->swap('provider-plan-id');サブスクリプションの按分課金についての情報は、Stripeドキュメントで確認してください。購入数はサブスクリプションに影響をあたえることがあります。あるアプリケーションで「ユーザーごと」に毎月10ドル課金している場合です。購入数を簡単に上げ下げするには、incrementQuantityとdecrementQuantityメソッドを使います。現在の購入数を5個減らす$user->subscription('default')->decrementQuantity(5);もしくは特定の数量を設置するには、updateQuantityメソッドを使ってください。$user->subscription('default')->updateQuantity(10);noProrateメソッドは、按分課金を行わずにサブスクリプションの購入数を更新するために使用します。$user->subscription('default')->noProrate()->updateQuantity(10);サブスクリプション数の詳細については、Stripeドキュメントを読んでください。サブスクリプションの税金ユーザーが支払うサブスクリプションに対する税率を指定するには、BillableモデルへtaxPercentageメソッドを実装し、小数点以下が1桁以内で、0から100までの数値を返します。20;}taxPercentageメソッドにより、モデルごとに税率を適用できるため、多くの州や国に渡るユーザーベースで税率を決める場合に便利です。taxPercentageメソッドは、サブスクリプションの課金時のみに適用されます。Cashierで「一回のみ」の支払いを行う場合は、税率を自分で適用する必要があります。税率の同期taxPercentageが返すハードコードした値を変更する場合、ユーザーに対する既存のサブスクリプションは以前のままになります。taxPercentageが返す値に既存のサブスクリプションも更新したい場合は、ユーザーのサブスクリプションインスタンスに対し、syncTaxPercentageメソッドを呼び出す必要があります。$user->subscription('default')->syncTaxPercentage();サブスクリプション課金日付けデフォルトで課金日はサブスクリプションが生成された日付け、もしくは使用期間を使っている場合は、使用期間の終了日です。課金日付を変更したい場合は、anchorBillingCycleOnメソッドを使用します。->create($paymentMethod);サブスクリプションの課金間隔を管理する情報は、Stripeの課金サイクルのドキュメントをお読みください。サブスクリプションキャンセルサブスクリプションをキャンセルするにはcancelメソッドをユーザーのサブスクリプションに対して使ってください。$user->subscription('default')->cancel();サブスクリプションがキャンセルされるとCashierは自動的に、データベースのends_atカラムをセットします。このカラムはいつからsubscribedメソッドがfalseを返し始めればよいのか、判定するために使用されています。顧客が3月1日にキャンセルしたが、そのサブスクリプションが3月5日に終了するようにスケジュールされていれば、subscribedメソッドは3月5日になるまでtrueを返し続けます。ユーザーがサブスクリプションをキャンセルしたが、まだ「猶予期間」が残っているかどうかを調べるにはonGracePeriodメソッドを使います。//}サブスクリプションを即時キャンセルしたい場合は、ユーザーのサブスクリプションに対し、cancelNowメソッドを呼び出してください。$user->subscription('default')->cancelNow();サブスクリプション再開ユーザーがキャンセルしたサブスクリプションを、再開したいときには、resumeメソッドを使用してください。サブスクリプションを再開するには、そのユーザーに有効期間が残っている必要があります。$user->subscription('default')->resume();ユーザーがサブスクリプションをキャンセルし、それからそのサブスクリプションを再開する場合、そのサブスクリプションの有効期日が完全に切れていなければすぐに課金されません。そのサブスクリプションはシンプルに再度有効になり、元々の支払いサイクルにより課金されます。Cashierのサブスクリプション試用期日はStripeのプランを使用せず、独自に管理しています。Cashierで試用期間を管理するため、Stripeのプランでは試用期間を0に設定する必要があります。支払いの事前登録あり顧客へ試用期間を提供し、支払情報を事前に登録してもらう場合、サブスクリプションを作成するときにtrialDaysメソッドを使ってください。->create($paymentMethod);このメソッドはデータベースのサブスクリプションレコードへ、試用期間の終了日を設定すると同時に、Stripeへこの期日が過ぎるまで、顧客へ課金を始めないように指示します。trialDaysメソッドを使用する場合、Stripeでそのプランに対して設定したデフォルトの試用期間はオーバーライドされます。顧客のサブスクリプションが試用期間の最後の日までにキャンセルされないと、期限が切れると同時に課金されます。そのため、ユーザーに試用期間の終了日を通知しておくべきでしょう。trialUntilメソッドにより、使用期間の終了時を指定する、DateTimeインスタンスを渡せます。->create($paymentMethod);ユーザーが使用期間中であるかを判定するには、ユーザーインスタンスに対しonTrialメソッドを使うか、サブスクリプションインスタンスに対してonTrialを使用してください。次の2つの例は、同じ目的を達します。//}支払いの事前登録なし事前にユーザーの支払い方法の情報を登録してもらうことなく、試用期間を提供する場合は、そのユーザーのレコードのtrial_ends_atに、試用の最終日を設定するだけです。典型的な使い方は、ユーザー登録時に設定する方法でしょう。モデル定義のtrial_ends_atに対する、日付ミューテタを付け加えるのを忘れないでください。trial)」と呼んでいます。Userインスタンスに対し、onTrialメソッドがtrueを返す場合、現在の日付はtrial_ends_atの値を過ぎていません。ユーザーは試用期間中}とくに、ユーザーが「包括的な試用」期間中であり、まだサブスクリプションが作成されていないことを調べたい場合は、onGenericTrialメソッドが使用できます。ユーザーは「包括的」な試用期間中}ユーザーに実際のサブスクリプションを作成する準備ができたら、通常はnewSubscriptionメソッドを使います。一度作成したあとに、サブスクリプションの試用期間を延長したい場合は、extendTrialメソッドを使用します。$subscription->trial_ends_at->addDays(5));試用期間が過ぎ、顧客がサブスクリプションをすでに購入している場合でも、追加の試用期限を与えられます。試用期間で費やされた時間は、その顧客の次回のインボイスから差し引かれます。CLIが役立つでしょう。StripeはWebフックにより、アプリケーションへさまざまなイベントを通知できます。デフォルトで、CashierのWebhookを処理するルートのコントローラは、Cashierのサービスプロバイダで設定されています。このコントローラはWebhookの受信リクエストをすべて処理します。デフォルトでこのコントローラは、課金に多く失敗し続ける(Stripeの設定で定義している回数)、顧客の更新、顧客の削除、サブスクリプションの変更、支払い方法の変更があると、自動的にサブスクリプションをキャンセル処理します。URLを確実に設定してください。Stripeのコントロールパネルで設定する必要のあるWebhookの全リストは、以下のとおりです。Cashierに含まれる、Webフック署名の確認ミドルウェアを使用し、受信リクエストを確実に保護してください。CSRFバリデーションをバイパスする必要があるため、VerifyCsrfTokenミドルウェアのURIを例外としてリストしておくか、ルート定義をwebミドルウェアグループのリストから外しておきましょう。'stripe/*',];Webフックハンドラの定義Cashierは課金の失敗時に、サブスクリプションを自動的にキャンセル処理しますが、他のWebフックイベントを処理したい場合は、Webフックコントローラを拡張します。メソッド名はCashierが期待する命名規則に沿う必要があります。メソッドはhandleのプレフィックスで始まり、処理したいStripeのWebフックの名前を「キャメルケース」にします。Webフックを処理する場合は、handleInvoicePaymentSucceededメソッドをコントローラに追加します。}}次に、routes/web.phpの中で、キャッシャーコントローラへのルートを定義します。これにより、デフォルトのルートが上書きされます。'\App\Http\Controllers\WebhookController@handleWebhook');CashierはWebhookを受け取ると、Laravel\Cashier\Events\WebhookReceivedイベントを発行します。WebhookがCashierにより処理されると、Laravel\Cashier\Events\WebhookHandledイベントを発行します。両方のイベント共にStripeのWebhookの完全なペイロードを持っています。CashierのWebhookコントローラが顧客のサブスクリプションをキャンセルします。失敗した支払いは自動的に捉えられ、コントローラにより処理されます。このコントローラはStripeがサブスクリプションに失敗したと判断した場合、顧客のサブスクリプションを取り消します。(通常、3回の課金失敗)Webフック署名の確認Webフックを安全にするため、StripeのWebフック署名が利用できます。便利に利用できるよう、Cashierは送信されてきたWebフックリクエストが有効なものか確認するミドルウェアをあらかじめ用意しています。Webhookの確認を有効にするには、.envファイル中のSTRIPE_WEBHOOK_SECRET環境変数を確実に設定してください。Stripeアカウントのダッシュボードから取得される、Webhookのsecretを指定します。chargeメソッドにはアプリケーションで使用している通貨の最低単位で金額を指定します。サブスクリプションを購入している顧客の支払いメソッドに対して、「一回だけ」の課金を行いたい場合は、Billableモデルインスタンス上のchargeメソッドを使用します。第2引数に支払い方法識別子を渡してください。$paymentMethod);chargeメソッドは第3引数に配列を受け付け、裏で動いているStripeの課金作成に対するオプションを指定できます。課金作成時に使用できるオプションについては、Stripeのドキュメントを参照してください。$value,]);課金に失敗すると、chargeメソッドは例外を投げます。課金に成功すれば、メソッドはLaravel\Cashier\Paymentのインスタンスを返します。一回だけ課金をしつつ、顧客へ発行するPDFのレシートとしてインボイスも生成したいことがあります。invoiceForメソッドは、まさにそのために存在しています。例として、「一回だけ」の料金を5ドル課金してみましょう。500);金額は即時にユーザーのデフォルト支払い方法へ課金されます。invoiceForメソッドは第3引数に配列を受け付けます。この配列はインボイスアイテムへの支払いオプションを含みます。第4引数も配列で、インボイス自身に対する支払いオプションを指定します。invoiceForメソッドは、課金失敗時にリトライするStripeインボイスを生成します。APIを使用し、生成したインボイスを閉じる必要があります。払い戻しStripeでの課金を払い戻す必要がある場合は、refundメソッドを使用します。$paymentMethod);$user->refund($payment->id);インボイスinvoicesメソッドにより、billableモデルのインボイスの配列を簡単に取得できます。$user->invoicesIncludingPending();顧客へインボイスを一覧表示するとき、そのインボイスに関連する情報を表示するために、インボイスのヘルパメソッドを表示に利用できます。ユーザーが簡単にダウンロードできるよう、テーブルで全インボイスを一覧表示する例を見てください。@endforeach</table>インボイスPDF生成ルートやコントローラの中でdownloadInvoiceメソッドを使うと、そのインボイスのPDFダウンロードを生成できます。このメソッドはブラウザへダウンロードのHTTPレスポンスを正しく行うHTTPレスポンスを生成します。(SCA)規制を守る必要があります。これらのレギュレーションは支払い詐欺を防ぐためにEUにより2019年9月に課せられたものです。幸運なことに、StripeとCashierはSCA準拠のアプリケーション構築のために準備をしてきました。APIのドキュメントを確認してください。支払い要求の追加確認SCA規制は支払いの確認と処理を行うため、頻繁に追加の検証を要求しています。これが起きるとCashierはIncompletePayment例外を投げ、この追加の検証が必要であるとあなたに知らせます。この例外を捉えたら、処理の方法は2つあります。最初の方法は、その顧客をCashierに含まれている支払い確認専門ページへリダイレクトする方法です。このページに紐つけたルートは、Cashierのサービスプロバイダで登録済みです。そのため、IncompletePayment例外を捉えたら、支払い確認ページへリダイレクトします。);}支払い確認ページで顧客はクレジットカード情報の入力を再度促され、「3Dセキュア」のような追加のアクションがStripeにより実行されます。支払いが確認されたら、上記のようにredirect引数で指定されたURLへユーザーはリダイレクトされます。別の方法として、Stripeに支払いの処理を任せることもできます。この場合、支払い確認ページへリダイレクトする代わりに、StripeダッシュボードでStripeの自動支払いメールを瀬一定する必要があります。IncompletePayment例外を捉えたら、支払い確認方法の詳細がメールで送られることをユーザーへ知らせる必要があります。不完全な支払いの例外は、Billableのユーザーに対するcharge、invoiceFor、invoiceメソッドで投げられる可能性があります。スクリプションが処理される時、SubscriptionBuilderのcreateメソッドと、SubscriptionモデルのincrementAndInvoice、swapAndInvoiceメソッドは、例外を投げるでしょう。支払いが追加の確認を必要とする場合そのサブクリプションは、stripe_statusデータベースカラムにより表されるincompleteかpast_due状態になります。Cashierは支払いの確認が完了するとすぐに、Webhookによりその顧客のサブスクリプションを自動的に有効にします。incompleteとpast_due状態の詳細は、追加のドキュメントを参照してください。非セッション確立時の支払い通知SCA規制は、サブスクリプションが有効なときにも、ときどき支払いの詳細を確認することを顧客に求めています。Cashierではセッションが確立していない時に支払いの確認が要求された場合に、顧客へ支払いの通知を送ることができます。サブスクリプションを更新する時にこれが起きます。Cashierの支払い通知はCASHIER_PAYMENT_NOTIFICATION環境変数へ通知クラスをセットすることで有効になります。デフォルトでは、この通知は無効です。Cashierにはこの目的に使うための通知クラスが含まれていますが、必要であれば自作の通知クラスを自由に指定できます。Webhookが有効になっていることを確認してください。BillableモデルがLaravelのIlluminate\Notifications\Notifiableトレイトを使用していることも確認してください。定期課金でなく、顧客が自分で支払った場合でも追加の確認が要求された場合は、その顧客に通知が送られます。残念ながら、Stripeはその支払いが手動や「非セッション時」であることを知る方法がありません。顧客は支払いを確認した後に支払いページを閲覧したら、「支払いが完了しました」メッセージを確認できます。その顧客は同じ支払いを2度行い、二重に課金されるアクシデントに陥ることを防ぐことができるでしょう。SDKオブジェクト上にラップされています。SDKオブジェクトを直接操作したい場合は、asStripeメソッドを使い簡単に取得できます。2018.ドキュメントメンテナンス期間は終了しました。注目:アイコン:ページ内リンク設置(リンクがないヘッダーへの移動では、リンクがある以前のヘッダーのハッシュをURLへ付加します。閉じる移動クリックで即時移動します。適用ボタンクリック後に、全項目まとめて適用されます。Scaffoldスカフォールド型枠生成スカフィールドLargeスクリーン表示幅640px80%90%100%インデントなし1rem2rem3rem本文フォントコードフォントフォント適用確認フォントの指定フィールドから、フォーカスが外れると、当ブロックの内容に反映されます。EnglishのDisplayもPreviewしてください。フォント設定時、表示に不具合が出た場合、当サイトのクッキーを削除してください。バックスラッシュを含むインライン\Code\Blockの例です。以下はコードブロックの例です。}}設定を保存する前に、表示が乱れないか必ず確認してください。CSSによるフォントファミリー指定の知識がない場合は、フォントを変更しないほうが良いでしょう。