今回は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定期課金プラン作成
ホーム画面→プラン→プランを作成をクリック
以下のように入力をして保存をクリック。
作成後プランIDを先ほど作成したbladeファイルのvalue属性に設定してください。
実際に使ってみよう!
テスト用で使えるカード情報は以下のリンクにあります。
有効期限、CVC番号、名前は適当で大丈夫です。
カードを登録後Pay.jpホーム画面の定期課金に情報が
反映されていれば正常に動作しています。
まとめ
今回はlaravelとpayjpの連携方法について解説をしました。
良いアプリは収益も上げることが
できるのでもし実装に困っているのであれば
参考になれば幸いです!
youtubeでlaravelでSNS風アプリの動画もあるので
laravelでアプリを作ってみたい人はぜひみてみてください!