決済機能記事第二弾!今回はPAY.JPという決済サービスを利用した決済をLaravel内に実装してみます。
今回やること
- PAY.JPアカウントの作成
- Laravelへパッケージの導入
- 決済フォームの組み込み
- サーバーサイドでの決済の実行
さっそく実践
PAY.JPアカウント作成
まずはPAY.JPにアカウントを作成していきます。
PAY.JPにアクセスして「申し込み」をクリックしてください。
メールアドレスとパスワードを入力し、登録ボタンをクリックしてください。
登録が完了すると管理画面が表示されます。これで登録は完了です。簡単ですね。
Laravelへパッケージの導入
次にLaravelプロジェクト内でPAY.JPのライブラリを使えるようにするため、パッケージを導入します。
以下のコマンドを実行してください。
$ composer require payjp/payjp-php
これで導入は完了です。
続いて、環境変数を設定していきます。
管理画面のサイドメニューから「API」をクリックします。
APIキーの情報から「テスト秘密鍵」「テスト公開鍵」をコピーします。
.envに以下のように記述してください。
# PAYJP用keyを追加
PAYJP_PUBLIC_KEY=pk_XXXXXXXXXXXXXXXXXXXXXXXXXXXXX #テスト秘密鍵
PAYJP_SECRET_KEY=sk_XXXXXXXXXXXXXXXXXXXXXXXXXXXXX #テスト公開鍵
envを利用するため、config/payjp.phpを作成し、以下のように記述してください。
<?php
return [
'public_key' => env('PAYJP_PUBLIC_KEY'),
'secret_key' => env('PAYJP_SECRET_KEY'),
];
これで実装の準備は完了です。
決済フォームの組み込み
では実際に決済フォームを作成していきます。
PaymentControllerを作成します。
$ php artisan make:controller PaymentController
PaymentController.phpに以下のように記述してください。
<?php
namespace App\Http\Controllers;
/**
* 決済のサンプルコード
*/
class PaymentController extends Controller
{
public function create()
{
return view('payment');
}
}
routes/web.phpに以下のように記述してください。
Route::get('payment/create', [PaymentController::class, 'create'])->name('payment.create');
Route::post('payment/createCharge', [PaymentController::class, 'createCharge'])->name('payment.createCharge');
次にviewを作成します。
resources/views/payment.blade.phpを作成し、以下のように記述してください。
<h3>決済デモ</h3>
<form action="{{ route('payment.createCharge') }}" method="post">
@csrf
<script
src="https://checkout.pay.jp/"
class="payjp-button"
data-key="{{ config('payjp.public_key') }}"
data-text="カード情報を入力"
data-submit-text="カードを登録する"
></script>
</form>
http://localhost/payment/createにアクセスすると以下のような画面になります。
「カード情報を入力」を押下するとフォームが表示されます。
サーバーサイドでの決済の実行
それでは最後に決済を実行します。
PaymentController.phpを以下のようにしてください。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Payjp\Charge;
use Payjp\Payjp;
/**
* 決済のサンプルコード
*/
class PaymentController extends Controller
{
public function create()
{
return view('payment');
}
public function createCharge(Request $request)
{
Payjp::setApiKey(config('payjp.secret_key'));
// クレカトークンが送られる(tok_xxxxxxxxxxxxxxxxxxxx)
$token = $request->input('payjp-token');
Charge::create(array(
"card" => $token,
"amount" => 3500,
"currency" => 'jpy',
));
return back();
}
}
Payjp::setApiKeyにまずシークレットキーを渡します。
リクエストパラメータにはクレカのトークンが渡ってきます。
Payjp\Chargeクラスを使い、トークン、金額、通貨の配列を引数に渡すことで内部でAPIが叩かれて決済が実行されます。
では実際に決済を行なってみましょう。
テストのクレカ番号は4242424242424242です。あとは適当に入力して、登録するを押下してください。
これで決済が実行されました。
PAY.JPの管理画面のダッシュボードのグラフを見てみてください。売上金額に3500円が反映されているかと思います。
まとめ
さて、今回はPAY.JPで決済機能を実装してみました。とても簡単ですよね。
実際には決済の実行だけでなく、顧客の登録やクレカの登録のAPIなども使っていくかと思います。
他の実装はPAY.JP APIドキュメントを参考に実装してみてください。
次回はPAY.JPでの決済を例に、依存性の注入(DI)を解説していきたいと思います。