Search code examples
phpcodeigniterpaypalpaypal-ipnpayment-gateway

how to integrate paypal with codeigniter?


I'm trying to integrate PayPal payment with my codeigniter project. My project is about a dating site, in which two different users interact with each other. So I'm selling plans, on the based of which users will be provided access to send messages to to other for the that period of time. For that i have developed a very simple page containing radio buttons to choose from different plans. These are the following plans

  • one month ($2)
  • Two month ($4)
  • Three month ($6)
  • Four month ($8)
  • Five month ($10)

and so on

  • Six month ($12)

So, user can choose anyone plan from the above and can then proceed further to pay the amount on PayPal. This page will be available to user who have accounts on our site. so we can transfer all the details of current user to PayPal, such as -- name,email,etc..

I have tried reading many articles on how to integrate paypal but none of them helped me. As I'm new to codeigniter.

I have also created Paypal and sandbox account on paypal. I downloaded php-toolkit from sourceforge.net and used it independently, then it runs properly. but when i try to implement in codeigniter, it does not take anywhere.

Please help me !!

EDIT :

<?php 

    //Configuration File
    include_once APPPATH.'../php_paypal/includes/config.inc.php'; 

    //Global Configuration File
    include_once APPPATH.'../php_paypal/includes/global_config.inc.php';

?> 
<?php echo form_open('https://www.sandbox.paypal.com/cgi-bin/webscr');?>   

 <input type="hidden" name="amount" value="9.95">
 <input type="hidden" name="item_name" value="Test Payment">
</form>

This is what i'm simply trying to create. Earlier i tried to use "process.php" in the form action, but i was getting URL error in codeigniter. So i thought why not use this way. I know there are function responsible which are sending values to paypal. But through this action method. I'm being redirected to simple paypal page.


Solution

  • Here are the steps you can follow.

    Step1 Create IPN Form. make sure to pass IPN URL (notify URL) to paypal.

    For Form variables, you can refer https://developer.paypal.com/webapps/developer/docs/classic/paypal-payments-standard/integration-guide/Appx_websitestandard_htmlvariables/

    <form name="paypalFrm" id="paypalFrm" action="https://www.paypal.com/cgi-bin/webscr" method="post">
        <input type="hidden" name="cmd" value="_ext-enter">
        <input type="hidden" name="redirect_cmd" value="_xclick-subscriptions">
        <input type="hidden" name="return" value="<?php echo $return_url;?>">
        <input type="hidden" name="cancel_return" value="<?php echo $cancel_return;?>">
        <input type="hidden" name="notify_url" value="<?php echo $notify_url;?>">
        <input type="hidden" name="custom" value="<?php echo $custom.",".$custom2;?>">
        <input type="hidden" name="business" value="<?php echo $business_id;?>">
        <input type="hidden" name="item_name" value="<?php echo $item_name;?>">
        <input type="hidden" name="item_number" value="1">
        <input type="hidden" name="no_note" value="1">
        <input type="hidden" name="currency_code" value="USD">
        <input type="hidden" name="a3" value="<?php echo $plan_amount;?>">  
        <input type="hidden" name="p3" value="1">  
        <input type="hidden" name="t3" value="M">   
        <input type="hidden" name="src" value="1">
        <input type="hidden" name="sra" value="1">
        <input type="hidden" name="srt" value="12">
        <input type="hidden" name="first_name" value="<?php echo $txtname;?>">
        <input type="hidden" name="lc" value="<?php echo $merchant_country;?>">
        <input type="hidden" name="email" value="<?php echo $txtemail;?>">
    </form>
    

    Step 2 Create IPN controller. For detailed understanding review https://developer.paypal.com/docs/classic/ipn/gs_IPN/

    $req = 'cmd=_notify-validate';
    foreach ($_POST as $key => $value) { $_POST[$key] = mysql_real_escape_string($value); }         
    
    foreach ($_POST as $key => $value) {
        $value = urlencode(stripslashes($value));
        $req .= "&$key=$value";
    }
    
    $header = ''; 
    $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
    $fp = fsockopen('www.sandbox.paypal.com', 80, $errno, $errstr, 30);
    
    // assign posted variables to local variables
    
    $content['payment_status']      = $this->input->post('payment_status');
    $content['payment_amount']      = $this->input->post('mc_gross');
    $content['payment_currency']    = $this->input->post('mc_currency');
    $content['txn_id']              = $this->input->post('txn_id');
    $content['receiver_email']      = $this->input->post('receiver_email');
    $content['payer_email']         = $this->input->post('payer_email');    
    $custom                         = explode(",",$this->input->post('custom'));
    $content['payment_id']          = $custom[0];
    $content['type']                = $custom[1];
    $content['txn_type']            = $this->input->post('txn_type');        
    $content['paydate']             = date('Y-m-d H:i:s');
    
    
    if (!$fp)
    {
        // HTTP ERROR
    }
    else
    {
    
        fputs ($fp, $header . $req);
        if (!feof($fp))
        {
            $res = fgets ($fp, 1024);
    
            if(strcasecmp($content['txn_type'], "subscr_payment") == 0)
            {
                //Action            
            }
            else if(strcasecmp($content['payment_status'], "Completed") == 0)
            {
                //Action            
            }
            else if(strcasecmp($content['txn_type'], "subscr_cancel") == 0)
            {
               //Action            
            }
        }
        fclose ($fp);
    }