Nowadays the payment gateway is hugely used for the e-commerce business and online service providers. It helps to accept payment online in the web application. Before integrating a payment gateway into the website, you need to choose the best payment gateway service provider to accept online payment without any interruption. PayPal is one of the world’s most popular internet payment solution. If you want to accept payment globally on your website, PayPal is the best choice for integrating the payment gateway into your web project.
PayPal provides an easy way to integrate standard payment gateway in PHP. If your web application built with CodeIgniter, PayPal PHP library and API needs to be integrated in the CodeIgniter application. In this tutorial, we will show you how to integrate PayPal payment gateway in CodeIgniter. Here we will provide the step by step guide on PayPal standard payment gateway integration for CodeIgniter application. Our example code will help you to integrate PayPal payment gateway in CodeIgniter.
In this example script, the following functionality will be implemented to integrate PayPal payment gateway in CodeIgniter application.
Before making the PayPal payment gateway live, it needs to be tested whether the payment process is working properly. PayPal provides a Sandbox environment to test the transaction process before accept payment from the buyers.
To test the PayPal payment gateway, you need to create PayPal sandbox account.
Before getting started to integrate PayPal payment gateway in CodeIgniter, take a look at the file structure.
codeigniter_paypal_integration/ ├── application/ │ ├── config/ │ │ └── paypal.php │ ├── controllers/ │ │ ├── Products.php │ │ └── Paypal.php │ ├── libraries/ │ │ └── Paypal_lib.php │ ├── models/ │ │ ├── Product.php │ │ └── Payment.php │ ├── views/ │ │ ├── products/ │ │ │ └── index.php │ │ └── paypal/ │ │ ├── success.php │ │ └── cancel.php └── assets/ └── css/ ├── bootstrap.min.css └── style.css
To store product and payment information two tables are required in the database.
The following SQL creates a products
table with some basic fields in the MySQL database.
CREATE TABLE `products` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`image` varchar(200) COLLATE utf8_unicode_ci NOT NULL,
`price` float(10,2) NOT NULL,
`currency` varchar(10) COLLATE utf8_unicode_ci NOT NULL DEFAULT 'USD',
`status` enum('1','0') COLLATE utf8_unicode_ci NOT NULL DEFAULT '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
The following SQL creates a payments
table in the MySQL database to store the transaction information provided by PayPal.
CREATE TABLE `payments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`user_id` int(11) DEFAULT NULL,
`txn_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`payment_gross` float(10,2) NOT NULL,
`currency_code` varchar(5) COLLATE utf8_unicode_ci NOT NULL,
`payer_name` varchar(50) COLLATE utf8_unicode_ci NOT NULL,
`payer_email` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`status` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
paypal.php
The configuration variables of the PayPal library are defined in this file.
sandbox
), business email (business
), and currency code (paypal_lib_currency_code
).<?php defined('BASEPATH') OR exit('No direct script access allowed');
/*
| -------------------------------------------------------------------
| PayPal API Configuration
| -------------------------------------------------------------------
|
| You will get the API keys from Developers panel of the PayPal account
| Login to PayPal account (https://developer.paypal.com/)
| and navigate to the SANDBOX » Accounts page
| Remember to switch to your live business email in production!
|
| sandbox boolean PayPal environment, TRUE for Sandbox and FALSE for live
| business string PayPal business email
| paypal_lib_currency_code string Currency code.
*/
$config['sandbox'] = TRUE; // FALSE for live environment
$config['business'] = 'Your_PayPal_Email';
$config['paypal_lib_currency_code'] = 'USD';
// Where is the button located at? (optional)
$config['paypal_lib_button_path'] = 'assets/images/';
// If (and where) to log ipn response in a file
$config['paypal_lib_ipn_log'] = FALSE;
$config['paypal_lib_ipn_log_file'] = BASEPATH . 'logs/paypal_ipn.log';
PayPal (libraries/Paypal_lib.php
)
The Paypal CodeIgniter Library helps to integrate PayPal payment gateway in CodeIgniter 3 application. This library (application/libraries/Paypal_lib.php
) has a dependency on a configuration file (application/config/paypal.php
).
<?php defined('BASEPATH') OR exit('No direct script access allowed');
/**
* PayPal Library for CodeIgniter 3.x
*
* Library for PayPal payment gateway. It helps to integrate PayPal payment gateway
* in the CodeIgniter application.
*
* It requires PayPal configuration file and it should be placed in the config directory.
*
* @package CodeIgniter
* @category Libraries
* @author CodexWorld
* @license http://www.codexworld.com/license/
* @link http://www.codexworld.com
* @version 2.0
*/
class Paypal_lib
{
var $last_error; // holds the last error encountered
var $ipn_log; // bool: log IPN results to text file?
var $ipn_log_file; // filename of the IPN log
var $ipn_response; // holds the IPN response from paypal
var $ipn_data = array(); // array contains the POST values for IPN
var $fields = array(); // array holds the fields to submit to paypal
var $submit_btn = ''; // Image/Form button
var $button_path = ''; // The path of the buttons
var $CI;
function __construct(){
$this->CI =& get_instance();
$this->CI->load->helper('url');
$this->CI->load->helper('form');
$this->CI->load->config('paypal');
$sanbox = $this->CI->config->item('sandbox');
$this->paypal_url = ($sanbox == TRUE)?'https://www.sandbox.paypal.com/cgi-bin/webscr':'https://www.paypal.com/cgi-bin/webscr';
$this->last_error = '';
$this->ipn_response = '';
$this->ipn_log_file = $this->CI->config->item('paypal_lib_ipn_log_file');
$this->ipn_log = $this->CI->config->item('paypal_lib_ipn_log');
$this->button_path = $this->CI->config->item('paypal_lib_button_path');
// populate $fields array with a few default values.
// values can be overwritten by the calling script.
$businessEmail = $this->CI->config->item('business');
$this->add_field('business',$businessEmail);
$this->add_field('rm','2'); // Return method = POST
$this->add_field('cmd','_xclick');
$this->add_field('currency_code', $this->CI->config->item('paypal_lib_currency_code'));
$this->add_field('quantity', '1');
$this->button('Pay Now!');
}
function button($value){
// changes the default caption of the submit button
$this->submit_btn = form_submit('pp_submit', $value);
}
function image($file){
$this->submit_btn = '<input type="image" name="add" src="'.base_url(rtrim($this->button_path, '/').'/'. $file).'" border="0" />';
}
function add_field($field, $value){
// adds a key=>value pair to the fields array, which is what will be
// sent to paypal as POST variables. If the value is already in the
// array, it will be overwritten.
$this->fields[$field] = $value;
}
function paypal_auto_form(){
// this function actually generates an entire HTML page consisting of
// a form with hidden elements which is submitted to paypal via the
// BODY element's onLoad attribute.
$this->button('Click here if you\'re not automatically redirected...');
echo '<html>' . "\n";
echo '<head><title>Processing Payment...</title></head>' . "\n";
echo '<body style="text-align:center;" onLoad="document.forms[\'paypal_auto_form\'].submit();">' . "\n";
echo '<p style="text-align:center;">Please wait, your order is being processed and you will be redirected to the PayPal website.</p>' . "\n";
echo $this->paypal_form('paypal_auto_form');
echo '</body></html>';
}
function paypal_form($form_name='paypal_form'){
$str = '';
$str .= '<form method="post" action="'.$this->paypal_url.'" name="'.$form_name.'"/>' . "\n";
foreach ($this->fields as $name => $value)
$str .= form_hidden($name, $value) . "\n";
$str .= '<p>'. $this->submit_btn . '</p>';
$str .= form_close() . "\n";
return $str;
}
function validate_ipn($paypalReturn){
$ipn_response = $this->curlPost($this->paypal_url, $paypalReturn);
if(preg_match("/VERIFIED/i", $ipn_response)){
// Valid IPN transaction.
return true;
}else{
// Invalid IPN transaction. Check the log for details.
$this->last_error = 'IPN Validation Failed.';
$this->log_ipn_results(false);
return false;
}
}
function log_ipn_results($success){
if (!$this->ipn_log) return; // is logging turned off?
// Timestamp
$text = '['.date('m/d/Y g:i A').'] - ';
// Success or failure being logged?
if ($success) $text .= "SUCCESS!\n";
else $text .= 'FAIL: '.$this->last_error."\n";
// Log the POST variables
$text .= "IPN POST Vars from Paypal:\n";
foreach ($this->ipn_data as $key=>$value)
$text .= "$key=$value, ";
// Log the response from the paypal server
$text .= "\nIPN Response from Paypal Server:\n ".$this->ipn_response;
// Write to log
$fp=fopen($this->ipn_log_file,'a');
fwrite($fp, $text . "\n\n");
fclose($fp); // close file
}
function dump(){
// Used for debugging, this function will output all the field/value pairs
// that are currently defined in the instance of the class using the
// add_field() function.
ksort($this->fields);
echo '<h2>ppal->dump() Output:</h2>' . "\n";
echo '<code style="font: 12px Monaco, \'Courier New\', Verdana, Sans-serif; background: #f9f9f9; border: 1px solid #D0D0D0; color: #002166; display: block; margin: 14px 0; padding: 12px 10px;">' . "\n";
foreach ($this->fields as $key => $value) echo '<strong>'. $key .'</strong>: '. urldecode($value) .'<br/>';
echo "</code>\n";
}
function curlPost($paypal_url, $paypal_return_arr){
$req = 'cmd=_notify-validate';
foreach($paypal_return_arr as $key => $value){
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
$ipn_site_url = $paypal_url;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $ipn_site_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
}
The Products and Paypal controllers will be used to handle the product listing and payment process.
1. Products (controllers/Products.php
):
The Products controller handles the product listing and payment request submission process.
add_field()
and paypal_auto_form()
methods of the PayPal library.<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Products extends CI_Controller{
function __construct(){
parent::__construct();
// Load paypal library
$this->load->library('paypal_lib');
// Load product model
$this->load->model('product');
}
function index(){
$data = array();
// Get products from the database
$data['products'] = $this->product->getRows();
// Pass product data to the view
$this->load->view('products/index', $data);
}
function buy($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 product data from the database
$product = $this->product->getRows($id);
// Get current user ID from the session (optional)
$userID = !empty($_SESSION['userID'])?$_SESSION['userID']:1;
// Add fields to paypal form
$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']);
// Render paypal form
$this->paypal_lib->paypal_auto_form();
}
}
2. Paypal (controllers/Paypal.php
):
The Paypal controller handles the transaction and the IPN validation process.
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Paypal extends CI_Controller{
function __construct(){
parent::__construct();
// Load paypal library
$this->load->library('paypal_lib');
// Load product model
$this->load->model('product');
// Load payment model
$this->load->model('payment');
}
function success(){
// Get the transaction data
$paypalInfo = $this->input->get();
$productData = $paymentData = array();
if(!empty($paypalInfo['item_number']) && !empty($paypalInfo['tx']) && !empty($paypalInfo['amt']) && !empty($paypalInfo['cc']) && !empty($paypalInfo['st'])){
$item_name = $paypalInfo['item_name'];
$item_number = $paypalInfo['item_number'];
$txn_id = $paypalInfo["tx"];
$payment_amt = $paypalInfo["amt"];
$currency_code = $paypalInfo["cc"];
$status = $paypalInfo["st"];
// Get product info from the database
$productData = $this->product->getRows($item_number);
// Check if transaction data exists with the same TXN ID
$paymentData = $this->payment->getPayment(array('txn_id' => $txn_id));
}
// Pass the transaction data to view
$data['product'] = $productData;
$data['payment'] = $paymentData;
$this->load->view('paypal/success', $data);
}
function cancel(){
// Load payment failed view
$this->load->view('paypal/cancel');
}
function ipn(){
// Retrieve transaction data from PayPal IPN POST
$paypalInfo = $this->input->post();
if(!empty($paypalInfo)){
// Validate and get the ipn response
$ipnCheck = $this->paypal_lib->validate_ipn($paypalInfo);
// Check whether the transaction is valid
if($ipnCheck){
// Check whether the transaction data is exists
$prevPayment = $this->payment->getPayment(array('txn_id' => $paypalInfo["txn_id"]));
if(!$prevPayment){
// Insert the transaction data in the database
$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_name'] = trim($paypalInfo["first_name"].' '.$paypalInfo["last_name"], ' ');
$data['payer_email'] = $paypalInfo["payer_email"];
$data['status'] = $paypalInfo["payment_status"];
$this->payment->insertTransaction($data);
}
}
}
}
}
Setup PayPal Instant Payment Notification (IPN):
The ipn()
function of the Paypal controller verifies each transaction and inserts the payment data into the database. The PayPal IPN must be enabled in PayPal business account to make the IPN working. You need to specify the IPN URL (http://www.example.com/paypal/ipn/
) in the Notification URL field where the PayPal will send the IPN messages.
Follow this step-by-step guide to enable IPN in PayPal – How to enable PayPal Instant Payment Notification
Note that: The transaction data will not be inserted in the database without PayPal IPN setup.
The Product and Payment models handle the database related operations (fetch and insert).
1. Product (models/Product.php
)
products
table and returns as an array.
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Product extends CI_Model{
function __construct() {
$this->proTable = 'products';
}
/*
* Fetch products data from the database
* @param id returns a single record if specified, otherwise all records
*/
public function getRows($id = ''){
$this->db->select('*');
$this->db->from($this->proTable);
$this->db->where('status', '1');
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 fetched data
return !empty($result)?$result:false;
}
}
2. Payment (models/Payment.php
)
payments
table and returns as an array.payments
table.<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Payment extends CI_Model{
function __construct() {
$this->transTable = 'payments';
}
/*
* Fetch payment data from the database
* @param id returns a single record if specified, otherwise all records
*/
public function getPayment($conditions = array()){
$this->db->select('*');
$this->db->from($this->transTable);
if(!empty($conditions)){
foreach($conditions as $key=>$val){
$this->db->where($key, $val);
}
}
$result = $this->db->get();
return ($result->num_rows() > 0)?$result->row_array():false;
}
/*
* Insert payment data in the database
* @param data array
*/
public function insertTransaction($data){
$insert = $this->db->insert($this->transTable,$data);
return $insert?true:false;
}
}
The products and paypal directories hold the view files of Products and Paypal controllers.
1. views/products/
1.1. index.php
In this view, all the products are displayed on the web page with the Buy button.
<!-- List all products -->
<?php if(!empty($products)){ foreach($products as $row){ ?>
<div class="card">
<img src="<?php echo base_url('assets/images/'.$row['image']); ?>" />
<div class="card-body">
<h5 class="card-title"><?php echo $row['name']; ?></h5>
<p class="card-text">Lorem Ipsum is simply dummy text of the printing and typesetting industry.</p>
<h6>$<?php echo $row['price'].' '.$row['currency']; ?></h6>
<a href="<?php echo base_url('products/buy/'.$row['id']); ?>" class="btn"><img src="<?php echo base_url('assets/images/paypal-btn.png'); ?>" /></a>
</div>
</div>
<?php } }else{ ?>
<p>Product(s) not found...</p>
<?php } ?>
2. views/paypal/
2.1. success.php
In this view, the payment status and transaction details are displayed after the payment on PayPal.
<?php if(!empty($payment)){ ?>
<h1 class="success">Your Payment has been Successful!</h1>
<h4>Payment Information</h4>
<p><b>Reference Number:</b> #<?php echo $payment['id']; ?></p>
<p><b>Transaction ID:</b> <?php echo $payment['txn_id']; ?></p>
<p><b>Paid Amount:</b> <?php echo $payment['payment_gross'].' '.$payment['currency_code']; ?></p>
<p><b>Payment Status:</b> <?php echo $payment['status']; ?></p>
<h4>Payer Information</h4>
<p><b>Name:</b> <?php echo $payment['payer_name']; ?></p>
<p><b>Email:</b> <?php echo $payment['payer_email']; ?></p>
<h4>Product Information</h4>
<p><b>Name:</b> <?php echo $product['name']; ?></p>
<p><b>Price:</b> <?php echo $product['price'].' '.$product['currency']; ?></p>
<?php }else{ ?>
<h1 class="error">Transaction has been failed!</h1>
<?php } ?>
2.2. cancel.php
If the user cancels the payment, the transaction failed notification is displayed.
<div class="status">
<h1 class="error">Your transaction was canceled!</h1>
</div>
When the payment flow testing process is completed with a sandbox account, do the following changes to make the PayPal payment gateway live.
In the application/config/paypal.php
file, specify the PayPal environment and business email.
$config['sandbox'] = FALSE;
$config['business'] = 'live_paypal@email.com';
PayPal Express Checkout Integration in PHP
Do you want to get implementation help, or enhance the functionality of this script? Click here to Submit Service Request
Really very use full this example for paypal integration thank you very mush CODEXWORLD I really appreciate for your work.
good and very easy.Thanks codex
how to send custom field value in this paypal form
How to set per Day frequency of IPN
should i set the url http://example.com/paypal/ipn at Instant Payment Notification (IPN) setting of paypal
How we can create adaptive payment to multiple users at same time by improving this code.
Hi!
How to get detail transaction with custom field (unique)
The transaction details can be received in the ipn() function of PayPal controller.
hi
it’s possible to download the folder codeigniter_paypal_integration !!??
Yes possible, please download the source code.
Dear sir,
Codeigniter project in successfully integration paypal payment integration and successfully payment and database in store data but the problem is
>> after paypal payment automatically success page never redirect and if click to return merchant on paypal after payment page then redirect success page but many type parameter never transfers on the web page.
please help me
You must enable the Auto Return and Payment Data Transfer in your PayPal account to get the transaction data in the success() method. See this tutorial to configure it – https://www.codexworld.com/how-to/configure-paypal-sandbox-auto-return-payment-data-transfer/
Hi,
I want to trigger the function when client click on paynow button of paypal form not on payment success function, how i can do that.
Hi, I have an application in which user can change currency. So, I need to dynamically change the PayPal currency during payment and want that they can pay in their own currency
It’s working. But after the payment in paypal nothing happens, no success message and database is empty. I used modules in codeigniter.
products
– controller
– products.php
– model
– product.php
– view
– index.php
paypal
– controller
– paypal.php
– model
–
– view
– success.php
– cancel.php
Did you test the payment gateway on the local server?
If yes:
The PayPal IPN will not work on the local server. You need to test the IPN on the live server.
If no:
1. Enable the Payment Data Transfer in your PayPal business account – http://www.codexworld.com/how-to/configure-paypal-sandbox-auto-return-payment-data-transfer/
2. Enable IPN and specify IPN URL in your PayPal business account – http://www.codexworld.com/how-to-enable-paypal-ipn/
HI , the library work but i cannot receive ipn message , i set ipn url in my business account but if it see ipn message in paypal it show failed . How can i debug to find problem ?
Please share the screenshot of the IPN history from PayPal account, we will check and let you know the issue.
it’s working fine …… Thank You
how to use currency dynamically
I really like your code just want to know one thing. As I need it for multi-currency.I want to change currency dynamically.
Pls help
I am using ipn on localhost and made changes in ipn settings and also payment transfer data but syill its not updating is it because of localhost or any other reason
PayPal IPN will nor work on the localhost server. You need to setup PayPal IPN on the live server.
Hii admin ;
I tried your code everything is working fine . But instead of using another business sandbox account it is redirecting me to the cancel function . But when I am using your gmail it is working . I also tried login into sanbox business account it is saying to confirm email . But I do not recieve any mail . Is it necessary to confirm sandbox business account to recieve payments.
Please help…..
I am not getting the success response in $this->input->get(); why ?
You must enable the Payment Data Transfer in your PayPal account to get the transaction data in success() method. See this tutorial to configure it – http://www.codexworld.com/how-to/configure-paypal-sandbox-auto-return-payment-data-transfer/
It was really helpful.Yes,after posting the comment,I realized that after going through the paypal ipn history and the ipn call of our code.Thanks a ton!.
Thank you..Your solution works well.Could you please post ipn.php for code igniter.
The PayPal IPN functionality has already been integrated into the
ipn()
method of Paypal controller.how about adding item name, number, amount multiple times???
See this tutorial to accept payment for multiple items with PayPal in PHP – https://www.codexworld.com/paypal-standard-add-to-cart-multiple-items-php/
hello codex world!
i am wondering does this code has the feature of recurring payments?
thank you very much for you tutorial
How Redirect user back after login using CodeIgniter
You are Great Mr.codexworld thank you for your code
How Create API credentials for business account snadbox for test ?
Please see this tutorial to create PaPal sandbox account (Personal & Business) – https://www.codexworld.com/creating-paypal-sandbox-test-account-website-payments-pro-account/
we want to add the solutiontype = sole so users wont have to register and just pay without signing up to paypal? can you help us on how to go about that? thank you and more power!
I really appreciate what codexworld have been doing for long. I like this site much and have learnt a lot. Thank you
hello Codex World
I have tried your solution works fine only a small query i have is after making the payments the paypal is not returning to the url i have set in the profile of my business account of sandbox. Instead of redirecting its logging in the user.
I have set the return url in the paypal account as you have demonstrated in the other tutorial on your blog. And the same url is in my code.
I was wondering if there will be a laravel example using ipn library.Many people are looking forward to it.
We will try to publish PayPal library for Laravel framework soon. Subscribe our newsletter to get notified.
please tell me about paypal_lib. after doing all code, i got an error “Unable to load the requested class: Paypal_lib”. So where is the library file for paypal?? please help me.
You have skipped the Library Creation step provided in the tutorial, follow the instructions given in this step.
I would like to know if there is any way to test this before putting it live.Soon i will work in an e-commerce website and i will use this helpful method i just wanted to be sure that the ipn will return data to the database.
Yes, the PayPal payment gateway integration should test with Sandbox environment before making live. Follow the steps given in the tutorial.
I do not own a server and a domain im coding from localhost but in the IPN seetings page is asking me for a notifcition url.When i put localhost im getting a message showing that this url is invalid.Pleae help me!
PayPal IPN only works on the live server.
how about payment send to the individual (personal account) .. this tutorial working fine with a business account. can you tell me what should I do with the individual account?
No, you need a PayPal business account for integrating PayPal payment gateway in the website.
Working Perfectly …THanks for this Article
I never redirect anywhere when i click on Agree and Pay Now button…can you suggest me on this or may i misplace some thing or can you tell me basic requirements
Thanks in Advance
You need to configure PayPal Auto Return to redirect automatically to your website after payment on PayPal, follow this guide – https://www.codexworld.com/how-to/configure-paypal-sandbox-auto-return-payment-data-transfer/
Sir ,
I have another query , that is when the payment made is success then paypal redirects to the success() method , but how and when the ipn() method is called ?
This
ipn()
method will be called by the PayPal IPN. But you have to enable IPN and specify IPN URL (http://example.com/paypal/ipn) in your PayPal business account. Follow this guide to enable PayPal IPN – http://www.codexworld.com/how-to-enable-paypal-ipn/Sir,
I have already gone through the codes. This code is for single product, but now if I want to add multiple products from shopping cart then how will I do. Please Help I am in deep trouble.
Follow this tutorial to accept payment for multiple items with PayPal – https://www.codexworld.com/paypal-standard-add-to-cart-multiple-items-php/
not getting data in success page , after successful payment
You need to enable Payment Data Transfer in your PayPal account. See this tutorial to configure it – http://www.codexworld.com/how-to/configure-paypal-sandbox-auto-return-payment-data-transfer/
thankyou very much for you tutorial
You are Great Mr.codexworld. You are always getting the need of mine.not only me,those who all needs the clear explanations and understandings
How we can add money back into paypal account.