Autore Topic: [RISOLTO] Problema con pagamento PayPal di Virtuemat  (Letto 356 volte)

Offline davide73

  • Esploratore
  • **
  • Post: 111
    • Mostra profilo

Ciao,


Ho il seguente problema con Virtumart:


Joomla 3.8.3
Virtuemart 3.2.10
Template VinaPisces di Envato Market
Poi c'è un componente per le gallerie di immagini SIG Pro (non credo influisca)
Un Plugin per quei diamine di Cookies (anche lui che centra?)
Ed un Plugin scritto per VM per il Delivery Date, che però ho disabilitato e facendo una prova non sembra influire...


Dopo un aggiornamento del Core di Joomla e di VM e l'inserimento del certificato SSL, al momento del pagamento ricevo due email dal sito con Oggetto: "Errore di pagamento PayPal del tuo negozio..."
che fanno riferimento al seguente file: paypal.2.log.php


Dove c'è il seguente avviso (più di uno visto le varie prove effettuate:
These are the valid IP Addresses: 66.211.169.17,173.0.84.40,173.0.84.8,173.0.88.8,173.0.88.40,173.0.81.33,173.0.81.1The Order ID received was: U5X40191
2017-12-19 12:15:12 ERROR checkPaypalIps: Error with REMOTE IP ADDRESS = .
                        The remote address of the script posting to this notify script does not match a valid PayPal IP address


Ora, il pagamento poi avviene comunque, infatti PayPal lo registra e mi manda una bella email di conferma!


Ma Virtuemart mi registra l'ordine come pendente e quindi non genera ne la mail ne tanto meno la fattura che di solito è allegata alla mail in se.


Ora ho effettuato molte prove, ho provato con PHP 7 e con PHP 5.6 (che poi ho lasciato), ho provato a disabilitare il certificato SSL, a cambiare il template, a ricaricare i file di VM, a installare nuovamente il componente AIO (che aggiorna i moduli di VM), disabilitato anche il plugin del Delivery Date...


Me so letto varie discussioni, ma il problema e che sono tutti vecchi quindi su versioni antecedenti la mia...


A voi di questa magnifica comunità, che vi viene in mente di consigliarmi di fare? Provare? Verificare? etc.


Grazie mille per chi vorrà aiutarmi in questa diabolica giornata!


CIAO!
« Ultima modifica: 06 Gen 2018, 13:43:13 da davide73 »

Offline danielecr

  • Appassionato
  • ***
  • Post: 634
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #1 il: 19 Dic 2017, 17:43:54 »
Ciao,
il Error with REMOTE IP ADDRESS = .
è veramente vuoto o no? se non è vuoto, qual è l'ip?

Sei mica sotto proxy? Cloudflare?

Offline davide73

  • Esploratore
  • **
  • Post: 111
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #2 il: 19 Dic 2017, 17:56:01 »
Ciao e grazie intanto:


non uso proxy Cloudflare (neanche lo conosco), e REMOTE IP ADDRESS = . è sempre vuoto!! in tutte le righe ...


Offline danielecr

  • Appassionato
  • ***
  • Post: 634
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #3 il: 19 Dic 2017, 18:24:18 »
Chiederei delucidazioni all'hosting, chiedendo come mai $_SERVER['REMOTE_ADDR']; restituisce un valore vuoto, almeno così sembra.
« Ultima modifica: 19 Dic 2017, 18:35:45 da danielecr »

Offline davide73

  • Esploratore
  • **
  • Post: 111
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #4 il: 19 Dic 2017, 18:46:19 »
Allora da quel che mi dici, prima di scrivergli, ho fatto un file php con questa chiamata:
echo $_SERVER['REMOTE_ADDR'];


e il risultato è: 127.0.0.2
è normale o devo chiedere? perché a me sembra che il dato venga restituito...

Offline davide73

  • Esploratore
  • **
  • Post: 111
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #5 il: 19 Dic 2017, 18:49:19 »
Comunque ho scritto anche a loro.... vediamo :)

Offline danielecr

  • Appassionato
  • ***
  • Post: 634
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #6 il: 19 Dic 2017, 19:00:20 »
È strano allora che lo script paypal di virtuemart restituisca un valore vuoto..
Ad ogni modo sei sotto reverse proxy se restituisce un ip locale!
Quindi dovresti aggiungere quell'ip alla white list.
Prova a dare uno sguardo alla configurazione di virtuemart per il reverse proxy.
O al limite dovrai modificare il file paypal.php
« Ultima modifica: 19 Dic 2017, 19:05:52 da danielecr »

Offline davide73

  • Esploratore
  • **
  • Post: 111
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #7 il: 21 Dic 2017, 17:56:16 »
questa la risposta del provider, ma sinceramente non so bene che fare...



Gentile Davide,
vede un valore vuoto, perché il nostro hosting funziona in modo particolare per gestire in modo efficiente il servizio HTTPS.


Deve controllare la variabile $_SERVER['X-Forwarded-For'];


ora secondo voi che devo fa? (prima di cambiare hosting)


Grazie mille.

Offline danielecr

  • Appassionato
  • ***
  • Post: 634
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #8 il: 21 Dic 2017, 20:05:07 »
Il problema é che già lo script chiede l'ip con quella richiesta, almeno mi sembra (vedi file paypal.php), ma il valore restituito é vuoto.
X-Forwarded-For conferma il reverse proxy.

Offline danielecr

  • Appassionato
  • ***
  • Post: 634
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #9 il: 22 Dic 2017, 17:34:39 »
Quando ho risposto ero un po' di fretta, completo la risposta.

Premetto che non uso virtuemart, ho solo scaricato lo zip dal sito.

Nel file paypal.php che si trova nella cartella com_virtuemart.3.2.10.9700_extract_firs t/com_virtuemart.3.2.10.9700_ext_aio/admin/plugins/vmpayment/paypal/paypal/helpers/
trovi la funzione che verifica gli ip di paypal, se non è un ip valido restituisce l'errore che hai scritto:

Codice: [Seleziona]
    protected function checkPaypalIps ($paypal_data) {
        /*
                $test_ipn = (array_key_exists('test_ipn', $paypal_data)) ? $paypal_data['test_ipn'] : 0;
                if ($test_ipn == 1) {
                    return true;
                }
        */
        /*
         * adding an extra parameter because getting IP trough gethostbynamel is not a unfortunatly reliable method
         */
        if (isset($this->_method->check_ips) and $this->_method->check_ips==0) {
            return true;
        }
        $order_number = $paypal_data['invoice'];

        // Get the list of IP addresses for www.paypal.com and notify.paypal.com


        if ($this->_method->sandbox) {
//            $paypal_iplist = gethostbynamel('ipn.sandbox.paypal.com');
//            $paypal_iplist = (array)$paypal_iplist;
//           QUORVIA 2017April24
            $paypal_sandbox_iplist_ipn       = gethostbynamel('ipn.sandbox.paypal.com');
            $paypal_sandbox_iplist_ipnpb      = gethostbynamel('ipnpb.sandbox.paypal.com');

            $paypal_iplist = array_merge(
                $paypal_sandbox_iplist_ipn,
                $paypal_sandbox_iplist_ipnpb
            ); // end quorvia

        } else {
            // JH 2017-04-23
//              QUORVIA 2017April24
            // Get IP through DNS call
            // Reporting and order management
            $paypal_iplist_ipnpb       = gethostbynamel('ipnpb.paypal.com');
            $paypal_iplist_notify      = gethostbynamel('notify.paypal.com');

            $paypal_iplist = array_merge( // JH 2017-04-23
            // List of Reporting and order management
                $paypal_iplist_ipnpb,
                $paypal_iplist_notify
            );
            // JH
            $this->debugLog($paypal_iplist, 'checkPaypalIps PRODUCTION', 'debug', false);

        }
        $remoteIPAddress=$this->getRemoteIPAddress();
        $this->debugLog($remoteIPAddress, 'checkPaypalIps REMOTE ADDRESS', 'debug', false);

        //  test if the remote IP connected here is a valid IP address
        if (!in_array($remoteIPAddress, $paypal_iplist)) {

            $text = "Error with REMOTE IP ADDRESS = " . $remoteIPAddress . ".
                        The remote address of the script posting to this notify script does not match a valid PayPal IP address\n
            These are the valid IP Addresses: " . implode(",", $paypal_iplist) . "The Order ID received was: " . $order_number;
            $this->debugLog($text, 'checkPaypalIps', 'error', false);
            return false;
        }

        return true;
    }

Nello stesso file trovi la funzione getRemoteIPAddress:

Codice: [Seleziona]
    function getRemoteIPAddress() {
        if (!class_exists('ShopFunctions'))
            require(VMPATH_ADMIN . DS . 'helpers' . DS . 'shopfunctions.php');
        return ShopFunctions::getClientIP();
    }

Quindi nel file shopfunctions.php nella cartella com_virtuemart.3.2.10.9700_extract_firs t/com_virtuemart.3.2.10.9700/administrator/components/com_virtuemart/helpers/
troverai:

Codice: [Seleziona]
    static function getClientIP() {
        $ip_keys = array('X_FORWARDED_FOR', 'X-Forwarded-Proto','REMOTE_ADDR');
        $extra = VmConfig::get('revproxvar','');
        if(!empty($extra)){
            $extra = explode(',',$extra);
            $ip_keys = array_merge($extra, $ip_keys);
        }
        foreach ($ip_keys as $key) {
            if (array_key_exists($key, $_SERVER) === true) {
                foreach (explode(',', $_SERVER[$key]) as $ip) {
                    // trim for safety measures
                    $ip = trim($ip);
                    vmdebug('getClientIP',$ip);
                    // attempt to validate IP
                    if (self::validateIp($ip)) {
                        return $ip;
                    }
                }
            }
        }

        return false;
    }

Come vedi lo script prova X_FORWARDED_FOR, X-Forwarded-Proto e REMOTE_ADDR (almeno credo....)

Offline davide73

  • Esploratore
  • **
  • Post: 111
    • Mostra profilo
Re:Problema con pagamento PayPal di Virtuemat
« Risposta #10 il: 27 Dic 2017, 13:55:51 »
Intanto, veramente grazie Daniele, e auguri a tutti !!!


mentre sta cosa ci sto ancora studiando su ...


con questo comando effettivamente ho una risposta di indirizzo IP valido... echo $_SERVER["HTTP_X_FORWARDED_FOR"];


ora verifico, controllo, smanazzo e risolverò, spero!


Ciao a tutti e auguri, e se qualcuno ha dritte ulteriori, che le mandi, grazie!

Offline davide73

  • Esploratore
  • **
  • Post: 111
    • Mostra profilo
Re: Problema con pagamento PayPal di Virtuemat
« Risposta #11 il: 06 Gen 2018, 13:42:17 »
Ciao a tutti,


volevo soltanto segnalare che la varsione di Virtuemart 3.2.12 risolve la problematica.


Saluti e buona Befana!!!
Davide

 

Torna su