Paypal Payment Gateway Integration In Laravel 8

Websolutionstuff | Jan-10-2022 | Categories : Laravel PHP

In this tutorial, we will see paypal payment gateway integration in laravel 8. Paypal is an international payment processing gateway working in the majority of countries that support online money transfers. Paypal is a safer, easier way to pay around the world.‚Äč So, we will learn how to integrate paypal payment gateway in laravel 8 step by step.

PayPal is an american company operating a worldwide online payments system that supports online money transfers and serves as an electronic alternative to traditional paper methods like checks and money orders. For this example, we are using paypal/rest-api-sdk-php package.

Using paypal you can pay online, buy now, buy online, how to make online payment, how to transfer money online, shop online and etc.

So, let's see laravel 8 paypal payment integration example.

Step 1 : Create New Laravel 8 Application

Step 2 : Setup Database Configuration

Step 3 : Install paypal/rest-api-sdk-php Package

Step 4 : Configuration paypal.php File

Step 5 : Add Route in web.php File

Step 6 : Create Controller

Step 7 : Create Blade File for View



Step 1 : Create New Laravel 8 Application

 We are creating a new project set up for this paypal integration example. So, create a new project using the below command.

composer create-project --prefer-dist laravel/laravel paypal_integration_laravel_8


Step 2 : Setup Database Configuration

 In the second step, we will set up database configuration like database name, username, password, etc. So, let's open the .env file and fill in details like as below. 



 Step 3 : Install paypal/rest-api-sdk-php Package

Run the following command in your project to get the latest version of the paypal API package using composer.

composer require paypal/rest-api-sdk-php

After installation of the paypal package, we required a client id and secret key for paypal integration. So, we need to login in paypal developer mode and create a new sandbox account for the same.

After login in paypal you need to get the client id and secret key like the below screenshot.




Step 4 : Configuration paypal.php file

Now, we need to configure the paypal.php file So, I have manually created one file in config/paypal.php and added the below code.

return [ 
    'client_id' => 'Enter Your Client ID',
	'secret' => 'Enter Your Secret Key',
    'settings' => array(
        'mode' => 'sandbox',
        'http.ConnectionTimeOut' => 1000,
        'log.LogEnabled' => true,
        'log.FileName' => storage_path() . '/logs/paypal.log',
        'log.LogLevel' => 'FINE'


Step 5 : Add Route in web.php File

 Now, I have created the route as below.


use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PaypalController;

Route::get('paywithpaypal', array('as' => 'paywithpaypal','uses' => 'PaypalController@payWithPaypal',));
Route::post('paypal', array('as' => 'paypal','uses' => 'PaypalController@postPaymentWithpaypal',));
Route::get('paypal', array('as' => 'status','uses' => 'PaypalController@getPaymentStatus',));



Step 6 : Create Controller

I have created a new PaypalController. So, copy the below code in PaypalController.


namespace App\Http\Controllers;

use App\Http\Requests;
use Illuminate\Http\Request;
use Validator;
use URL;
use Session;
use Redirect;
use Input;
use PayPal\Rest\ApiContext;
use PayPal\Auth\OAuthTokenCredential;
use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\RedirectUrls;
use PayPal\Api\ExecutePayment;
use PayPal\Api\PaymentExecution;
use PayPal\Api\Transaction;

class PaypalController extends Controller
    private $_api_context;
    public function __construct()
        $paypal_configuration = \Config::get('paypal');
        $this->_api_context = new ApiContext(new OAuthTokenCredential($paypal_configuration['client_id'], $paypal_configuration['secret']));

    public function payWithPaypal()
        return view('paywithpaypal');

    public function postPaymentWithpaypal(Request $request)
        $payer = new Payer();

    	$item_1 = new Item();

        $item_1->setName('Product 1')

        $item_list = new ItemList();

        $amount = new Amount();

        $transaction = new Transaction();
            ->setDescription('Enter Your transaction description');

        $redirect_urls = new RedirectUrls();

        $payment = new Payment();
        try {
        } catch (\PayPal\Exception\PPConnectionException $ex) {
            if (\Config::get('app.debug')) {
                \Session::put('error','Connection timeout');
                return Redirect::route('paywithpaypal');                
            } else {
                \Session::put('error','Some error occur, sorry for inconvenient');
                return Redirect::route('paywithpaypal');                

        foreach($payment->getLinks() as $link) {
            if($link->getRel() == 'approval_url') {
                $redirect_url = $link->getHref();
        Session::put('paypal_payment_id', $payment->getId());

        if(isset($redirect_url)) {            
            return Redirect::away($redirect_url);

        \Session::put('error','Unknown error occurred');
    	return Redirect::route('paywithpaypal');

    public function getPaymentStatus(Request $request)
        $payment_id = Session::get('paypal_payment_id');

        if (empty($request->input('PayerID')) || empty($request->input('token'))) {
            \Session::put('error','Payment failed');
            return Redirect::route('paywithpaypal');
        $payment = Payment::get($payment_id, $this->_api_context);        
        $execution = new PaymentExecution();
        $result = $payment->execute($execution, $this->_api_context);
        if ($result->getState() == 'approved') {         
            \Session::put('success','Payment success !!');
            return Redirect::route('paywithpaypal');

        \Session::put('error','Payment failed !!');
		return Redirect::route('paywithpaypal');



Step 7 : Create blade file for view

Now, we need to create one blade file for view. So, add the below code in your paywithpaypal.php file.

	<meta charset="utf-8">
	<title>Paypal Payment Gateway Integration In Laravel 8 -</title>
	<link href="" rel="stylesheet">
  <script src=""></script>
  <script src=""></script>
	<div class="container">
    <div class="row">    	
        <div class="col-md-8 col-md-offset-2">        	
        	<h3 class="text-center" style="margin-top: 30px;">Paypal Payment Gateway Integration In Laravel 8 -</h3>
            <div class="panel panel-default" style="margin-top: 60px;">

                @if ($message = Session::get('success'))
                <div class="custom-alerts alert alert-success fade in">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>
                    {!! $message !!}
                <?php Session::forget('success');?>

                @if ($message = Session::get('error'))
                <div class="custom-alerts alert alert-danger fade in">
                    <button type="button" class="close" data-dismiss="alert" aria-hidden="true"></button>
                    {!! $message !!}
                <?php Session::forget('error');?>
                <div class="panel-heading"><b>Paywith Paypal</b></div>
                <div class="panel-body">
                    <form class="form-horizontal" method="POST" id="payment-form" role="form" action="{!! URL::route('paypal') !!}" >
                        {{ csrf_field() }}

                        <div class="form-group{{ $errors->has('amount') ? ' has-error' : '' }}">
                            <label for="amount" class="col-md-4 control-label">Enter Amount</label>

                            <div class="col-md-6">
                                <input id="amount" type="text" class="form-control" name="amount" value="{{ old('amount') }}" autofocus>

                                @if ($errors->has('amount'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('amount') }}</strong>
                        <div class="form-group">
                            <div class="col-md-6 col-md-offset-4">
                                <button type="submit" class="btn btn-primary">
                                    Paywith Paypal


And you will get the output like the below screenshot.




once you will enter the amount you will get a form like this. if you don't have an account then you need to create an account first.



After clicking on continue, you will get a success form like the below screenshot.


Once you will get this view then after it will show another successful message form of your transaction.


You might also like :

Recommended Post
Featured Post
Laravel 9 QR Code Generator Example
Laravel 9 QR Code Generator Ex...

In this article, we will see laravel 9 QR code generator example. As per the current trend, many websites and appli...

Read More


How To Create Stacked Bar Chart In Laravel 9 Using Highcharts
How To Create Stacked Bar Char...

In this article, we will see how to create a dynamic stacked bar chart in laravel 9 using highchart. Here, we will...

Read More


Custom Toastr Notification In Laravel 9
Custom Toastr Notification In...

In this article, we will see a custom toastr notification in laravel 9. we will create a custom notification using HTML,...

Read More


How To Add Datepicker In Angular 15 Material
How To Add Datepicker In Angul...

In this tutorial, I will guide you through the process of adding a datepicker component to your Angular 15 application u...

Read More