ECサイトやWebサービスに欠かせないのが決済システムです。世の中に数ある決済サービスの中から今回は「Square」という決済サービスをシステムへ導入していきます。

バージョン
Laravel 8.60.0
Square API Version 2021-09-15

前回までで決済フォームの作成まで完了しました。
今回は実際に決済を行う処理を作っていきます。

SDKの導入

Squareは各種決済処理のためのAPIを提供しています。
Curlでも可能ですがPHP向けにSDKが用意されているので今回はこちらを導入して使っていきましょう。

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

composer require square/square

これで、SDKの導入は完了です。

決済処理の実装

今回はSquareServiceというクラスを作成し、そこに処理を書いていきましょう。

app/Services/SquareService.phpファイルを作成し、以下のようにコンストラクタを設定します。

<?php


namespace App\Services;


use Square\SquareClient;

class SquareService
{
    public function __construct()
    {
        // スクエアアカウント設定
        $this->client = new SquareClient([
            'accessToken' => config('square.token'),
            'environment' => config('square.env'),
        ]);
    }
}

コンストラクタでSquareアカウントの設定をしています。

コンストラクタではなくサービスプロバイダに設定してしまってもいいかもしれませんが、お好みで変えてください。

続いて、決済処理用のメソッドを作成していきます。
まずコントローラに以下のように記述してください。

<?php

namespace App\Http\Controllers;

use App\Services\SquareService;
use Illuminate\Http\Request;

class SquareController extends Controller
{
    public function createPayment(Request $request)
    {
        try {
            $squareSearvice = new SquareService();
            $squareSearvice->createPayment($request->all());
            return true;
        } catch (\Exception $exception) {
            throw new \Exception('決済エラーです');
        }
    }
}

次にSquareServiceに以下のメソッドを記述します。

public function createPayment($params)
{
    $amount_money = new \Square\Models\Money();
    $amount_money->setAmount(1000);
    $amount_money->setCurrency('JPY');

    $body = new \Square\Models\CreatePaymentRequest(
        $params['sourceId'],
        Str::uuid()->toString(),
        $amount_money
    );

    $api_response = $this->client->getPaymentsApi()->createPayment($body);

    if ($api_response->isSuccess()) {
        $result = $api_response->getResult();
    } else {
        $errors = $api_response->getErrors();
        throw new \Exception();
    }
}

setAmountに金額を引数に渡すことでその値段で決済することができます。
CreatePaymentRequestの第2引数にはidempotencyKeyを設定するようですが、今回は適当な被らない文字列(または数字)を入れています。

さあ、これでもう決済をすることができます。

決済フォームで必要事項を入力して決済を実行してみてください。

決済後にSquareのsandboxコンソールを見てみましょう。

無事に決済できていることが確認できました!

もちろん、sandboxなので本当にクレジットカードに請求がいったり、振り込みがされることはありません。

テストでどんどん試してみてください。

今回紹介した随時決済以外にも、クレジットカード登録やカスタマー登録、その情報を使って定期決済なども可能です。

ドキュメントを参考に是非色々試してみてください。

関連記事

参考URL

Square Developer SDKs

この記事をシェアする

Laravel開発のお悩み相談・学習サポートはこちら

じゅのきちメンターサービス

じゅのきちメンターサービス