Hello, laravel web developers! In this article, we'll see how to integrate the PayPal payment gateway in laravel 11. Here, we'll use srmklive/laravel-paypal composer package in laravel 11. In the PayPal payment gateway, you can integrate checkout, subscriptions, invoicing, etc.
Here, we'll install srmklive/laravel-paypal composer package to integrate the PayPal payment gateway. It's a Laravel plugin for processing payments through PayPal.
Laravel 11 Paypal Payment Gateway Integration
In this step, we'll install the laravel 11 application using the composer command.
composer create-project --prefer-dist laravel/laravel laravel_11_paypal_integration
Next, we'll create a PayPal developer account and get the client ID and secret key. login into PayPal developer mode and create a new sandbox account.
Then, click on the Add Sandbox Credentials and generate new credentials.
Next, copy the client ID and Secret key and click on the next button.
.env
PAYPAL_MODE=sandbox
PAYPAL_SANDBOX_CLIENT_ID=AT-xxxxxxx
PAYPAL_SANDBOX_CLIENT_SECRET=EHL-xxxxxx
Now, install the composer package using the following command.
composer require srmklive/paypal
Next, we'll define the route into the web.php file.
routes/web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PayPalController;
Route::get('paypal', [PayPalController::class, 'index'])->name('paypal');
Route::get('paypal/payment', [PayPalController::class, 'payment'])->name('paypal.payment');
Route::get('paypal/payment/success', [PayPalController::class, 'paymentSuccess'])->name('paypal.payment.success');
Route::get('paypal/payment/cancel', [PayPalController::class, 'paymentCancel'])->name('paypal.payment/cancel');
Then, we'll create a controller and define the index() and payment() functions. Also, add payment success and payment cancel functions.
app/Http/Controllers/PayPalController.php
<?php
namespace App\Http\Controllers;
use Srmklive\PayPal\Services\PayPal as PayPalClient;
use Illuminate\Http\Request;
class PayPalController extends Controller
{
/**
* Write code on Method
*
* @return response()
*/
public function index()
{
return view('paypal');
}
/**
* Write code on Method
*
* @return response()
*/
public function payment(Request $request)
{
$provider = new PayPalClient;
$provider->setApiCredentials(config('paypal'));
$paypalToken = $provider->getAccessToken();
$response = $provider->createOrder([
"intent" => "CAPTURE",
"application_context" => [
"return_url" => route('paypal.payment.success'),
"cancel_url" => route('paypal.payment/cancel'),
],
"purchase_units" => [
0 => [
"amount" => [
"currency_code" => "USD",
"value" => "100.00"
]
]
]
]);
if (isset($response['id']) & $response['id'] != null) {
foreach ($response['links'] as $links) {
if ($links['rel'] == 'approve') {
return redirect()->away($links['href']);
}
}
return redirect()
->route('cancel.payment')
->with('error', 'Something went wrong.');
} else {
return redirect()
->route('create.payment')
->with('error', $response['message'] ?? 'Something went wrong.');
}
}
/**
* Write code on Method
*
* @return response()
*/
public function paymentCancel()
{
return redirect()
->route('paypal')
->with('error', $response['message'] ?? 'You have canceled the transaction.');
}
/**
* Write code on Method
*
* @return response()
*/
public function paymentSuccess(Request $request)
{
$provider = new PayPalClient;
$provider->setApiCredentials(config('paypal'));
$provider->getAccessToken();
$response = $provider->capturePaymentOrder($request['token']);
if (isset($response['status']) & $response['status'] == 'COMPLETED') {
return redirect()
->route('paypal')
->with('success', 'Transaction complete.');
} else {
return redirect()
->route('paypal')
->with('error', $response['message'] ?? 'Something went wrong.');
}
}
}
Then, we'll create a blade file and add the Paypal payment gateway HTML code.
resources/views/auth/paypal.blade.php
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Laravel 11 PayPal Payment Gateway Integration - Techsolutionstuff</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container">
<div class="row mt-5 mb-5">
<div class="col-10 offset-1 mt-5">
<div class="card">
<div class="card-header bg-primary">
<h3 class="text-white">Laravel 11 PayPal Payment Gateway Integration - Techsolutionstuff</h3>
</div>
<div class="card-body">
@if ($message = Session::get('success'))
<div class="alert alert-success alert-dismissible fade show" role="alert">
<strong>{{ $message }}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
@endif
@if ($message = Session::get('error'))
<div class="alert alert-danger alert-dismissible fade show" role="alert">
<strong>{{ $message }}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div>
@endif
<center>
<a href="{{ route('paypal.payment') }}" class="btn btn-success">Pay with PayPal </a>
</center>
</div>
</div>
</div>
</div>
</div>
</body>
</html>
Now, run the laravel 11 application using the following command.
php artisan serve
You might also like: