【Laravel5.8+Stripe⑨】サブスクリプションプラン変更機能の実装

f:id:nekorokkekun:20190827102831p:plain:w1000
こちらの連載記事では、LaravelとStripeを使用して企業サイト兼Eコマース(ECサイト)を作成していきます。

Laravelのプロジェクト作成からStripeの実装まで行い、最終的に単発決済・サブスクリプションの実装までを目指します。

シリーズ

【Laravel5.8+Stripe⓪】ECサイト作成チュートリアル概要 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe①】ベースプロジェクトの作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe②】メールフォームの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe③】ユーザー認証機能のカスタマイズ - Laravelとねころっけくん5.8
【Laravel5.8+Stripe④】ディスカウントページを作成する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑤】Laravel CasherとStripeを導入して管理者権限を設定する その1 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑥】Laravel CasherとStripeを導入して管理者権限を設定する その2 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑦】サブスクリプション決済の作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑧】請求書ダウンロード機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑨】サブスクリプションプラン変更機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑩】サブスクリプション中止機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe11】Webhookの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe12】クーポン機能を実装する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe13】ショッピングカートの実装 - Laravelとねころっけくん5.8


ちなみにこちらの記事は、Easy E-Commerce Using Laravel and Stripeという書籍をもとに執筆しています。

今回は、サブスクリプションプランの変更機能を実装していきます。

サブスクリプションプラン変更機能の概要

顧客がサブスクリプションプランをアップグレードまたはダウングレードしたい場合があります。Laravel Cashierでは、Userモデルのswap()メソッドを使用することにより、簡単に実装することができるようになっています。

サブスクリプションプラン変更機能の実装

まずはプラン変更用のルーティングから行います。

Route::post('plans/swap','SubscriptionsController@swapPlans')->name('plans.swap');


次にSubscriptionControllerへアクションを追加します。

/app/Http/Controllers/SubscriptionsController.php

    public function swapPlans(Request $request)
    {
      $planId = $request->get('plan_id');
      if ($this->planNotAvailable($planId)) {
          return redirect()->back()->withErrors('Plan is required');
      }
      Auth::user()->subscription('main')->swap($planId);
      return redirect()->back()->withMessage('Plan changed!');
    }

View側にプラン変更フォームを追加します。

// 省略
    @endforeach
</table>

{!! Form::open(['route' => 'plans.swap', 'class' => 'form-horizontal']) !!}
  <select name="plan_id" class="form-control" id="plan_id">
    <option value="plan_FduAwOAXHAUV4D">Trial / $10 per month</option>
    <option value="plan_Fdu9EtdLJBzXnS">Regular / $30 per month</option>
    <option value="plan_Fdu92JzwGqspER">Premium / $50 per month</option>
  </select>
  <button type="submit" class="btn btn-default">Swap Plans</button>
{!! Form::close() !!}
@endsection

ただ、この状態だとエラーが出てしまいます。
nekorokkekun.hatenablog.com

そのため、/config/services.phpを改変します。

    'stripe' => [
        'model'  => \App\User::class, // ここを改変
        'secret' => env('STRIPE_API_SECRET'),
    ],

これでサブスクリプションプラン変更機能の実装が完了しました。

連載記事

【Laravel5.8+Stripe⓪】ECサイト作成チュートリアル概要 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe①】ベースプロジェクトの作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe②】メールフォームの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe③】ユーザー認証機能のカスタマイズ - Laravelとねころっけくん5.8
【Laravel5.8+Stripe④】ディスカウントページを作成する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑤】Laravel CasherとStripeを導入して管理者権限を設定する その1 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑥】Laravel CasherとStripeを導入して管理者権限を設定する その2 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑦】サブスクリプション決済の作成 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑧】請求書ダウンロード機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑨】サブスクリプションプラン変更機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe⑩】サブスクリプション中止機能の実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe11】Webhookの実装 - Laravelとねころっけくん5.8
【Laravel5.8+Stripe12】クーポン機能を実装する - Laravelとねころっけくん5.8
【Laravel5.8+Stripe13】ショッピングカートの実装 - Laravelとねころっけくん5.8