Visualizzazione dei risultati da 1 a 6 su 6

Visualizzazione discussione

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    213

    Integrare sistema Paypal

    Apro questa discussione perchè sono due giorni che non riesco a venire a capo di un problema.
    Ho provato ad integrare, seguendo una guida, il sistema Paypal su di un sito di test.
    Il sistema sembra essere funzionante in quanto riesco a pagare e ricevere il denaro da un account all'altro, il problema nasce quando voglio provare ad integrare l'IPN (il sistema di di notifiche immediate di pagamento) per permettere di ottenere subito quello che si acquista. Ho linkato il profilo dove si trova il listener per accogliere i dati ma sembra che questo non funzioni molto bene poichè dovrebbe aggiungere un utente al database ma non è così.

    Sono due giorni che non riesco a venirne a capo, come si potrebbe testare il codice per verificare i valori che mi ritorna o qualche piccolo metodo di debug per vedere dove s'inceppa il codice? (essendo un listener è inutile inserire echo visto che non verrebbero mai messi a video).

    Provo a postarvi i semplici file per vedere se qualcuno di animo buono riesca ad aiutarmi

    pp_config.php
    Codice PHP:
    <?php
    //system
    define("SIMULATION"1);
    define("SIMULATION_URL""www.sandbox.paypal.com");
    define("PRODUCTION_URL""www.paypal.com");
    define("PRIMARY_PAYPAL_EMAIL""");
    define("PRIMARY_SANDBOX_EMAIL""");
     
    //db
    define("HOST""localhost");
    define("DB_USER""");
    define("DB_NAME""");
    define("DB_PASSWORD""");
     
    //messages
    define("ADMIN_MAIL""");
    define("NO_REPLY""");
     
    define("AMMOUNT"50);
    ?>
    IPNListener.php
    Codice PHP:
    <?php
    require_once 'pp_config.php';
     
    abstract class 
    IPNListener
    {
        private function 
    isVerifiedIPN()
        {
            
    $req 'cmd=_notify-validate';
            foreach (
    $_POST as $key => $value)
            {
                
    $value urlencode(stripslashes($value));
                
    $req .= "&$key=$value";
            }
     
            
    //Modificando la costante SIMULATION nel file di configurazione
            //è possibile passare dall'ambiente di simulazione a quello di produzione
            
    if(SIMULATION)
            {
                
    $url SIMULATION_URL;
            }
            else
            {
                
    $url PRODUCTION_URL;
            }
     
            
    $header "POST /cgi-bin/webscr HTTP/1.0\r\n";
            
    $header .= "Host: $url:443\r\n";
            
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
            
    $header .= "Content-Length: " strlen($req) . "\r\n\r\n";
     
            
    $fp fsockopen ("ssl://$url"443$errno$errstr30);
     
            if (!
    $fp)
            {
                
    // HTTP ERROR
                // $errstr - $errno
                
    $this->sendReport();
                return 
    FALSE;
            }
            else
            {
                
    fputs ($fp$header $req);
                while (!
    feof($fp))
                {
                    
    $res fgets ($fp1024);
                    if (
    strcmp($res"VERIFIED") == 0)
                    {
                        
    fclose ($fp);
                        return 
    TRUE;
                    }
                    else if (
    strcmp ($res"INVALID") == 0)
                    {
                        
    //se la procedura non è legittima invia un email all'amministratore
                        
    $this->sendReport();
                        
    fclose ($fp);
                        return 
    FALSE;
                    }
                }
            }
        }
     
        private function 
    sendReport()
        {
            if(
    SIMULATION)
            {
                
    $add "- SIMULAZIONE -";
            }
            else
            {
                
    $add "";
            }
            
    //messaggio all'amministratore
            
    $subject "$add Problema IPN";
            
    $message "Si è verificato un problema nella seguente transazione:\r\n\r\n";
            
    $message .= "Nome: " $_POST['first_name'] . ' ' $_POST['last_name'] . "\r\n";
            
    $message .= "email: " $_POST['payer_email'] . "\r\n";
            
    $message .= "id transazione: " $_POST['txn_id'] . "\r\n";
            
    $message .= "oggetto: " $_POST['transaction_subject'];
     
            
    mail(ADMIN_MAIL,$subject,$message,"From: " NO_REPLY);
            return;
        }
     
        private function 
    isCompleted()
        {
            if(
    trim($_POST['payment_status']) === "Completed")
            {
                return 
    TRUE;
            }
            return 
    FALSE;
        }
     
        private function 
    isPrimaryPayPalEmail()
        {
     
            if(
    SIMULATION)
            {
                
    $email PRIMARY_SANDBOX_EMAIL;
            }
            else
            {
                
    $email PRIMARY_PAYPAL_EMAIL;
            }
     
            if(
    trim($_POST['receiver_email']) === $email)
            {
                return 
    TRUE;
            }
            return 
    FALSE;
        }
     
        abstract protected function 
    isVerifiedAmmount();
        abstract protected function 
    isNotProcessed();
     
        protected function 
    isReadyTransaction()
        {
            if(
    $this->isVerifiedIPN() AND
               
    $this->isPrimaryPayPalEmail() AND
               
    $this->isNotProcessed() AND
               
    $this->isVerifiedAmmount() AND
               
    $this->isCompleted())
               {
                   return 
    TRUE;
               }
               return 
    FALSE;
        }
    }
    ?>
    YIIListener.php
    Codice PHP:
    <?phprequire_once 'IPNListener.php';
     
    class 
    YIIListener extends IPNListener
    {
        protected 
    $conn;


            protected function 
    isVerifiedAmmount()
            {
                if(
    $_POST['mc_gross'] == AMMOUNT)
                {
                    return 
    TRUE;
                }
                
                return 
    FALSE;
            }
     
            protected function 
    isNotProcessed()
            {
                
    $this->dbConnect();
                
    $sql "SELECT * FROM utenti WHERE idTransazione=’$_POST[txn_id]’";
                
    $res mysqli_query($sql$this->conn);
                if(
    mysqli_num_rows($res))
                {
                    return 
    FALSE;
                }
                return 
    TRUE;
            }
     
            protected function 
    dbConnect()
            {
                
    $this->conn = @mysqli_connect(HOST,DB_USER,DB_PASSWORD) OR die();
                @
    mysqli_select_db(DB_NAME,$this->conn) OR die();
            }
     
            protected function 
    getRandPassword()
            {
                
    $result "";
                for(
    $i 0;$i 10$i++)
                {
                    
    $chr rand(40,126);
                    
    $result .= chr($chr);
                }          
                return 
    $result;
            }
     
            protected function 
    sendLoginData($password)
            {
                if(
    SIMULATION)
                {
                    
    $to ADMIN_MAIL;
                    
    $add "- SIMULAZIONE -";
                }
                else
                {
                    
    $to $_POST['payer_email'];
                    
    $add "";
                }
     
                
    $subject "$add Attivazione account su Your Inspiration Images";
                
    $from NO_REPLY;
                
    $message "Ciao $_POST[first_name] e benvenuto su YII\r\n";
                
    $message .= "Ecco i tuoi dati di autenticazione:\r\n\r\n";
                
    $message .= "Nome utente: $_POST[payer_email] \r\n";
                
    $message .= "Password: $password \r\n\r\n";
                
    $message .= "Your Inspiration Images Team";
                 
                
    mail($to,$subject,$message,"From: noreply<$from>");
            }
     
            public function 
    insertNewUser()
            {
                if(
    $this->isReadyTransaction())
                {
                    
    $password $this->getRandPassword();
                    
    $md5password md5($password);
     
                    
    $sql "INSERT INTO utenti
                    (nome,cognome,email,username,password,idTransazione)
                    VALUES ('
    $_POST[first_name]','$_POST[last_name]','$_POST[payer_email]','$_POST[payer_email]','$md5password','$_POST[txn_id]')";
     
                    
    mysqli_query($sql,$this->conn);
                    
    $this->sendLoginData($password);
                }
            }
    }
    $ipn = new YIIListener();
    $ipn->insertNewUser();
    ?>
    Quest'ultimo file l'ho inserito in Paypal per ricevere le notifiche.

    Grazie mille in anticipo anche a chi almeno si preoccupa :P
    Ultima modifica di Eduadie; 12-12-2016 a 03:04

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.