【Stripe】Laravelでサクッと決済 【単発】

LaravelでStripeと連携して単発決済を行う

Stripeのキー情報を取得

コンソールからキー情報をゲットする

  • .env編集
STRIPE_PUBLIC_KEY={公開可能キー}
STRIPE_SECRET_KEY={シークレットキー}
  • config/services.phpに追記
'stripe' => [
        'public_key' => env('STRIPE_PUBLIC_KEY'),
        'secret_key' => env('STRIPE_SECRET_KEY'),
],

composerでパッケージインストール

  • stripeでの決済を簡単に行うためのパッケージを入れる

https://readouble.com/laravel/10.x/ja/billing.html

composer require laravel/cashier

早速使ってみる

  • routes/web.php
use App\Http\Controllers\StripePaymentController;

// 決済画面表示
Route::get('/payment', [PaymentController::class, 'index'])->name('payment.index');
// 決済処理実行
Route::post('/payment', [PaymentController::class, 'store'])->name('payment.store');
  • resources/views/payment/index.blade.php
<h2>決済ボタン表示</h2> 
<form action="{{ route('payment.store') }}" method="post">
  @csrf
  <script
    src="https://checkout.stripe.com/checkout.js"
    class="stripe-button"
    data-key="{{ config('services.stripe.public_key') }}"
    data-amount="1000"
    data-name="決済フォーム"
    data-label="決済する"
    data-description="単発決済: 1,000円"
    data-image="https://stripe.com/img/documentation/checkout/marketplace.png"
    data-locale="auto"
    data-currency="JPY"
  ></script>
</form>

https://checkout.stripe.com/checkout.jsを使用することで、
簡単に決済フォームが生成できる

ここで各種情報を入力して支払うボタンを押下すると、
入力情報チェックをJSで行ってくれる。

入力内容がOKの場合、
<form>に設定されているアクション (StripePaymentController::store())にstripeEmail, stripeToken, priceがPOSTされるので、その情報を使用して決済実行や必要に応じてDB登録などを行う

  • PaymentController.php
// (...省略)

use Stripe\Stripe;
use Stripe\Customer;
use Stripe\Charge;

class StripePaymentController extends Controller
{
    /**
     * 決済画面表示
     */
    public function index()
    {
        return view('payment.index');
    }
    
    /**
     * 決済処理実行
     */ 
    public function store(Request $request)
    {
        try {
          // APIキーをセットする
          Stripe::setApiKey(config('services.stripe.secret_key'));
          // 顧客を登録
          $customer = Customer::create(array(
            'email' => $request->stripeEmail,
            'source' => $request->stripeToken
          ));
          // 顧客に紐づく決済を登録
          $charge = Charge::create(array(
            'customer' => $customer->id,
            'amount' => 1000, // ここの金額はrequestで受け取るなりstore内で生成するなり
            'currency' => 'jpy'
          ));

          // DBに登録が必要な場合は$customerや$chargeの情報を使用する

          return redirect(route('payment.index', ['message' => '決済が完了しました!']));
       
        } catch (\Exception $e) {
          Log::error($e->getMessage());
          return redirect(route('payment.index', ['message' => '決済に失敗しました...']));
        }
    }
}

テストカードはこちら

https://stripe.com/docs/testing#cards
上記を使用することで、
実際のカードを使用せずにテスト決済の実行や失敗テストなどができる

\ 案件のご依頼・ご相談はこちらから /