Tích hợp cổng thanh toán Stripe với Laravel 9

0 0 0

Người đăng: Nguyễn Quang Huy

Theo Viblo Asia

Stripe là một cổng thanh toán rất phổ biến và dễ sử dụng, trong bài viết này mình sẽ làm một ví dụ nhỏ về tích hợp cổng thanh toán Stripe vào dự án Laravel.

Tạo tài khoản Stripe và sản phẩm

Lấy Stripe API Key và SECRET

Đăng nhập và https://dashboard.stripe.com/, trong phần Get started with Stripe => For Developer lưu lại API Key và Secret key Test mode.

Tạo sản phẩm và giá sản phẩm

Vào tab Product Catalog để tạo sản phẩm và giá sản phẩm, cũng có thể tạo sản phẩm và giá qua API mà Stripe cung cấp, xem document chi tiết tại https://docs.stripe.com/api/products.

Vào Menu Product Catalog

Chọn tạo sản phẩm mới, sau khi tạo xong sản phẩm sẽ có trên màn hình danh sách

Bấm vào sản phẩm để xem chi tiết sản phẩm

Trong phần giá của sản phẩm chọn Copy Price Id để copy ID của giá để phục vụ cho phần dưới hoặc chọn Create Payment Link để tạo một link thanh toán luôn.

Tạo Project với Laravel

Tạo project với composer

Tạo project laravel với lệnh composer như sau:

composer create-project --prefer-dist laravel/laravel laravel-stripe-demo

Tạo file .env và dán API Key và Secret Key vừa copy ở phần trước vào .env:

STRIPE_KEY=pk_test_<your-api-key>
STRIPE_SECRET=sk_test_<your-secret-key>

Cài đặt thư viện stripe-php

stripe/stripe-php là thư viện được chính Stripe cung cấp để nhà phát triển PHP có thể phát triển ứng dụng kết nối tới nền tảng của họ vì vậy thư viện này là cực kỳ an toàn, cài đặt thư viện qua câu lệnh:

composer require stripe/stripe-php

Xem packagist của thư viện tại: https://packagist.org/packages/stripe/stripe-php

Tạo routes

Thêm 2 routes mới dưới đây vào file web.php:

<?php use Illuminate\Support\Facades\Route; /*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/ Route::get('/', function () { return view('welcome');
}); Route::get('stripe', [\App\Http\Controllers\StripeController::class, 'stripe'])->name('stripe');
Route::get('success', [\App\Http\Controllers\StripeController::class, 'success'])->name('success');
Route::get('cancel', [\App\Http\Controllers\StripeController::class, 'cancel'])->name('cancel');
Route::post('payment', [\App\Http\Controllers\StripeController::class, 'payStripe'])->name('payStripe'); 

Tạo controller và View

Tạo StripeController với command:

php artisan make:controller StripeController

Sau đó tạo các hàm stripe, cancel, success, và payStripe để xử lý các request vừa tạo ở trong file routes/web.php.

<?php namespace App\Http\Controllers; use Illuminate\Http\Request;
use Stripe\Checkout\Session;
use Stripe\Stripe; class StripeController extends Controller
{ public function stripe() { return view('stripe'); } public function success() { return view('success'); } public function cancel() { return view('cancel'); } public function payStripe(Request $request) { Stripe::setApiKey(env('STRIPE_SECRET')); $checkoutSession = Session::create([ 'line_items' => [[ 'price' => 'price_1Q0Q5GHGTpXzW5bV1645uGi6', 'quantity' => 1, ]], 'mode' => 'payment', 'success_url' => route('success'), 'cancel_url' => route('cancel'), ]); return redirect($checkoutSession->url); }
}
  • Trường price là ID của price mà vừa lấy được từ phần trên.
  • Trường success_url là trường URL Stripe gọi tới khi người dùng thanh toán thành công.
  • Trường cancel_url là trường URL Stripe gọi tới khi người dùng không thanh toán mà ấn hủy

Tạo các trang stripe.blade.php, success.blade.php, cancel.blade.php trong resources/views. Xem chi tiêt code trong repository github để ở cuối bài.

Thanh toán với Stripe

Sau khi hoàn thành chạy project lên với cổng 9000 php artisan serve --port=9000 và truy cập http://127.0.0.1:9000/stripe để bắt đầu tiến hành thanh toán với Stripe.

Bấm vào nút Checkout, bạn sẽ được chuyển hướng về trang thanh toán của Stripe đó chính là URL trả về trong hàm payStripe của class StripeController.

Nếu không thanh toán mà bấm vào nút quay lại bên cạnh chữ Test Mode bạn sẽ được chuyển hướng về route('cancel') đã được định nghĩa khi khởi tạo URL Payment.

Nếu tiến hành thanh toán nhập thông tin thẻ Visa hoặc Master Card. Với Test Mode có thể test với các card ảo mà Stripe cung cấp, xem danh sách thẻ test tại link https://docs.stripe.com/testing#cards.

Có thể sử dụng 3 thẻ sau cho 3 mục đích test khác nhau:

  • Thanh toán thành công: 4242 4242 4242 4242
  • Thanh toán yêu cầu xác thực: 4000 0025 0000 3155
  • Thanh toán từ chối: 4000 0000 0000 9995

Thông tin về thẻ test chỉ cần nhập đúng số thẻ, ngày hết hạn là một ngày trong tương lai còn các thông tin khác có thể nhập bất kỳ. Sau khi thanh toán thành công sẽ được chuyển hướng về trang route('success') để thông báo cho người dùng đã thanh toán thành công.

Clone code trên Repository Github tại: https://github.com/trannguyenhan/laravel-stripe-demo

Tham khảo: [https://docs.stripe.com/checkout/quickstart), https://docs.stripe.com/api/products

Bình luận

Bài viết tương tự

- vừa được xem lúc

Cài đặt WSL / WSL2 trên Windows 10 để code như trên Ubuntu

Sau vài ba năm mình chuyển qua code trên Ubuntu thì thật không thể phủ nhận rằng mình đã yêu em nó. Cá nhân mình sử dụng Ubuntu để code web thì thật là tuyệt vời.

0 0 390

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 440

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

So sánh Interface và Abstract trong lập trình hướng đối tượng.

Tổng quan. Interface và Abstract class là 2 khái niệm cơ bản trong lập trình OOP.

0 0 60

- vừa được xem lúc

CURL và cách sử dụng trong PHP

Giới Thiệu. CURL là bộ thư viện được sử dụng để giúp thực hiện việc chuyển dữ liệu thông qua nhiều giao thức khác nhau (như HTTP, FPT...). Với giao thức HTTP, cURL hỗ trợ việc gửi dữ liệu sử dụng tất cả các phương thức hiện có như GET, POST, PUT, DELETE... cURL cũng hỗ trợ việc chuyền dữ liệu sử dụn

0 0 88

- vừa được xem lúc

Thêm dòng dữ liệu mới (MySQL) trong Laravel

Chào các bạn, Laravel hiện đang là hot trend trong "thế giới PHP". 1. Cấu hình cơ bản ban đầu. .

0 0 46