決済サービスStripe+Laravelで決済フォームを作る

決済サービスとして人気なStripeを使用して決済フォームを作成してみます。

以前GMO Paymentサービスを利用した際の導入コストや使用感などの比較検討を行い、要件にあったサービス選択を行う判断基準と学習を目的とします。

・環境

Laravel 10.3
PHP 8.1
nginx
MySQL
Stripe

1. Stripeとは


Stripeは2011に誕生した、ユーザーの事業者アカウントと決済代行会社の間で送金を行うことでクレジットカード(直接またはオンライン)での支払いを可能にする決済代行サービスです。

クレジットカード処理端末、もしくはオンラインのプロセッサを介して、支払い処理が行われます。

出典:
https://kinsta.com/jp/blog/stripe-vs-square/#:~:text=Stripe%E3%81%AF2011%E3%81%AB%E8%AA%95%E7%94%9F,%E5%87%A6%E7%90%86%E3%81%8C%E8%A1%8C%E3%82%8F%E3%82%8C%E3%81%BE%E3%81%99%E3%80%82


また、Stripeは初期費用・運用コスト0円で、利用料は決済手数料のみで導入可能なオンライン決済プラットフォームのため、昨今人気が高まっています。

1-1. Stripeアカウントの作成

まずはStripeのアカウントを作成します。

メールアドレス+名前+PWを求められるので、登録し、登録後は登録メールアドレスに対してメールが送信されるので、そちらを確認します。

メールに添付してあるリンクを押下し、ホーム画面へと遷移すると、下図のようなダッシュボードが表示されます。


画面右上のテスト環境がオンになっていることを確認し、右上の開発者リンクを押下します。

すると、下図のような開発者向けダッシュボードに遷移しますので、タブからAPIキーを選択します。

API公開可能キーとシークレットキーが表示されているので、こちらをコピーして、Laravel環境の.envファイルに貼り付けを行います。

1-2. env情報の設定

アクセスキーを.envに設定します。

.env

STRIPE_PUBLIC_KEY=pk_test_51xxxxxxxxxxxxxxxxxxx
STRIPE_SECRET_KEY=sk_test_51xxxxxxxxxxxxxxxxxxx

続いて、env呼び出し用のconfigファイルを作成します。

config/stripe.phpを作成し、定数として定義します。

config/stripe.php

<?php
return [
    'stripe_public_key' => env('STRIPE_PUBLIC_KEY'),
    'stripe_secret_key' => env('STRIPE_SECRET_KEY'),
];

これでアクセスキーの設定は完了です。

1-3. SDKの導入

composerを使用して、Stripeライブラリをインストールします。

$ composer require stripe/stripe-php

これでLaravel側でStripeのライブラリを使用して開発ができるようになります。

1-4. 実装

決済フォームの作成

まずコントローラーを作成します。

ここではPaymentController.phpとします。

<?php
PaymentController.php

namespace App\Http\Controllers;

class PaymentController extends Controller
{
    /**
     * 決済フォーム表示
     */
    public function create()
    {
        return view('payment.create');
    }
}

routeを記述しておきます。

Route::prefix('payment')->name('payment.')->group(function () {
    Route::get('/create', [PaymentController::class, 'create'])->name('create');
    Route::post('/store', [PaymentController::class, 'store'])->name('store');
});

続いて、viewを作成します。

app/resources/view/以下にcreate.blade.phpを作成します。

<div class="container">
    <div class="p-5">
        <div class="col-6 card">
            <div class="card-header">Stripe決済</div>
            <div class="card-body">
                <form id="card-form" action="#" method="POST">
                    @csrf
                    <div>
                        <label for="card_number">カード番号</label>
                        {{ Form::text(

1-5. 終わりに

次回は決済の中身の実装を行いたいと思います。

使ってみた感じ、かなり直感的に使え、難しい部分もないため、導入コストをかなり抑えた実装が可能なんじゃないかといった所見でした。