Paypal Payment Gateway Integration With Laravel
In this article, we will show you how to add PayPal as a payment option to your booking management application built in Laravel.
By integrating PayPal, you can provide your customers with a secure and easy-to-use online payment option.
We will walk you through the process of installing the PayPal PHP SDK, creating a payment form, handling payment success and cancellation, implementing PayPal's Instant Payment Notification (IPN) feature, and testing the integration.
Whether you are a developer or a business owner, this guide will provide you with the necessary steps to add PayPal to your booking management application.
The steps are as follows:
Install the PayPal PHP SDK
To interact with PayPal's API using PHP, you'll need to install the PayPal PHP SDK. You can do this by adding the following line to your
composer.json
file"paypal/rest-api-sdk-php": "^1.14"
Then, run
composer install
to install the package.Create a PayPal App
Next, you need to create a PayPal App to get the API credentials required to interact with PayPal's API. You can create a new app by following the instructions on the PayPal Developer website.
Add PayPal credentials to your Laravel application
Once you have created a PayPal App, you need to add the API credentials to your Laravel application's
.env
file:PAYPAL_CLIENT_ID=your_client_id PAYPAL_SECRET=your_secret PAYPAL_MODE=sandbox
Note that
PAYPAL_MODE
can be eithersandbox
orlive
, depending on whether you're testing your application or deploying it to a production environment.Create a PayPal payment form
Next, you need to create a payment form that allows users to pay for their bookings using PayPal. You can do this by creating a route in your Laravel application that displays a form where users can enter their payment details:
// Display the payment form Route::get('/pay-with-paypal', function () { return view('paypal-form'); }); // Process the payment Route::post('/pay-with-paypal', function (Request $request) { $apiContext = new \PayPal\Rest\ApiContext( new \PayPal\Auth\OAuthTokenCredential( config('services.paypal.client_id'), config('services.paypal.secret') ) ); $payer = new \PayPal\Api\Payer(); $payer->setPaymentMethod('paypal'); $amount = new \PayPal\Api\Amount(); $amount->setTotal($request->input('amount')); $amount->setCurrency('USD'); $transaction = new \PayPal\Api\Transaction(); $transaction->setAmount($amount); $redirectUrls = new \PayPal\Api\RedirectUrls(); $redirectUrls->setReturnUrl(url('/payment-success')) ->setCancelUrl(url('/payment-cancelled')); $payment = new \PayPal\Api\Payment(); $payment->setIntent('sale') ->setPayer($payer) ->setTransactions([$transaction]) ->setRedirectUrls($redirectUrls); try { $payment->create($apiContext); return redirect($payment->getApprovalLink()); } catch (\PayPal\Exception\PayPalConnectionException $e) { return redirect('/payment-error'); } });
In the above code, we create a new
ApiContext
instance using the PayPal credentials stored in our Laravel application's.env
file. We then create a new payment using the PayPal API, with the payment amount and other transaction details specified by the user in the payment form. Finally, we redirect the user to PayPal's website to complete the payment.Handle payment success and cancellation
Once the user completes the payment on PayPal's website, they will be redirected back to your Laravel application. You'll need to create routes to handle both successful and cancelled payments:
// Handle successful payment Route::get('/payment-success', function () { return view('payment-success'); }); // Handle cancelled payment Route::get('/payment-cancelled', function () { return view('payment-cancelled'); });
In the above code,we simply display a success or cancellation message to the user, depending on whether their payment was successful or not.
Implement PayPal's IPN (Instant Payment Notification)
To verify that the payment was successful and update your booking management application accordingly, you need to implement PayPal's IPN (Instant Payment Notification) feature. This allows PayPal to send a notification to your application whenever a payment is made or updated.
Here's an example of how you can implement the IPN feature in Laravel:
Route::post('/paypal-ipn', function (Request $request) { $listener = new \PayPal\IPN\Listener(); $listener->useSandbox(); $listener->setSecret(config('services.paypal.secret')); try { $verified = $listener->processIpn($request->getContent()); } catch (\Exception $e) { return response()->json(['error' => $e->getMessage()], 400); } if ($verified) { $transactionId = $request->input('txn_id'); // Update booking record in database with $transactionId // Send confirmation email to customer return response()->json(['status' => 'ok'], 200); } else { return response()->json(['error' => 'Invalid IPN'], 400); } });
In the above code, we create a new route to handle the IPN requests sent by PayPal. We use the PayPal SDK's IPN listener to verify the authenticity of the IPN message and update the booking record in our database with the transaction ID returned by PayPal. We also send a confirmation email to the customer.
Test the PayPal integration
Once you've implemented the PayPal integration in your booking management application, you should test it thoroughly to ensure that everything is working as expected. You can do this by creating test bookings and completing the payment process using a PayPal sandbox account.
In summary, integrating PayPal into a booking management application built with Laravel involves installing the PayPal PHP SDK, creating a PayPal App to get the API credentials, adding the PayPal credentials to your Laravel application, creating a payment form, handling payment success and cancellation, implementing PayPal's IPN feature, and testing the integration thoroughly.
Subscribe to my newsletter
Read articles from Kaushik Thakkar directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Kaushik Thakkar
Kaushik Thakkar
I’m Kaushik, enjoy learning and writing about my experience, Full stack developer from India. Experecened in Laravel, PHP, CodeIgniter, WordPress,JavaScript, jQuery, Bootstrap and REST API.