How to Integrate Paypal Payment Gateway In Codeigniter

How to Integrate Paypal Payment Gateway In Codeigniter. In this tutorial, we will show you how to add PayPal payment gateway to your website built with Codeigniter. We will provide you with the source code needed to integrate PayPal payment gateway into your website.

The goal of this tutorial is to explain how to integrate PayPal payment gateway in a simple and easy way using the Codeigniter framework.

Paypal payment gateway integration in Codeigniter

Follow the below given steps and easily integrate PayPal payment gateway in Codeigniter:

  • Download Paypal Payment Gateway Library
  • Create Database Tables
  • Build Paypal Controller
  • Build Paypal Model
  • Create View

1. Download Paypal Payment Gateway Library

To start, we need to download the PayPal payment gateway library for Codeigniter => Click Here and add it to our project.

You can download the PayPal payment gateway library here: Paypal Payment Gateway library for Codeigniter.

The library includes two files called paypal_lib and paypal_lib_config. To add these files to your project, follow the steps below:

  • paypal_lib.php file => will be placed in the application/libraries/ directory
  • paypallib_config.php file => will be placed in the application/config/ directory.

2. Create Database Tables

Next, we need to create two tables in the database to store product information and payment information.

The first table is called “products” and it will store basic product information like the product name, image, price, and status. To create this table, you can use the following SQL query:

CREATE TABLE `products` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `image` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `price` float(10,2) NOT NULL,
 `status` tinyint(1) NOT NULL DEFAULT '1',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Next, the Second table name is payments and it stored the payment data with basic information like user_id, payment_id, product_id, txt_id or currency code, etc. So you can use the below SQL query for creating payments table in your database:

CREATE TABLE `payments` (
 `payment_id` int(11) NOT NULL AUTO_INCREMENT,
 `user_id` int(11) NOT NULL,
 `product_id` int(11) NOT NULL,
 `txn_id` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `payment_gross` float(10,2) NOT NULL,
 `currency_code` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
 `payer_email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `payment_status` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 PRIMARY KEY (`payment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

3. Build New Controller

Now, we need to create a new PayPal controller. To do this, navigate to the “application/controllers” directory and create a new file called “paypal.php”.

Inside the paypal controller, we need to create five methods: index(), buyProduct(), success(), cancel(), and ipn().

Here’s what each of these methods does:

  • The index() method fetches and displays the products information.
  • The buyProduct() method generates the PayPal form and redirects the buyer to the PayPal site once the Buy button is clicked.
  • The success() method displays transaction data after a successful payment.
  • The cancel() method is called when the user cancels the payment.
  • The ipn() method receives transaction data from PayPal IPN and inserts the transaction data into the database.
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Products extends CI_Controller
{
    function __construct()
    {
        parent::__construct();
        $this->load->library('paypal_lib');
        $this->load->model('product');
        $this->load->database();
    }
    function index()
    {
        $data             = array();
        //get products inforamtion from database table
        $data['products'] = $this->product->getRows();
        //loav view and pass the products information to view
        $this->load->view('products/index', $data);
    }
    function buyProduct($id)
    {
        //Set variables for paypal form
        $returnURL = base_url() . 'paypal/success'; //payment success url
        $cancelURL = base_url() . 'paypal/cancel'; //payment cancel url
        $notifyURL = base_url() . 'paypal/ipn'; //ipn url
        //get particular product data
        $product   = $this->product->getRows($id);
        $userID    = 1; //current user id
        $logo      = base_url() . 'Your_logo_url';
        $this->paypal_lib->add_field('return', $returnURL);
        $this->paypal_lib->add_field('cancel_return', $cancelURL);
        $this->paypal_lib->add_field('notify_url', $notifyURL);
        $this->paypal_lib->add_field('item_name', $product['name']);
        $this->paypal_lib->add_field('custom', $userID);
        $this->paypal_lib->add_field('item_number', $product['id']);
        $this->paypal_lib->add_field('amount', $product['price']);
        $this->paypal_lib->image($logo);
        $this->paypal_lib->paypal_auto_form();
    }
    function success()
    {
        //get the transaction data
        $paypalInfo            = $this->input->get();
        $data['item_number']   = $paypalInfo['item_number'];
        $data['txn_id']        = $paypalInfo["tx"];
        $data['payment_amt']   = $paypalInfo["amt"];
        $data['currency_code'] = $paypalInfo["cc"];
        $data['status']        = $paypalInfo["st"];
        //pass the transaction data to view
        $this->load->view('paypal/success', $data);
    }
    function cancel()
    {
        //if transaction cancelled
        $this->load->view('paypal/cancel');
    }
    function ipn()
    {
        //paypal return transaction details array
        $paypalInfo             = $this->input->post();
        $data['user_id']        = $paypalInfo['custom'];
        $data['product_id']     = $paypalInfo["item_number"];
        $data['txn_id']         = $paypalInfo["txn_id"];
        $data['payment_gross']  = $paypalInfo["mc_gross"];
        $data['currency_code']  = $paypalInfo["mc_currency"];
        $data['payer_email']    = $paypalInfo["payer_email"];
        $data['payment_status'] = $paypalInfo["payment_status"];
        $paypalURL              = $this->paypal_lib->paypal_url;
        $result                 = $this->paypal_lib->curlPost($paypalURL, $paypalInfo);
        //check whether the payment is verified
        if (preg_match("/VERIFIED/i", $result)) {
            //insert the transaction data into the database
            $this->product->storeTransaction($data);
        }
    }
}

4. Build Paypal Model

Next, we need to create a new PayPal model. To do this, navigate to the “application/models” directory and create a new file called “paypal.php”.

Inside the PayPal model, we need to create two methods: getRows() and storeTransaction().

Here’s what each of these methods does:

  • The getRows() method is used to fetch product information data from the “products” database table.
  • The storeTransaction() method is called when a transaction is successful. It inserts transaction data into the “payment” table.
<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');
class Product extends CI_Model
{
    public function __construct()
    {
        $this->load->database();
    }
    //get and return product rows
    public function getRows($id = '')
    {
        $this->db->select('id,name,image,price');
        $this->db->from('products');
        if ($id) {
            $this->db->where('id', $id);
            $query  = $this->db->get();
            $result = $query->row_array();
        } else {
            $this->db->order_by('name', 'asc');
            $query  = $this->db->get();
            $result = $query->result_array();
        }
        return !empty($result) ? $result : false;
    }
    //insert transaction data
    public function storeTransaction($data = array())
    {
        $insert = $this->db->insert('payments', $data);
        return $insert ? true : false;
    }
}

5. Create View

Now, we need to create two folders named “products” and “PayPal”.

Next, we need to create view files to display product listing and payment-related information like payment success or cancel details.

To do this, navigate to the “application/views/products” directory and create a new file called “index.php”. Then, update the HTML code in your index.php file.

<!DOCTYPE html>
<html>
    <head>
        <title>How to Integrate Paypal Payment Gateway In Codeigniter - torqueprogramming.co.in</title>
        <!-- Latest CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
        <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    </head>
    <body>
        <div class="container">
            <h2 class="mt-3 mb-3">Products</h2>
            <div class="row">
                <?php if(!empty($products)): foreach($products as $product): ?>
                <div class="thumbnail">
                    <img src="<?php echo base_url().'assets/images/'.$product['image']; ?>" alt="" />
                    <div class="caption">
                        <h4 class="pull-right">
                            $<?php echo $product['price']; ?>
                            USD
                        </h4>
                        <h4>
                            <a href="javascript:void(0);"><?php echo $product['name']; ?></a>
                        </h4>
                    </div>
                    <a href="<?php echo base_url().'products/buyProduct/'.$product['id']; ?>"><img src="<?php echo base_url(); ?>assets/images/buy-button" style="width: 70px;" /></a>
                </div>
                <?php endforeach; endif; ?>
            </div>
        </div>
    </body>
</html>

After that, we need to create two more views files to display the transaction details as if the transaction was successful or canceled.

So go to application/views/Paypal folder,

Create a new file name success.php and update the below code into your file:

<!DOCTYPE html>
<html>
    <head>
        <title>Transaction Success - Paypal Payment Gateway Codeigniter - torqueprogramming.co.in</title>
        <!-- Latest CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
        <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    </head>
    <body>
        <div class="container">
            <h2 class="mt-3 mb-3">Transaction Detalis</h2>
            <div class="row">
                <span>Your payment was successful done, thank you for purchase.</span><br />
                <span>
                    Item Number :
                    <strong><?php echo $item_number; ?></strong>
                </span>
                <br />
                <span>
                    TXN ID :
                    <strong><?php echo $txn_id; ?></strong>
                </span>
                <br />
                <span>
                    Amount Paid :
                    <strong>$<?php echo $payment_amt.' '.$currency_code; ?></strong>
                </span>
                <br />
                <span>
                    Payment Status :
                    <strong><?php echo $status; ?></strong>
                </span>
                <br />
            </div>
        </div>
    </body>
</html>

Create a second new file name cancel.php and update the below code into your file:

<!DOCTYPE html>
<html>
    <head>
        <title>Transaction Fail - Paypal Payment Gateway Codeigniter - torqueprogramming.co.in</title>
        <!-- Latest CSS -->
        <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" />
        <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    </head>
    <body>
        <div class="container">
            <h2 class="mt-3 mb-3">Transaction Detalis</h2>
            <div class="row">
                <p>Sorry! Your last transaction was cancelled.</p>
            </div>
        </div>
    </body>
</html>

Note:- Paypal Payment Gateway Live

If your test PayPal transaction is working properly using the PayPal sandbox account, you may want to make your PayPal payment gateway live.

To do this, open the “application/config/paypallib_config.php” file and change the following two configuration values:

  1. Change the “SANDBOX” environment to FALSE to make your PayPal payment gateway live.
$config['sandbox'] = FALSE;

2.Change the BUSINESS EMAIL with your live PayPal business email.

$config['business'] = 'live_business@email.com';

You May Also Like

  1. Codeigniter 4 Integrate Stripe Payment Gateway Example
  2. Integrate Stripe Payment Gateway in Codeigniter

Leave a Reply

Your email address will not be published. Required fields are marked *