• User

    Cosa molto strana.....ho tolto i controlli e ho dato la query diretta al rientro dal form di pagamento. Ho provato a lasciare solo txn_id come dato da inserire e riesce a inserirlo. Pero se richiedo di inserire altri dati come payer_mail, amount etc non li inserisce. Ora non riesco a spiegarmi il perchè !!!


  • User

    Inserito anche il prezzo pagato......inizia a tornarmi il buon' umore °____°


  • User

    ok aggiornamento....sono riuscito a far inserire i valori che voglio.....problema sull' inserimento del prezzo. Il mio form non ha un prezzo fisso, infatti il prezzo va in base al numero di parole che un utente inserisce nel form. Quindi varia in questo modo....fino a 20 parole 4,40 € da 21 a 50 6,75 € etc etc. Ho provato a recuperare la variabile "amount" ma non riesce a recuperarla e nel database la stringa "amount" resta vuota. Qualche suggerimento?


  • User

    Se abilito il controllo prima della query......non inserisce nessun valore nel database. Ora mi chiedo .....com'è possibile? Senza controllo la query parte e funziona, con il controllo non funziona niente che @@


  • User

    Per spiegarmi meglio incollo i due pezzi di codice. Cosi funziona tutto senza controllo:

    // verifica l'apertura della connessione al socket
    if (!$fp) {
    {

    $query = "INSERT INTO notifiche ( txn_id, payer_status, payer_email, first_name, last_name, address_street, address_city, address_state, address_zip, amount) VALUES ('$txn_id', '$payer_status', '$payer_email', '$first_name', '$last_name', '$address_street', '$address_city', '$address_state', '$address_zip', '$mc_gross')";
    if (@mysql_query($query)) {
    }

    Cosi NON funziona niente quando abilito il controllo:

    // verifica l'apertura della connessione al socket
    if (!$fp) {

        // se la connessione non avviene l'esecuzione dello script viene bloccata
        exit();
    
        // in alternativa è per esempio possibile inviare un'email al venditore
    } else {
    
        // elaborazione delle informazioni
        fputs ($fp, $header . $req);
        while (!feof($fp)) {
            $res = fgets ($fp, 1024);
    
            // azioni in caso di risposta positiva da parte di PayPal
            if (strcmp ($res, "VERIFIED") == 0) {           
    
                // controllo sull'email del venditore
                if($receiver_email == "[email protected]"){
                
    
                    // controllo sull'identificatore della transazione
                  if (mysqli_num_rows == 0){
                        // query per l'inserimento dei dati
                        $result = $mysqli->query("INSERT INTO  notifiche (`txn_id`, payer_status, payer_email, first_name, last_name,  address_street, address_city, address_state, address_zip, `amount`) VALUES ('$txn_id', '$payer_status', '$payer_email', '$first_name',  '$last_name', '$address_street', '$address_city', '$address_state',  '$address_zip', '$mc_gross')");
                    }
    
                    // liberazione della memoria dal risultato della query
                    $count->close();
    
                    // chiusura della connessione
                    $mysqli->close();

  • User

    Shad credi comporti qualcosa se non abilito la verifica? Tanto nel database vedo se il pagamento è stato completato o meno....mi inserisce lo stato di pagamento tramite la variabile "payer_status". Pensi possa bastare per essere sicuri del pagamento? Io credo di si visto che è una variabile che proviene da Paypal giusto?. Una domanda....se voglio ricevere una mail di avviso quando un utente ha richiesto il servizio come faccio? Puoi scrivermi un codicino?....se non chiedo troppo ovviamente.....mi basta anche un buon link su cui buttarci gli occhi °___° e studiccchiare un po.


  • Moderatore

    Ciao,
    un controllo lo farei lo stesso. Non dare per scontato che lo script sia chiamato da paypal. Se per qualche motivo si individuasse come chiamare lo script lo si potrebbe fare da un sito diverso passandoti le stesse informazioni che richiedi a paypal.

    Per ricevere la mail di avviso basta usare la funzione mail di PHP nello script che inserisce la conferma di pagamento nel DB.

    Occhio che la configurazione della funzione può cambiare da server a server.

    Una piccola ricerca di partenza su google potrebbe essere questa:
    https://www.google.it/#q=php+invio+mail

    Saluti


  • User

    Ok proverò a sistemare questa cosa del controllo Shad. Grazie del link, ora ci do uno sguardo

    Saluti


  • User

    Shad scusa se rompo ancora e "approffitto" del tuo sapere.
    Non riesco a risolvere il problema. Se tolgo la verifica funziona tutto alla grande.
    Ora mi chiedo, ma la funzione fsockopen può dare problemi su TopHost? Credo di no....ma inizio a dubitare e chiederò delucidazioni al loro staff domani.
    Inizio a deprimermi...per la frustrazione.
    Mi consigli di fare una prova togliendo sandbox ed eseguendo una transazione da 0,01 € in ambiente "reale" paypal, per vedere se la verifica funzionia in ambiente "reale"?
    Per quanto riguarda la funzione mail ho dato uno sguardo a quel link e implementarla nello script non è difficile. Ma se non risolvo questo problema della verifca....tutto il lavoro andra buttato al vento....e mi rodeeeeee. Se qualcun' altro leggesse e ha un' idea....gradirei leggerla almeno non scasso le @@ a Shad :x.
    Buonanotte ai lettori!!!


  • Moderatore

    Non ti preoccupare, nessun fastidio.
    La fsockopen a mio parere può dare problemi. Per verificarlo fai una pagina dove usi solo quella funzione e vedi che succede.

    Sconsiglio invece di fare prove "reali" in quanto la sandbox di paypal è la perfetta riproduzione simulata dell'ambiente di produzione. In altre parole se non ti funziona in sandbox è inutile provare in produzione.


  • User

    Ciao Shad, ho verificato la funzione....e gira tutto. Il problema me lo da questo pezzo di codice che incollo sotto. Se tolgo questo pezzo funziona tutto.
    exit();

        // in alternativa è per esempio possibile inviare un'email al venditore
    } else {
    
        // elaborazione delle informazioni
        fputs ($fp, $header . $req);
        while (!feof($fp)) {
            $res = fgets ($fp, 1024);
    
            // azioni in caso di risposta positiva da parte di PayPal
            if (strcmp ($res, "VERIFIED") == 0) {         
    
                // controllo sull'email del venditore
                if($receiver_email == "[email protected]"){
    

    Quindi partendo da // verifica l'apertura della connessione al socket
    if (!$fp) {
    e inserendo subito la query tutto gira a meraviglia.
    Ma che diamine può essere? Più spremo il cervello e più mi va a fuoco.....sono 15 gg che combatto con questo script!!!
    Ma in tutti i 6723467236473268 forum e pagine web che ho visitato questo pezzo di codice esiste ...sarà meglio chiamare un prete e farmi liberare dal diavolo che sta crescendo in me? :bho::quote:


  • User

    Shad, ma se l' account business su sandbox è Unverified puo darsi che sia questo il problema? Come posso metterlo in VERIFIED su sandbox? Questo e cio che mi dice sull account e risulta Unverified guarda su Status:

    [h=2]Account information Email ID: miamail(chiocciola)mailbusiness.it

    Password:  Change Password
    
    
    
    
    Account type:    Business-Pro  
    
    
     
    Status:   Unverified 
    

    Country: IT


  • Moderatore

    No Gianni, non credo sia quello il problema. Poi non so', magari fai qualche ricerca sul web.

    Scusa il ritardo della risposta ma sono stato un po' impegnato in questi giorni.

    Saluti


  • User Newbie

    Ciao Gianix,ho letto il tuo post dell annoscorso ho problemi con questo file ipn, se hai risolto potresti postare un codice funzionante ? Ame serve solo di inserire i dati in un database,Ti sarei Grato.....


  • User Newbie

    Scusate la grammatica ma srivo dal tel.....ho le dita troppo grosse....accc