CodeIgniter Forums

Full Version: Paypal IPN
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
HI , sorry for  english , i have a problem with Paypal IPN , I test it on sandbox , the payment work fine , i have the retun to my site . When Paypal return message to me (IPN)   the response is VERIFIED but it send me some message instead only one and if i see the cronology the message is faled .
This is  the code :

PHP Code:
public function ipn()
 
   {
 
       $this->paypal_lib->log_ipn_test('########################## NUOVO ACCESSO IPN ############################## ');


 
       if ( ! $this->input->post()) {
 
           
            $this
->paypal_lib->log_ipn_test('Missing POST Data');

 
           throw new Exception("Missing POST Data");
 
       }



 
       $raw_post_data file_get_contents('php://input');
 
       $raw_post_array explode('&'$raw_post_data);
 
       $myPost = array();
 
       foreach ($raw_post_array as $keyval) {
 
           $keyval explode('='$keyval);
 
           if (count($keyval) == 2) {
 
               // Since we do not want the plus in the datetime string to be encoded to a space, we manually encode it.
 
               if ($keyval[0] === 'payment_date') {
 
                   if (substr_count($keyval[1], '+') === 1) {
 
                       $keyval[1] = str_replace('+''%2B'$keyval[1]);
 
                   }
 
               }
 
               $myPost[$keyval[0]] = urldecode($keyval[1]);
 
           }
 
       }
 
       // Build the body of the verification post request, adding the _notify-validate command.
 
       $req 'cmd=_notify-validate';
 
       $get_magic_quotes_exists false;
 
       if (function_exists('get_magic_quotes_gpc')) {
 
           $get_magic_quotes_exists true;
 
       }
 
       foreach ($myPost as $key => $value) {
 
           if ($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1) {
 
               $value urlencode(stripslashes($value));
 
           } else {
 
               $value urlencode($value);
 
           }
 
           $req .= "&$key=$value";

 
       }

 
       $this->paypal_lib->log_ipn_test($req);
 
       
        
// Post the data back to PayPal, using curl. Throw exceptions if errors occur.
 
       $ch curl_init($this->ipn_paypal_url);
 
       
        $this
->paypal_lib->log_ipn_test('CH:'.$ch);
 
       
        curl_setopt
($chCURLOPT_HTTP_VERSIONCURL_HTTP_VERSION_1_1);
 
       curl_setopt($chCURLOPT_POST1);
 
       curl_setopt($chCURLOPT_RETURNTRANSFER1);
 
       curl_setopt($chCURLOPT_POSTFIELDS$req);
 
       curl_setopt($chCURLOPT_SSLVERSION6);
 
       curl_setopt($chCURLOPT_SSL_VERIFYPEER1);
 
       curl_setopt($chCURLOPT_SSL_VERIFYHOST2);
 
       // This is often required if the server is missing a global cert bundle, or is using an outdated one.
 
       if ($this->use_local_certs) {
 
           curl_setopt($chCURLOPT_CAINFO__DIR__ "/cert/cacert.pem");
 
       }
 
       curl_setopt($chCURLOPT_FORBID_REUSE1);
 
       curl_setopt($chCURLOPT_CONNECTTIMEOUT30);
 
       curl_setopt($chCURLOPT_HTTPHEADER, array(
 
           'User-Agent: PHP-IPN-Verification-Script',
 
           'Connection: Close',
 
       ));

 
       $res curl_exec($ch);
 
       $this->paypal_lib->log_ipn_test('RES:'.$res);

 
       if ( ! ($res)) {
 
           $errno curl_errno($ch);
 
           $errstr curl_error($ch);
 
           curl_close($ch);

 
           $this->paypal_lib->log_ipn_test("cURL error: [$errno$errstr");

 
           throw new Exception("cURL error: [$errno$errstr");
 
       }

 
       $info curl_getinfo($ch);

 
       $this->paypal_lib->log_ipn_test("INFO: ".print_r($info));

 
       $http_code $info['http_code'];

 
       $this->paypal_lib->log_ipn_test("http_code: ".$http_code);

 
       if ($http_code != 200) {

 
           $this->paypal_lib->log_ipn_test("PayPal responded with http code $http_code");
 
           throw new Exception("PayPal responded with http code $http_code");
 
       }
 
       


        
// Reply with an empty 200 response to indicate to paypal the IPN was received correctly.
 
       header("HTTP/1.1 200 OK");


 
       
        
// inspect IPN validation result and act accordingly
 
       if (strcmp ($res"VERIFIED") == 0) {


 
               // The IPN is verified, process it


 
               foreach($this->input->post() as $key => $value) {
 
                      
                    $this
->paypal_lib->log_ipn_test$key " = " $value );
 
               }


 
               
                
// Paypal return transaction details array
 
               $paypalInfo $this->input->post();

 
               $azienda_id     $paypalInfo['custom'];
 
               $preventivo_id  $paypalInfo["item_number"];
 
               $txn_id         $paypalInfo["txn_id"];
 
               $payment_gross  $paypalInfo["mc_gross"];
 
               $currency_code  $paypalInfo["mc_currency"];
 
               $payer_email    $paypalInfo["payer_email"];
 
               $payment_status $paypalInfo["payment_status"];





 
               $this->paypal_lib->log_ipn_test("RES VERIFIED");


 
               // Insert the transaction data into the database
 
               if($this->preventivi_paypal_model->insertTransaction(


 
                   $azienda_id,
 
                   $preventivo_id,
 
                   $txn_id,
 
                   $payment_gross,
 
                   $currency_code,
 
                   $payer_email,
 
                   $payment_status


                
) ){

 
                   $this->paypal_lib->log_ipn_test('Inserita transazione nel db ');



 
                   $this->paypal_lib->log_ipn_test('pagamento verificato');
 
                   $this->paypal_lib->log_ipn_test('azienda_id:'.$paypalInfo['custom']);
 
                   $this->paypal_lib->log_ipn_test('preventivo_id:'.$paypalInfo['item_number']);
 
                   $this->paypal_lib->log_ipn_test('txn_id:'.$paypalInfo['txn_id']);
 
                   $this->paypal_lib->log_ipn_test('mc_gross:'.$paypalInfo['mc_gross']);
 
                   $this->paypal_lib->log_ipn_test('mc_currency:'.$paypalInfo['mc_currency']);
 
                   $this->paypal_lib->log_ipn_test('payer_email:'.$paypalInfo['payer_email']);
 
                   $this->paypal_lib->log_ipn_test('payment_status:'.$paypalInfo['payment_status']);


 
                   #############################################
 
                   //Invio mail a cliente
 
                   #############################################

 
                   //recupero id del lavoro dal preventivo
 
                   $preventivo=$this->preventivi_inviati_aziende_model
                                     
->get_Preventivi_inviati_aziende($paypalInfo['item_number']);

 
                   //recupero id del cliente dal lavoro
 
                   $lavoro=$this->lavori_model->get_Lavori($preventivo->id_lavori);


 
                   //recupero i dati del cliente 
 
                   $cliente=$this->clienti_model->get_Clienti($lavoro->id_clienti);

 
                   //invio mail a cliente

 
                   if($this->send_mail_cliente_preventivo_pagato_paypal($cliente->email) ){

 
                       $this->paypal_lib->log_ipn_test('mail inviata al cliente : '.$cliente->email);

 
                   }

 
                   

                    
############################################


 
                   #############################################
 
                   //Cambio lo stato del preventivo
 
                   #############################################

 
                   if($this->preventivi_inviati_aziende_model->set_stato($preventivo->id,4)){

 
                       $this->paypal_lib->log_ipn_test('Cambio stato preventivo (4) : '.$preventivo->id);

 
                   
                    
}



 
                   #############################################

 
                   #############################################
 
                   //cambiare lo stato del lavoro
 
                   #############################################

 
                   if($this->lavori_model->set_stato($preventivo->id_lavori,4)){


 
                       $this->paypal_lib->log_ipn_test('Stato lavoro modificato : '.$preventivo->id_lavori);
 
                   
                    
}


 
                   #############################################
 
                   //cambio il tipo di pagamento nel preventivo
 
                   #############################################


 
                    if($this->preventivi_inviati_aziende_model->set_metodo_pagamento($preventivo->id,2)){

 
                       $this->paypal_lib->log_ipn_test('Cambio stato metodo pagamento (2) : '.$preventivo->id);

 
                   
                    
}


 
                   #############################################

 
                   //TODO
 
                   //eliminare pulsanti paypal e bonifico


 
                   #############################################
 
                   //Invio mail a admin
 
                   #############################################

 
                   if($this->send_mail_admin_preventivo_pagato_paypal($paypalInfo["item_number"]) ) {

 
                       $this->paypal_lib->log_ipn_test('Mail inviata a admin : '.$preventivo->id_lavori);


 
                   }



 
                   #############################################
 
                   //Invio mail a azienda dai del cliente
 
                   #############################################

 
                   $azienda=$this->aziende_model->get_Aziende($paypalInfo['custom']);


 
                   if($this->invia_mail_azienda_abilitato_visualizzazione_cliente($azienda->email,$cliente) ){

 
                       $this->paypal_lib->log_ipn_test('mail inviata all\'azienda : '.$azienda->email);

 
                   }



 
                   ############################################
 
                   // INSERisci transazione in preventivo
 
                   #############################################

 
                     if($this->preventivi_inviati_aziende_model->inserisci_transazione_paypal($txn_id)){

 
                       $this->paypal_lib->log_ipn_test('Transazione inserita in preventivi');

 
                   
                    
}

 
                   #############################################



 
       
           
   
            
        
} else {


 
           $this->paypal_lib->log_ipn_test('NOT VALID '.$res);
 
           return false;
 
       }



 
   


$this->paypal_lib->log_ipn_test($sometxet) only write in a log...