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
CRUD With Image Upload In Laravel 10 Example
CRUD With Image Upload In Lara...

In this article, we will see crud with image upload in laravel 10 examples. Here, we will learn how to image upload with...

Read More


How To Validate URL In PHP With Regex
How To Validate URL In PHP Wit...

Hello Guys, In this tutorial we will see how to validate URL in PHP with regex. also you can implement in larave...

Read More


Carbon Add Days To Date In Laravel 9
Carbon Add Days To Date In Lar...

In this article, we will see carbon add day and add days to date in laravel 9. Carbon provides the addDay() and add...

Read More


How To Send Email In Laravel 9 Using Mailtrap
How To Send Email In Laravel 9...

In this article, we will explore the process of sending emails in Laravel 9 using Mailtrap. We will delve into how Larav...

Read More