決済機能記事第二弾!今回はPAY.JPという決済サービスを利用した決済をLaravel内に実装してみます。

今回やること

  • PAY.JPアカウントの作成
  • Laravelへパッケージの導入
  • 決済フォームの組み込み
  • サーバーサイドでの決済の実行

さっそく実践

PAY.JPアカウント作成

まずはPAY.JPにアカウントを作成していきます。

PAY.JPにアクセスして「申し込み」をクリックしてください。

payjp

メールアドレスとパスワードを入力し、登録ボタンをクリックしてください。

payjp

登録が完了すると管理画面が表示されます。これで登録は完了です。簡単ですね。

payjp

Laravelへパッケージの導入

次にLaravelプロジェクト内でPAY.JPのライブラリを使えるようにするため、パッケージを導入します。

以下のコマンドを実行してください。

$ composer require payjp/payjp-php

これで導入は完了です。

続いて、環境変数を設定していきます。

管理画面のサイドメニューから「API」をクリックします。
APIキーの情報から「テスト秘密鍵」「テスト公開鍵」をコピーします。

payjp

.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にアクセスすると以下のような画面になります。

payjp決済フォーム

「カード情報を入力」を押下するとフォームが表示されます。

payjp決済フォーム

サーバーサイドでの決済の実行

それでは最後に決済を実行します。

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です。あとは適当に入力して、登録するを押下してください。

payjp決済フォーム

これで決済が実行されました。

PAY.JPの管理画面のダッシュボードのグラフを見てみてください。売上金額に3500円が反映されているかと思います。

まとめ

さて、今回はPAY.JPで決済機能を実装してみました。とても簡単ですよね。

実際には決済の実行だけでなく、顧客の登録やクレカの登録のAPIなども使っていくかと思います。

他の実装はPAY.JP APIドキュメントを参考に実装してみてください。

次回はPAY.JPでの決済を例に、依存性の注入(DI)を解説していきたいと思います。

この記事をシェアする