1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

StripeApiを使った支払い機能の追加

Posted at

今回は、Laravelを使ってStripeの決済機能を実装する方法を記載します

決済のApiを作成したいため、フロントは実装しません。
私の状況としまして未エンジニアであり色々なapiを作成し学習しています。

こちらの記事を参考にしました

今回実施する環境

バージョン: PHP 8.2.9
エディター: vsCode
後ほど、composer require stripe/stripe-php のインストールを行います

1.Stripeアカウントの作成とAPIキーの取得

こちらのstripeにてサインインしアカウントを作成します
https://stripe.com/ja-us

アカウント作成後、ダッシュボードの方で画面上部にある開発者をクリック->Apiキーをクリックします

スクリーンショット 2024-11-10 15.36.45.png

するとこのような画面が表示されます
スクリーンショット 2024-11-10 15.55.39.png

2.laravel Cashierをインストールします

ターミナルで以下のコマンドを入力してください
composer require laravel/cashier

3 .envファイルにApiキーを貼り付けます。

.env
STRIPE_KEY=公開可能キートークン
STRIPE_SECRET=シークレットキートークン

STRIPE_KEY=とSTRIPE_SECRET=は.envにデフォルトではないため下の方に作成しそれぞれのトークンをコピーし貼り付けます。

4 支払い処理を行うコントローラーを作成します

コントローラー作成
php artisan make:controller StripePaymentsController

Controllers/StripePaymentsController
namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Stripe\Stripe;
use Stripe\Customer;
use Stripe\Charge;
use Exception;

class StripePaymentsController extends Controller
{
    public function payment(Request $request)
    {
        try {
            Stripe::setApiKey(env('STRIPE_SECRET'));

           //Stripe\Customerのインスタンス
            $customer = Customer::create([
                'email' => $request->stripeEmail,   // 顧客のメールアドレス
                'source' => $request->stripeToken  // 顧客の支払いに使用するカードのトークン
            ]);

            if (!$customer) {
                return response()->json([
                    'status' => 'error',
                    'message' => 'Failed to create customer'
                ]);
            }

           //Stripe\Chargeのインスタンス
            $charge = Charge::create([
                'customer' => $customer->id, //顧客のid
                'amount' => $request->amount,//購入金額
                'currency' => 'jpy'
            ]);

            return response()->json([
                'status' => 'success',
                'message' => 'Payment processed successfully',
                'charge_id' => $charge->id
            ]);

        } catch (Exception $e) {
            return response()->json([
                'status' => 'error',
                'message' => 'Payment failed',
                'error' => $e->getMessage()
            ]);
        }
    }
}

5 ルートの設定

apiが叩かれるとStripePaymentsControllerを呼び出せるようにします。

api.php
Route::post('/payment', [StripePaymentsController::class, 'payment']);

6 テストを行います。

postmanを使用します。
リクエストをこのように設定します。
stripeTokenにはクレジットのトークンとして"tok_visa"を指定します。
スクリーンショット 2024-11-10 16.29.30.png

レスポンスがこのようになりますスクリーンショット 2024-11-10 16.30.20.png

successというメッセージが返ってきたため、支払いが完了しました。

7 stripeの方でダッシュボードを確認します。

左側タブにある残高をクリックし全てのアクティビティーを見てみると
先ほどの支払い金額とcharge_idが表示されてます。
スクリーンショット 2024-11-10 16.39.15.png

以上になります。

8 感想

まだテストコードに対しての知識が浅いため今回はpostmanを使用したテストを行いました。
未エンジニアですが、実際の現場を想定しapiを実装し学習しております。
学習内容が難しくなってきたためアウトプットも兼ねて投稿していきたいと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?