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

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

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


前回はフォームを作成したので、今回はStripeで決済の中身の実装を行っていきます。

・環境


Laravel 10.3
PHP 8.1
nginx
MySQL
Stripe

1. 実装

1-1. ユーザーの登録

前回Striipeのjsライブラリをcdnで読み込んでフォームを作成しましたが、カード情報の疎通は可能なものの、顧客情報と紐づけないとStripeのダッシュボードにデータが格納されないことが判明しましたので、ひとまず顧客情報と紐づけを行います。

StripeライブラリにCustomer Objectが存在するのでそちらを使用します。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Customer;
use Stripe\Charge;

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

    
    /**
     * 決済実行
     */
    public function store(Request $request)
    {
         try {
            Stripe::setApiKey(env('STRIPE_SECRET_KEY'));
            $customer = Customer::create(
                    [
                   ‘name’ => $request->name,
                    'email' => $request->email,
                    'source' => $request->stripeToken
                    ]
                );
        } catch (Exception $e) {
   &nb

1-2. 決済の登録

次に決済を実施してみます。

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Customer;
use Stripe\Charge;

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

    
    /**
     * 決済実行
     */
    public function store(Request $request)
    {
         try {
            Stripe::setApiKey(env('STRIPE_SECRET_KEY'));
            $customer = Customer::create(
                    [
                   ‘name’ => $request->name,
                    'email' => $request->email,
                    'source' => $request->stripeToken
                    ]
                );

        $charge = Charge::create([
                'customer' => $customer->id,
        &nbs

2. まとめ

今回はカード決済を実施してみましたが、機会があればカード以外の決済の対応もしてみたいと思います。

また実際のECサイトではDBに対して商品情報や在庫チェックなど様々な処理が必要になりますが、ミニマムで作成する場合このような感じになるかと思います。

APIリファレンスも確認しましたがかなり直感的に使えて組み込みやすい印象を受けました。