キャッシャー取引ツールキット
- 構成
- ストライプ
- Composer
- データベース移行 サブスクリプション ステータスの確認
- #サブスクリプション ステータスのキャンセル
- ##サブスクリプション プランの変更
- 同期税率パーセンテージ
- サブスクリプションアンカー日
- サブスクライブ解除
- サブスクリプションを復元
- トライアル サブスクリプション
- 顧客
- ##銀行カード
- Stripe Webhook の処理 #Braintree Webhook の処理
- ##Webhook と CSRF 保護
- ##簡単な支払い
- ##返金について
- ##請求書
- ## ## 請求書###########################
Laravel Cashier
- 概要
- キャッシャーのアップグレード
- 構成
- サブスクリプション
- ##試用サブスクリプション # #クレジット カードによる購読 #顧客の作成
- クレジット カードの受け取り
- Webhook イベントの定義
- サブスクリプションに失敗しましたWebhook イベントの定義
- サブスクリプションが失敗しました簡単なリチャージ
- リチャージ請求書PDF 請求書の生成
- #
はじめに
Laravel Cashierは、StripeのおよびBraintreeの有料サブスクリプションサービスにアクセスするための直感的でスムーズなインターフェイスを提供します。頭が痛くなりそうな有料サブスクリプションコードも処理できます。 Cashier は、基本的なサブスクリプション管理を提供することに加えて、クーポン、サブスクリプションの交換、サブスクリプションの「数量」、キャンセル猶予期間、さらには PDF 請求書の生成も支援します。
{注}「1 回限り」の請求のみが必要で、サブスクリプションを提供しない場合は、Cashier を使用しないでください。 Stripe および Braintree SDK を使用することをお勧めします。
Cashier のアップグレード
Cashier の古いバージョンから最新バージョンにアップグレードすると、最初に読むことをお勧めしますキャッシャー アップグレード ガイド
。##構成
##StripeComposerまず、Stripe の Cashier パッケージをプロジェクトの依存関係に追加します。composer require laravel/cashier
データベースの移行#Cashier を使用する前に、データベースを準備する必要があります。レジ担当者は、users
テーブルにいくつかの列を追加し、すべての顧客のサブスクリプションを保持するための新しい
subscriptionsテーブルを作成する必要があります。
Schema::table('users', function ($table) { $table->string('stripe_id')->nullable()->collation('utf8mb4_bin'); $table->string('card_brand')->nullable(); $table->string('card_last_four', 4)->nullable(); $table->timestamp('trial_ends_at')->nullable(); }); Schema::create('subscriptions', function ($table) { $table->increments('id'); $table->unsignedInteger('user_id'); $table->string('name'); $table->string('stripe_id')->collation('utf8mb4_bin'); $table->string('stripe_plan'); $table->integer('quantity'); $table->timestamp('trial_ends_at')->nullable(); $table->timestamp('ends_at')->nullable(); $table->timestamps(); });
移行ファイルが作成されたら、その後、Artisan のmerge
請求可能モデル次に、コマンドを実行します。
請求可能
特性をモデル定義に追加します。この特性は、サブスクリプションの作成、クーポンの使用、クレジット カード情報の更新などの一般的な支払いタスクを実行するための複数のメソッドを提供します。
use Laravel\Cashier\Billable;class User extends Authenticatable{ use Billable; }
API キー最後に、構成 ファイルservices.php
で Stripe のキーを構成します。これらの Stripe API キー情報は、Stripe の公式 Web サイトの個人コントロール パネルで取得できます:
'stripe' => [ 'model' => App\User::class, 'key' => env('STRIPE_KEY'), 'secret' => env('STRIPE_SECRET'), ],
##ブレインツリーBraintree Notes
多くの場合、Stripe と Braintree は同じ方法で Cashier 機能を実装しており、どちらもクレジット カードによる定期購入の支払い機能を提供しており、Braintree は追加で PayPal による支払いもサポートしています。ただし、Braintree には、Stripe がサポートするいくつかの機能が欠けています。Stripe と Braintree のどちらを使用するかを決定する前に、次の点を考慮する必要があります:
- Braintree は PayPal をサポートしますが、Stripe はサポートしません。
- Braintree は
increment
メソッドとdecrement
メソッドをサポートしていません。これは Braintree の制限であり、Cashier の制限ではありません。 - Braintree はパーセントベースの割引をサポートしていません。これは Braintree の制限であり、Cashier の制限ではありません。
Composer
まず、Braintree の Cashier パッケージをプロジェクトの依存関係に追加します:
composer require "laravel/cashier-braintree":"~2.0"
Creditカード割引プラン
Cashierを使用する前に、まず Braintree コントロール パネルで
plan-credit
割引を定義する必要があります。この割引は、年払いや月払いなど、ユーザーが選択した支払いオプションに基づいて適切な割引率と一致します。Braintree コントロール パネルで設定された割引総額は必要に応じて入力でき、クーポンが使用されるたびに、キャッシャーが設定に従ってデフォルト値を上書きします。 Braintree では割引率に一致するサブスクリプション頻度の使用をサポートしていないため、このクーポンが必要です。
データベースの移行
Cashier の使用を開始する前に、データベースを準備する必要があります。レジ担当者は、データベースの
users
テーブルにいくつかの新しい列を追加し、顧客のサブスクリプション情報を保存する新しいsubscriptions
テーブルを作成する必要があります。Schema::table('users', function ($table) { $table->string('braintree_id')->nullable(); $table->string('paypal_email')->nullable(); $table->string('card_brand')->nullable(); $table->string('card_last_four')->nullable(); $table->timestamp('trial_ends_at')->nullable(); }); Schema::create('subscriptions', function ($table) { $table->increments('id'); $table->unsignedInteger('user_id'); $table->string('name'); $table->string('braintree_id'); $table->string('braintree_plan'); $table->integer('quantity'); $table->timestamp('trial_ends_at')->nullable(); $table->timestamp('ends_at')->nullable(); $table->timestamps(); });
1 回移行済み ファイルが作成されたら、Artisan の
merge
コマンドを実行します。請求可能モデル
次に、
請求可能
特性をモデル定義に追加します:use Laravel\Cashier\Billable; class User extends Authenticatable{ use Billable; }
# # API キー次に、services.php
ファイルで次のオプションを構成する必要があります:
'braintree' => [ 'model' => App\User::class, 'environment' => env('BRAINTREE_ENV'), 'merchant_id' => env('BRAINTREE_MERCHANT_ID'), 'public_key' => env('BRAINTREE_PUBLIC_KEY'), 'private_key' => env('BRAINTREE_PRIVATE_KEY'), ],
最後に、AppServiceProvider
サービスを提供する必要があります。プロバイダーの
bootメソッドに、次の Braintree SDK 呼び出しを追加します:
\Braintree_Configuration::environment(config('services.braintree.environment')); \Braintree_Configuration::merchantId(config('services.braintree.merchant_id')); \Braintree_Configuration::publicKey(config('services.braintree.public_key')); \Braintree_Configuration::privateKey(config('services.braintree.private_key'));
Currency Configurationboot
メソッドで
Cashier::useCurrencyメソッドを呼び出します。この
useCurrencyメソッドは、通貨と通貨記号という 2 つの文字列パラメーターを受け入れます。
use Laravel\Cashier\Cashier; Cashier::useCurrency('eur', '€');
##Subscribeサブスクリプションの作成
サブスクリプションを作成するには、まず Billable モデル インスタンスを取得する必要があります。通常、これは
App\User
のインスタンスです。モデル インスタンスを取得したら、newSubscription
メソッドを使用してモデルへのサブスクリプションを作成できます。$user = User::find(1); $user->newSubscription('main', 'premium')->create($stripeToken);
newSubscription
メソッドの最初のパラメーターは、サブスクリプションの名前。アプリケーションがサブスクリプションを 1 つだけ提供する場合は、それをmain
またはprimary
に設定できます。 2 番目のパラメータは、ユーザーが加入している Stripe/Braintree プランです。この値は、Stripe または Braintree の識別子に対応する必要があります。create
メソッドは、Stripe クレジット カード/ソース トークンを受け入れます。これにより、サブスクリプションが開始され、顧客 ID およびその他の関連する請求情報でデータベースが更新されます。ユーザーの追加の詳細
ユーザーの追加の詳細を指定したい場合は、それらを
create の 2 番目の引数として渡すことで指定できます。
メソッド:$user->newSubscription('main', 'monthly')->create($stripeToken, [ 'email' => $email, ]);
Stripe または Braintree でサポートされる追加フィールドの詳細については、Stripe の Content Creation Customer Documentation または対応する Braintree Documentation を参照してください。
Coupon
サブスクリプションの作成時にクーポンを使用したい場合は、
withCoupon
メソッドを使用できます:$user->newSubscription('main', 'monthly') ->withCoupon('code') ->create($stripeToken);
サブスクリプション ステータスの確認
ユーザーがアプリでサブスクリプションを完了したら、さまざまな便利な方法を使用して簡単にサブスクリプションを確認できます。状態。まず、ユーザーがアクティブなサブスクリプションを持っている場合、サブスクリプションが現在試用段階にある場合でも、
subscribed
メソッドはtrue
を返します:if ($user->subscribed('main')) { // }
this
subscribed
このメソッドはルーティング ミドルウェアでも使用でき、ユーザーのサブスクリプション ステータスに基づいてルートとコントローラーにアクセスできます。public function handle($request, Closure $next){ if ($request->user() && ! $request->user()->subscribed('main')) { // This user is not a paying customer... return redirect('billing'); } return $next($request); }
ユーザーがまだ試用段階にあるかどうかを確認したい場合は、次のようにします。
onTrial
メソッドを使用できます。このメソッドは、まだ試用期間中であることをユーザーに警告するのに役立ちます。if ($user->subscription('main')->onTrial()) { // }
指定された Stripe/Braintree プラン ID に基づいて、
subscribedToPlan
メソッドを使用して、ユーザーがプランに加入しているかどうかを判断します。この例では、ユーザーのmain
サブスクリプションでmonthly
プランがアクティブ化されているかどうかを判断します。ユーザーが現在すでに登録されており、試用段階ではなくなっているかどうかを確認します:if ($user->subscribedToPlan('monthly', 'main')) { // }
または、キャンセルされたサブスクリプションのステータス
ユーザーが一度サブスクリプションを行ったが、サブスクリプションをキャンセルしたかどうかを確認するには、
canceled
メソッドを使用できます。if ($user->subscription('main')->recurring()) { // }
ユーザーがサブスクリプションをキャンセルしたが、サブスクリプションが完全に期限切れになるまでサブスクリプションの「猶予期間」内にあるかどうかを判断します。たとえば、ユーザーが 3 月 10 日に期限切れになるサブスクリプションを 3 月 5 日にキャンセルした場合、ユーザーには 3 月 10 日までの「猶予期間」が与えられます。この間、
subscribed
メソッドは引き続きtrue
を返すことに注意してください:if ($user->subscription('main')->cancelled()) { // }
ユーザーが購読を解除した時間が「猶予期間」内かどうかを確認したい場合"、
終了
メソッドを使用できます:if ($user->subscription('main')->onGracePeriod()) { // }
サブスクリプションプランの変更
ユーザーアプリケーションの購読後、新しい購読プランへの変更が必要になる場合があります。ユーザーを新しいサブスクリプションに切り替えるには、サブスクリプション プランの識別子を
swap
メソッドに渡します。if ($user->subscription('main')->ended()) { // }
ユーザーが試用期間中の場合、試用期間の期間は保持されます。また、購読数に応じて「シェア」がある場合は、そのシェアも維持されます。
ユーザーのサブスクリプション プランを変更するときにユーザーの現在のサブスクリプションの試用期間をキャンセルしたい場合は、
skipTrial
メソッドを使用できます:$user = App\User::find(1); $user->subscription('main')->swap('provider-plan-id');
サブスクリプション
{注} サブスクリプションは、Cashier's Stripe でのみサポートされています。 Braintree には、Stripe に相当する「数量」機能がありません。
サブスクリプションは「数量」の影響を受ける場合があります。たとえば、アプリの料金は、アカウントごとに $10/月となります。 incrementQuantity
メソッドと
decrementQuantityメソッドを使用して、サブスクリプションを簡単に増減できます。
$user->subscription('main') ->skipTrial() ->swap('provider-plan-id');
updateQuantity
メソッドを使用して、特定の数量を設定します:
$user = User::find(1); $user->subscription('main')->incrementQuantity(); // 对当前的订阅量加5... $user->subscription('main')->incrementQuantity(5); $user->subscription('main')->decrementQuantity(); // 对当前的订阅量减5... $user->subscription('main')->decrementQuantity(5);
noProrate
メソッドを使用すると、料金を設定せずにサブスクリプションの数量を更新できます:
$user->subscription('main')->updateQuantity(10);
サブスクリプション数量に関する詳細情報を取得するには詳細については、サブスクリプション税額請求モード
taxPercentageメソッドを実装し、サブスクリプションでユーザーが支払う税率パーセンテージを指定するために使用される、小数点以下 2 桁以下の 0 ~ 100 の数値を返します。
taxPercentage$user->subscription('main')->noProrate()->updateQuantity(10);
メソッドを使用すると、モデル ベースで税率を適用できます。これは、複数の国と税率にまたがるユーザー ベースに役立つ場合があります。
{注意}taxPercentage
メソッドは、有料サブスクリプション モデルにのみ適用されます。チャージを使用して「1 回限り」のチャージを行う場合は、同時に税率を手動で指定する必要があります。
税率の同期
taxPercentage
メソッドによって返されるハードコードされた値を変更する場合、ユーザーの既存のサブスクリプションの税率設定は変更されません。返されたtaxPercentage
値を使用して既存のサブスクリプションの税率を更新する場合は、ユーザーのサブスクリプション インスタンスでsyncTaxPercentage
メソッドを呼び出す必要があります:public function taxPercentage() { return 20; }
サブスクリプション アンカー日
{注} サブスクリプション アンカー日の変更をサポートしているのは、Stripe in Cashier のみです。
デフォルトでは、請求サイクルはサブスクリプションが作成された日付、または試用期間を使用している場合は試用が終了する日付に固定されます。請求アンカー日を変更する場合は、
anchorBillingCycleOn
メソッドを使用できます。$user->subscription('main')->syncTaxPercentage();
サブスクリプション請求サイクルの管理の詳細については、Stripe 請求サイクルのドキュメント##を参照してください。
サブスクリプションのキャンセルユーザー サブスクリプションのcancel
メソッドを呼び出して、 subscription:
use App\User;use Carbon\Carbon; $user = User::find(1); $anchor = Carbon::parse('first day of next month'); $user->newSubscription('main', 'premium') ->anchorBillingCycleOn($anchor->startOfDay()) ->create($stripeToken);
サブスクリプションがキャンセルされると、Cashier はデータベースにends_at
列を自動的に設定します。この列は、
subscribedフィールドがいつ
falseを返し始めるかを知るためによく使用されます。たとえば、顧客が 3 月 1 日にサブスクリプションをキャンセルしたが、サブスクリプション プランが 3 月 5 日まで終了しない場合、
subscribedメソッドは 3 月 5 日まで
trueを返し続けます。
onGracePeriod
メソッドを使用して、ユーザーが確実に購読しているかどうかを判断できますが、まだ「猶予期間」が残っています:
$user->subscription('main')->cancel();
キャンセルしたい場合サブスクリプションをすぐにキャンセルするには、ユーザーのサブスクリプションのcancelNow
メソッドを呼び出してサブスクリプションをキャンセルしてください:
if ($user->subscription('main')->onGracePeriod()) { // }
サブスクリプションを再開するユーザーがサブスクリプションをキャンセルした場合、サブスクリプションを再開したい場合は、resume
#トライアル サブスクリプションメソッドを使用できます。ユーザー
は、サブスクリプションを再開する前に、猶予期間内である必要があります:$user->subscription('main')->cancelNow();
ユーザーがサブスクリプションをキャンセルし、サブスクリプション猶予期間内に再開した場合、ユーザーはサブスクリプションを再開できません。すぐに料金が計算されます。代わりに、サブスクリプションが再アクティブ化され、元の支払いプロセスに従って再度支払う必要があります。クレジット カードによるサブスクリプション
支払い方法情報の収集中に顧客に試用期間を提供したい場合は、サブスクリプションの作成時に
trialDays
メソッドを使用する必要があります:$user->subscription('main')->resume();
このメソッドは、データベース サブスクリプション レコードにサブスクリプション期間の終了時刻を設定して、それ以前にユーザーの請求情報を計算しないように Sripe/Braintree に指示します。
{注}顧客が試用期間が終了する前にキャンセルしない場合、サブスクリプションは自動的に請求されるため、ユーザーに試用期間の終了を必ず通知する必要があります。
trialUntil
メソッドでは、DateTime
インスタンスを提供することで試用期間の終了期間を指定できます。$user = User::find(1);$user->newSubscription('main', 'monthly') ->trialDays(10) ->create($stripeToken);
onTrial を使用できます。ユーザー インスタンスの ## メソッドまたはサブスクリプション インスタンスの
onTrialメソッドによって、ユーザーが試用期間中かどうかが決まります。次の 2 つの例は同等です:
use Carbon\Carbon;$user->newSubscription('main', 'monthly') ->trialUntil(Carbon::now()->addDays(10)) ->create($stripeToken);
Non-Credit Card SubscriptionIf you don't want to do試用期間を利用できるようにする ユーザーの支払い方法情報を収集するには、ユーザー レコードのtrial_ends_at
列を希望の試用終了日に設定するだけです。これは通常、ユーザー登録時に行われます:
if ($user->onTrial('main')) { // } if ($user->subscription('main')->onTrial()) { // }
{注 }
Cashier は、既存のサブスクリプションに関連付けられていないため、このタイプの参照を「汎用エクスペリエンス」と呼びます。現在の日付がtrial_ends_at
日付修飾子をモデル定義に追加していることを確認してください。
trail_ends_at
値を超えていない場合、
Userインスタンスの
onTrialメソッドは
true:
$user = User::create([ // Populate other user properties... 'trial_ends_at' => now()->addDays(10), ]);
## を返します。 # ユーザーが「汎用」試用期間中であり、実際のサブスクリプションをまだ作成していないことを明示的に知りたい場合は、onGenericTrialメソッドを使用できます。ユーザーの実際のサブスクリプションを作成します。サブスクライブするには、通常、
newSubsription
メソッドを使用します:if ($user->onTrial()) { // 用户在他们的试用期内... }
createAsStripeCustomerメソッドを使用して実行できます。
Stripe で顧客を作成したら、後でサブスクリプションを開始できます。if ($user->onGenericTrial()) { // 用户在他们「一般」试用期... }
createAsBraintreeCustomer{ヒント} Braintree で顧客を作成するには、
メソッドを使用します。 ###########################バンクカード#####################
クレジット カードの受け取り
インスタンスのコレクションを返します:請求可能モデル インスタンスの
Laravel\Cashier\Cardcards
メソッドは、$user = User::find(1); $user->newSubscription('main', 'monthly')->create($stripeToken);
デフォルトのカードを取得するには、defaultCard メソッドを使用できます;$user->createAsStripeCustomer();
カード番号がファイルに記録されていることを確認してください
hasCardOnFile
メソッドを使用して、顧客が自分のアカウントにクレジット カードを保存しているかどうかを確認できます:$cards = $user->cards();
UpdateCard
updateCard
メソッドを使用して、ユーザーのクレジット カード情報を更新できます。このメソッドは、Stripe トークンと新しいクレジット カードをデフォルトの支払い元として設定します。:$card = $user->defaultCard();
Stripe がカード情報を顧客のデフォルトのカード情報と同期するには、
updateCardFromStripe
メソッドを使用できます:if ($user->hasCardOnFile()) { // }
クレジット カードの削除
カードを削除するには、まず
cards
を使用して顧客のカードを取得する必要があります。方法。その後、削除するカード インスタンスでdelete
メソッドを呼び出すことができます。$user->updateCard($stripeToken);
{注} デフォルトのカードを削除する場合は、必ず # を使用してください。 ##updateCardFromStripe
メソッド 新しいデフォルト カードをデータベースと同期します。
deleteCards
メソッドは、アプリケーションによって保存されているすべてのユーザーのカード情報を削除します。
$user->updateCardFromStripe();
{注} ユーザーがすでにサブスクリプションを持っている場合は、最後に残っている支払い方法を削除できないようにすることを検討する必要があります。
#Stripe Webhook の処理Stripe と Braintree は両方とも、Webhook イベントを通じてさまざまなタイプのアプリケーションに通知できます。 Stripe Webhook を処理するには、Cashier の Webhook コントローラーへのルートを定義する必要があります。このコントローラーは、すべての受信 Webhook リクエストを処理し、適切なコントローラー メソッドにディスパッチします。
foreach ($user->cards() as $card) { $card->delete(); }
{注} ルートが登録されたら、Stripe コントロール パネル URL で Webhook を必ず設定してください。デフォルトでは、このコントローラーは、支払い失敗が多すぎるサブスクリプションを自動的にキャンセルします (この数は Stripe 設定で定義できます)。さらに、このコントローラーを拡張して処理できることもすぐにわかります。処理したい Webhook イベント。
{注意} 受信リクエストを保護するために、Cashier の Webhook 署名検証ミドルウェアを必ず使用してください。Webhook と CSRF 保護Stripe Webhook は Laraval の CSRF 保護をバイパスする必要があるため、必ず
VerifyCsrfTokenに含めてください。ミドルウェア URI を含めるか、
web
ミドルウェア グループの外に配置します:$user->deleteCards();
Webhook イベント ハンドラーを定義する
Cashier は失敗した支払いのサブスクライブを自動的に解除しますが、処理したい他の Stripe Webhook イベントがある場合は、Webhook コントローラーを拡張できます。メソッド名は、Cashier が期待する規則と一致する必要があります。具体的には、Stripe Webhook を処理するメソッドには、名前の前に
handle
と「camelCase」を付ける必要があります。たとえば、invoice.payment_succeeded
Webhook を処理したい場合は、handleInvoicePaymentSucceeded
メソッドをコントローラーに追加する必要があります。Route::post( 'stripe/webhook', '\Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook' );
次に、
routes でCashier コントローラーのルートは /web.php
ファイルで定義されています:protected $except = [ 'stripe/*', ];
Subscription failed
If ユーザーのクレジット カードの有効期限が切れたらどうすればよいですか?心配しないでください。Cashier には、ユーザーの登録を簡単に解除できる Webhook コントローラーが含まれています。上で述べたように、必要なのは、コントローラーへのルートを指定することだけです。
<?php namespace App\Http\Controllers; use Laravel\Cashier\Http\Controllers\WebhookController as CashierController; class WebhookController extends CashierController{ /** * Handle invoice payment succeeded. * * @param array $payload * @return \Symfony\Component\HttpFoundation\Response */ public function handleInvoicePaymentSucceeded($payload) { // 此处处理事件 } }
以上です。失敗した支払いはコントローラーによって取得および処理され、Stripe がサブスクリプションが失敗したと判断した後 (通常は支払い試行が 3 回以上失敗した場合)、ユーザーのサブスクリプションはキャンセルされます。
Webhook 署名の検証Webhook を保護するには、Stripe の Webhook 署名#を使用する必要があります。 ## 。便宜上、Cashier には、Stripe Webhook に渡されたリクエストが有効であることを検証するミドルウェアが含まれています。 Webhook 認証を有効にする場合は、
Stripe.webhook.secretの値が
services
構成ファイルで設定されていることを確認してください。 Webhook のsecret
は、Stripe ユーザー コントロール パネルから見つけることができます。Braintree Webhook の処理Stripe と Braintree はどちらも、Webhook を通じてさまざまなイベントをアプリケーションに通知できます。 Braintree Webhook を処理するには、Cashier Webhook コントローラーへのルートを定義する必要があります。このコントローラーはすべての受信 Webhook リクエストを処理し、適切なルーター メソッドにディスパッチします:
Route::post( 'stripe/webhook', '\App\Http\Controllers\WebhookController@handleWebhook' );
{注} ルートが登録されたら、Webhook URL が Braintree コントローラー パネルで設定されていることを確認してください。デフォルトでは、このコントローラーは、支払い失敗が多すぎるサブスクリプションを自動的にキャンセルします (この数は Braintree 設定で定義できます)。さらに、このコントローラーを次の目的に拡張できることもすぐにわかります。処理したい Webhook イベントを処理します。
Webhook と CSRF 保護Braintree Webhook は Laravel の CSRF 保護をバイパスする必要があるため、
VerifyCsrfTokenミドルウェア リスト URI に必ず含めてください。または、
web
ミドルウェア グループの外に配置します:Route::post( 'stripe/webhook', '\Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook' );
Webhook イベント ハンドラーを定義する
Cashier は失敗した支払いのサブスクライブを自動的に解除しますが、処理したい他の Braintree Webhook イベントがある場合は、Webhook コントローラーを拡張できます。メソッド名は、Cashier が期待する規則と一致する必要があります。具体的には、Braintree Webhook を処理するメソッドには、名前の前に
handle
と「camelCase」を付ける必要があります。たとえば、dispute_opened
Webhook を処理したい場合は、handleDisputeOpened
メソッドをコントローラーに追加する必要があります:Route::post( 'braintree/webhook', '\Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook' );
サブスクリプションに失敗しました
ユーザーのクレジット カードの有効期限が切れたらどうなりますか?心配しないでください。Cashier には、ユーザーの登録を簡単に解除できる Webhook コントローラーが含まれています。ルートをコントローラーに向けるだけです:
protected $except = [ 'braintree/*', ];
以上です!失敗した支払いはコントローラーによってキャプチャされて処理され、Braintree がサブスクリプションが失敗したと判断した後 (通常は支払い試行が 3 回以上失敗した場合)、ユーザーのサブスクリプションがキャンセルされます。忘れないでください: Braintree コントローラー パネルで Webhook URI を設定します。 ########################1回払い###################### # #Simple Payment
{注} Stripe を使用する場合、charge
メソッドは、# で使用される通貨の最小単位で支払いたい金額を受け入れます。 ## 応用。ただし、Braintree を使用する場合は、全額をchargeに渡す必要があります。 メソッド:
加入者のクレジット カードに「1 回限り」料金を請求する場合は、次のようにします。請求可能なモデル インスタンスで charge
メソッドを使用できます。<?php namespace App\Http\Controllers; use Braintree\WebhookNotification; use Laravel\Cashier\Http\Controllers\WebhookController as CashierController; class WebhookController extends CashierController{ /** * Handle a new dispute. * * @param \Braintree\WebhookNotification $webhook * @return \Symfony\Component\HttpFoundation\Responses */ public function handleDisputeOpened(WebhookNotification $webhook) { // 此处处理时事件... } }
charge
メソッドは 2 番目のパラメーターとして配列を受け取り、任意のオプションを追加できます。 want は、基礎となる Stripe/Braintree に渡されます。支払いの作成時に使用できるオプションについては、Stripe または Braintree のドキュメントを参照してください。Route::post( 'braintree/webhook', '\Laravel\Cashier\Http\Controllers\WebhookController@handleWebhook' );
支払いが失敗した場合、
charge
メソッドは例外をスローします。支払いが成功すると、このメソッドは完全な Stripe / Braintree レスポンスを返します:// Stripe 接收分为单位的费用... $stripeCharge = $user->charge(100); // Braintree 接收美元为单位的费用... $user->charge(1);
料金と請求書
場合によっては、1 回限りの料金を支払う必要があり、PDF ファイル形式で領収書を顧客に提供できるように料金請求書を作成する必要がある場合もあります。
invoiceFor
メソッドを使用すると、これを行うことができます。たとえば、$5.00 の「1 回限りの料金」を顧客に請求するには:$user->charge(100, [ 'custom_option' => $value, ]);
請求書はすぐにユーザーのクレジット カードに請求されます。
invoiceFor
このメソッドは 3 番目の引数として配列を受け取り、支払いを作成するときに基礎となる Stripe/Braintree に任意のオプションを渡すことができます:try { $response = $user->charge(100); } catch (Exception $e) { // }
Braintree を使用している場合請求プロバイダーの場合、
invoiceFor
メソッドを呼び出すときにdescription
オプションを含める必要があります:// Stripe 接收分为单位的费用... $user->invoiceFor('One Time Fee', 500); // Braintree 接收美元为单位的费用... $user->invoiceFor('One Time Fee', 5);
{Note}
invoiceFor
メソッド A Stripe請求書が作成され、支払いが失敗した場合は再試行されます。失敗後に再試行したくない場合は、最初の支払いが失敗した後に Stripe API を呼び出してそれを閉じる必要があります。返金について
返金を処理する必要がある場合は、
refund を使用してください。 ### 方法。このメソッドは、Stripe 請求 ID を唯一のパラメータとして受け入れます:
$user->invoiceFor('Stickers', 500, [ 'quantity' => 50, ], [ 'tax_percent' => 21, ]);
Invoiceinvoices を使用できます。
請求モデルの請求書配列を簡単に取得する方法:
$user->invoiceFor('One Time Fee', 500, [ 'description' => 'your invoice description here', ]);
顧客請求書のリストをリストする場合、請求書ヘルパー関数を使用して、関連する請求書情報を表示できます。たとえば、各請求書を表にリストして、顧客がダウンロードしやすくすることができます。$stripeCharge = $user->charge(100); $user->refund($stripeCharge->id);
Generate PDF請求書ルートまたはコントローラーで、downloadInvoice
メソッドを使用して請求書の PDF ダウンロードを生成します。このメソッドは、ブラウザーに対して適切な HTTP ダウンロード応答を自動的に生成します。
$invoices = $user->invoices(); // 结果包含处理中的发票... $invoices = $user->invoicesIncludingPending();
この記事は、LearnKu.com Web サイトで最初に公開されました。
- # 料金請求書付き PDF を生成