Posted inphp / Codeigniter

Paypal Payment Gateway Integration in PHP Codeigniter Example

Today, We want to share with you codeigniter paypal integration.In this post we will show you credit card payment gateway integration in codeigniter, hear for Integration of Paypal single payment and single payouts with codeigniter we will give you demo and example for implement.In this post, we will learn about payment gateway form php source code with an example.

how to integrate paypal with codeigniter?

Step 1 : First of all you can simple Download Paypal Payment Gateway Library Paypal Payment Gateway library for Codeigniter.

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

Single Payment With Codeigniter

Step 2 : Create Backend database tables to fetch and store responses

CREATE TABLE `items` (
 `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;
CREATE TABLE `payments` (
 `payment_id` int(11) NOT NULL AUTO_INCREMENT,
 `visitor_id` int(11) NOT NULL,
 `item_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;

Step 3 : Create New Controller to call paypal api

application/controllers/Products.php

load->library('paypal_lib');
		$this->load->model('item');
		$this->load->database();
	}

	function index(){
		$response = array();
		$response['items'] = $this->item->getProducts();
		$this->load->view('items/index', $response);
	}

function buyProduct($id){

	$returnURL = base_url().'paypal/success'; //payment success url
	$failURL = base_url().'paypal/fail'; //payment fail url
	$notifyURL = base_url().'paypal/ipn'; //ipn url

	$item = $this->item->getProducts($id);
	$visitorID = 1; //current visitor id
	$logo = base_url().'Your_logo_url';

	$this->paypal_lib->add_field('return', $returnURL);
	$this->paypal_lib->add_field('fail_return', $failURL);
	$this->paypal_lib->add_field('notify_url', $notifyURL);
	$this->paypal_lib->add_field('item_name', $item['name']);
	$this->paypal_lib->add_field('custom', $visitorID);
	$this->paypal_lib->add_field('item_number', $item['id']);
	$this->paypal_lib->add_field('amount', $item['price']);
	$this->paypal_lib->image($logo);

	$this->paypal_lib->paypal_auto_form();
}

function paymentSuccess(){
	$paymentData = $this->input->get();

	$response['item_number'] = $paymentData['item_number'];
	$response['txn_id'] = $paymentData["tx"];
	$response['payment_amt'] = $paymentData["amt"];
	$response['currency_code'] = $paymentData["cc"];
	$response['status'] = $paymentData["st"];

	$this->load->view('paypal/paymentSuccess', $response);
}

function paymentFail(){
	$this->load->view('paypal/paymentFail');
}

function ipn(){
//paypal return transaction details array
$paymentData = $this->input->post();

$response['visitor_id'] = $paymentData['custom'];
$response['item_id'] = $paymentData["item_number"];
$response['txn_id'] = $paymentData["txn_id"];
$response['payment_gross'] = $paymentData["mc_gross"];
$response['currency_code'] = $paymentData["mc_currency"];
$response['payer_email'] = $paymentData["payer_email"];
$response['payment_status'] = $paymentData["payment_status"];

$paypalURL = $this->paypal_lib->paypal_url;
$solution = $this->paypal_lib->curlPost($paypalURL,$paymentData);

if(preg_match("/VERIFIED/i",$solution)){
$this->item->storeTransaction($response);
}
}
}

Step 4 : Create Paypal Model to interact with database

application/models/Paypal_model.php

load->database();
    }

    public function getProducts($id = ''){
        $this->db->select('id,name,image,price');
        $this->db->from('items');
        if($id){
            $this->db->where('id',$id);
            $query = $this->db->get();
            $solution = $query->row_array();
        }else{
            $this->db->order_by('name','asc');
            $query = $this->db->get();
            $solution = $query->result_array();
        }
        return !empty($solution)?$solution:false;
    }
 
    public function storeTransaction($response = array()){
        $insert = $this->db->insert('payments',$response);
        return $insert?true:false;
    }
}

Step 5 : Create View File

application/views/items/index.php




  Codeigniter Paypal Integration Example - www.pakainfo.com
  
 
  


  

Products

$

Step 6 :create a new file for payment success response paymentSuccess.php

application/views/paypal/paymentSuccess.php




Transaction Successfull - Codeigniter Paypal Integration Example - www.pakainfo.com




Transaction Detalis

Your payment was successful done, thank you for purchase.
Item Number :
TXN ID :
Amount Paid : $
Payment Status :

Step 7:create a file for payment failure

application/views/paypal/paymentFail.php



Transaction Fail - Codeigniter Paypal Integration Example - www.pakainfo.com




Transaction Detalis

Sorry! Your last transaction was cancelled.

From sandbox to live integration, just change two places in config file application/config/paypallib_config.php

$config['sandbox'] = FALSE;
$config['business'] = '[email protected]';

Single payout with codeigniter

You have to just define client id , secret key and also log path if you need log.

private function  curl_request($url, $method, $headers = [], $response = [], $curl_options = []){
 
        $curl = curl_init();
 
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_TIMEOUT, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
 
        //--- If any headers set add them to curl request
        if(!empty($headers)){
            curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        }
 
        //--- Set the request type , GET, POST, PUT or DELETE
        switch($method){
            case "POST":
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
            break;
        case "PUT":
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
            break;
        case "DELETE":
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "DELETE");
            break;
        default:
            curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "GET");
            break;
        }
 
        //--- If any response is supposed to be send along with request add it to curl request
        if($response){
            curl_setopt($curl, CURLOPT_POSTFIELDS, $response);
        }
        //--- Any extra curl options to add in curl object
        if($curl_options){
            foreach($curl_options as $option_key => $option_value){
                curl_setopt($curl, $option_key, $option_value);
            }
        }
 
        $response = curl_exec($curl);
        $error = curl_error($curl);
        curl_close($curl);
 
        //--- If curl request returned any error return the error
        if ($error) {
            return "CURL Error: $error";
        }
        //--- Return response received from call
        return $response;
}
 
 
public function get_access_token()
{
 
    //--- Headers for our token request
    $headers[] = "Accept: application/json";
    $headers[] = "Content-Type: application/x-www-form-urlencoded";
 
    //--- Data field for our token request
    $response = "grant_type=client_credentials";
 
    //--- Pass client id & client secrent for authorization
    $curl_options[CURLOPT_USERPWD] = $this->CI->config->item('client_id') . ":" . $this->CI->config->item('client_secret');
 
    $token_request = $this->curl_request($this->CI->config->item('PAYPAL_TOKEN_URL'), "POST", $headers, $response, $curl_options);
    $token_request = json_decode($token_request);
    if(isset($token_request->error)){
 
        $solution['no_error'] = FALSE;
 
        $solution['message_error'] =  $token_request->error_description;
 
 
 
    }else{
 
        $solution['no_error'] = TRUE;
 
        $solution['token_request'] = $token_request ;
 
    } 
 
    return $solution;
 
}
 
 
function transfer_money_from_business_to_personal($email_receiver,$cifra)
{   
 
    if ($email_receiver=='') {
 
      $this->log_ipn_test('Mail vuota impossibile pagare');
      die();
    }
 
    //restituisce un array per poter inserire nel caso gli errori
    $solution= $this->get_access_token();
 
 
 
    if($solution['no_error']){
 
 
        $token_request = $solution['token_request'];
 
        $this->log_ipn_test('Token Ok');
 
        $headers = $response = [];
        $headers[] = "Content-Type: application/json";
        $headers[] = "Authorization: Bearer $token_request->access_token";
 
        $time = time();
        $sender_batch_header["sender_batch_id"] = $time;
        $sender_batch_header["email_subject"]   = "Payout Received";
        $sender_batch_header["email_message"]   = "You have received a payout, Thank you for using our services";
 

        $receiver["recipient_type"] = "EMAIL";
        $receiver["note"] = "Thank you for your services";
        $receiver["sender_item_id"] = $time++;
        $receiver["receiver"] = $email_receiver;
        $receiver["amount"]["value"] = $cifra;
        $receiver["amount"]["currency"] = "EUR";
        $outputs[] = $receiver;
        /*
        //--- Second receiver
        $receiver["recipient_type"] = "EMAIL";
        $receiver["note"] = "You received a payout for your services";
        $receiver["sender_item_id"] = $time++;
        $receiver["receiver"] = "[email protected]";
        $receiver["amount"]["value"] = 15.00;
        $receiver["amount"]["currency"] = "USD";
        $outputs[] = $receiver;
        */
        $response["sender_batch_header"] = $sender_batch_header;
        $response["outputs"] = $outputs;
 
        //--- Send payout request
        $payout = $this->curl_request($this->CI->config->item('PAYPAL_PAYOUTS_URL'), "POST", $headers, json_encode($response));
 
        $payout = json_decode($payout);
        //$this->log_ipn_test("|2|$payout[0]['batch_header']");
        //$this->log_ipn_test("|2|$payout[0]['batch_header']['payout_batch_id']");
 
 
 
        $headers2 = $response2 = [];
        //--- Headers for payment description
        $headers2[] = "Content-Type: application/json";
        $headers2[] = "Authorization: Bearer $token_request->access_token";
 
        $link = $payout->links[0]->href;
 
        $this->log_ipn_test($link);
 
        sleep(3); //sleep to prevent PENDING
 
        $dati_pagamento = $this->curl_request($link, "GET", $headers2);
 
        $this->log_ipn_test(json_encode($dati_pagamento));
 
        var_dump($dati_pagamento);
 
        if($payout){
 
            return TRUE;
 
        }else{
 
            return FALSE;
 
        }
 
 
    }else{
 
        $this->log_ipn_test($solution['message_error']);
 
        return FALSE;
 
 
    }
 
} //fine transfer_money_from_business_to_personal
public function log_ipn_test($response=''){ 
         
        $payoutLogFile=PAYOUT_IPNLOG_PATH;
        // Success or failure being logged?
        if ($response) $text .= $response;  
        // Write to log
        $fp=fopen($payoutLogFile,'a');
        fwrite($fp, $text . "\n\n");
        fclose($fp);  // close file
    }

I hope you get an idea about payfast payment gateway integration in codeigniter.
I would like to have feedback on my infinityknow.com blog.
Your valuable feedback, question, or comments about this article are always welcome.
If you enjoyed and liked this post, don’t forget to share.

I am Jaydeep Gondaliya , a software engineer, the founder and the person running Pakainfo. I'm a full-stack developer, entrepreneur and owner of Pakainfo.com. I live in India and I love to write tutorials and tips that can help to other artisan, a Passionate Blogger, who love to share the informative content on PHP, JavaScript, jQuery, Laravel, CodeIgniter, VueJS, AngularJS and Bootstrap from the early stage.

Leave a Reply

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

We accept paid guest Posting on our Site : Guest Post Chat with Us On Skype