Laravel PHP プログラミング

【laravel】payjpとの連携方法

laravel-payjp

 

今回はlaravelとpayjpとの連携方法について解説をします。

payjpとはクレジットカード決済代行サービスで

Webサービスと連携することでサブスクリプションサービスを

作ることができます。

近年サブスクリプションのアプリがとてもふえているので

この機会に使い方をマスターしましょう!

 

テーブル構成

 

テーブル構成は作りたいもので変わると思いますが

一例として載せておきます。

 migration
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('email')->nullable(false);
$table->timestamp('email_verified_at')->nullable();
$table->tinyInteger('email_verified')->default(0);
$table->string('email_verify_token')->nullable();
$table->string('password')->nullable(false);
$table->string('corporate_id')->nullable(false)->unique();
//ここから追加
$table->string('payjp_customer_id')->nullable()->comment('payjp顧客ID');
//ここまで追加
$table->rememberToken();
$table->timestamps();
});
}

payjpのインストール

公式のgit.hubは以下となります。

https://github.com/payjp/payjp-php

 terminal
composer require payjp/payjp-php

 

payjp環境変数設定

.envファイルにpay.jpの環境変数をセットしてください。

 

 .env
PAYJP_PUBLIC_KEY=pk_XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
PAYJP_SECRET_KEY=sk_XXXXXXXXXXXXXXXXXXXXXXXXXXXXX

次にconfig配下にpayjp.php を作成します。

 payjp.php
return [
'public_key' => env('PAYJP_PUBLIC_KEY', ''),
'secret_key' => env('PAYJP_SECRET_KEY', ''),
];

 

payjpと連携するためのRoutes Controller Bladeの作成

 web.php
Route::get('payment', [App\Http\Controllers\UserController::class, 'index'])->name('payment');
Route::post('payment', [App\Http\Controllers\UserController::class, 'payment']);

 

 

 controller
public function payment(Request $request)
{
if (empty($request->get('payjp-token'))) {
abort(404);
}
DB::beginTransaction();
try {
// ログインユーザー情報
$user = auth()->user();
// キーを設定
\Payjp\Payjp::setApiKey(config('payjp.secret_key'));
// 顧客情報登録
$customer = \Payjp\Customer::create([
// カード情報も合わせて登録する
'card' => $request->get('payjp-token'),
// 概要
'description' => "userId: {$user->id}, userName: {$user->name}",
]);
// DBにpayjpの顧客idを登録
$user->payjp_customer_id = $customer->id;
$user->save();
// 継続課金処理
\Payjp\Subscription::create([
// 上記で登録した顧客のidを指定
"customer" => $customer->id,
"plan" => $request->input('plan'),

]);
DB::commit();
return redirect(route('payment'))->with('message', '支払いが完了しました');
} catch (\Exception $e) {
Log::error($e);
DB::rollback();
return redirect()->back();
}
}

 

 blade
<form action="{{ route('payment') }}" method="post">
@csrf
<script
src="https://checkout.pay.jp/"
class="payjp-button"
data-key="{{ config('payjp.public_key') }}"
data-text="カード情報を入力"
data-submit-text="カードを登録する"
></script>
<input type="hidden" name="plan" value="作成したプランIDを記入">
</form>

 

payjp定期課金プラン作成

 

ホーム画面→プラン→プランを作成をクリック

以下のように入力をして保存をクリック。

 

payjpプラン作成

 

 

作成後プランIDを先ほど作成したbladeファイルのvalue属性に設定してください。

 

実際に使ってみよう!

 

テスト用で使えるカード情報は以下のリンクにあります。

https://pay.jp/docs/testcard

有効期限、CVC番号、名前は適当で大丈夫です。

カードを登録後Pay.jpホーム画面の定期課金に情報が

反映されていれば正常に動作しています。

 

まとめ

今回はlaravelとpayjpの連携方法について解説をしました。

良いアプリは収益も上げることが

できるのでもし実装に困っているのであれば

参考になれば幸いです!

youtubeでlaravelでSNS風アプリの動画もあるので

laravelでアプリを作ってみたい人はぜひみてみてください!

 

-Laravel, PHP, プログラミング