Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    37

    php - paypal: esito transazione

    ciao a tutti

    ho bisogno di un aiuto per una cosa che devo sviluppare a lavoro .
    Avrei bisogno di sapere come si fa a ricevere l'esito di una transazione su paypal che viene effettuata dal visitatore sul sito che sto sviluppando. Il form con l'invio dei dati dal sito a paypal funziona egregiamente, però vorrei che dopo che ho completato il pagamento su paypal posso tornare al mio sito e fare le operazioni per cui ho pagato se e solo se il pagamento ha avuto esito positivo.

    Ho visto che nel form di invio dei dati ci sono molte possibili variabili, ma non so dove metterci le mani....

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    37
    FORM PAYPAL
    codice:
    <form target="paypal" action="https://www.paypal.com/cgi-bin/webscr" method="post" id="paypal_orig">    
    <input type="hidden" name="cmd" value="_xclick">     
    <input type="hidden" name="business" value="mail@mail.it">   
         
    <input type='hidden' name='return' value="final.php?id=<?=$id?>">    
     <input type="hidden" name="currency_code" value="EUR" />    
     <input type="hidden" name="add" value="1">    
     <input type="hidden" name="custom" id="custom" value="<?=$id?>">     
    <input type="hidden" name="item_name" value="SMS2ALL">  
    <input type="hidden" name="item_number" value="1">     
    <?php     	
    if($spesa<0.99){          		
        $spesa=0.99;        
     }     	
    echo"<input type='hidden' name='amount' value='".$spesa."' id='amount'>";    
     ?>    
     <input type="submit" id="rinnova" value="PAGA" id="paga">          
    </form>
    Sul sito di paypal va e riesco anche a tornare correttamente alla pagina final.php, il problema però è che il file php che uso come listener e dovrebbe occuparsi della riuscita del pagamento non va mai in esecuzione (da quel poco che ne capisco).

    LISTENER IPN

    codice:
    <?
    $req = 'cmd=_notify-validate';
    
    foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    $req .= "&$key=$value";
    
    if($key=='custom'){
    $sess_id=$value;
    }
    
    }
    
    
    // post back to PayPal system to validate
    $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 ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
    
    // assign posted variables to local variables
    $item_name = $_POST['item_name'];
    $item_number = $_POST['item_number'];
    $payment_status = $_POST['payment_status'];
    $payment_amount = $_POST['mc_gross'];
    $payment_currency = $_POST['mc_currency'];
    $txn_id = $_POST['txn_id'];
    $receiver_email = $_POST['receiver_email'];
    $payer_email = $_POST['payer_email'];
    
    if (!$fp) {
    // HTTP ERROR
    } else {
    fputs ($fp, $header . $req);
    while (!feof($fp)) {
    $res = fgets ($fp, 1024);
    if (strcmp ($res, "VERIFIED") == 0) {
    
    $to      = 'support@bitage.com';
    $subject = 'paypal';
    $message = 'id che ha pagato: '.$sess_id;
    $headers = 'From: test' . "\r\n" .
        'Reply-To: test' . "\r\n" .
        'X-Mailer: PHP/' . phpversion();
    
    mail($to, $subject, $message, $headers);
      
    
    session_destroy();
    }
    else if (strcmp ($res, "INVALID") == 0) {
    // log for manual investigation
    }
    }
    fclose ($fp);
    }
    
    $conn=mysql_connect('localhost', 'root', 'root');
    if(!$conn){
    }
    else{
    	$db=mysql_select_db('sms2all');
    	if(!$db){
    	}
    	else{
    		$sql="select testo, mittente, destinatario from invio_messaggi where idsessione=".$_POST['custom'];
    		if(!mysql_query($sql)){
    		}
    		else{
    			$res=mysql_query($sql);
    			$url="api2.infobip.com";
    			$page="/api/sendsms/plain";
    			while($riga=mysql_fetch_array($res)){
    				$sql2="insert into pagamento(idsessione, stato_pagamento, data) values ('".$_POST['custom']."', 1, NOW())";
    				if(!mysql_query($sql2)){
    				}
    				else{	
    					$sql3="update invio_messaggi set inviato=1 where destinatario='".$riga['destinatario']."'
    						and idsessione='".$_POST['custom']."'";
    					if(!mysql_query($sql3)){
    					}
    					else{
    					}
    				}
    			}
    		}
    	}
    }
    ?>
    qui ho leggermente variato i nomi delle pagine, però tenete conto che il giro lo fa giusto, semplicemente non fa le 2 query

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    tra i parametri puoi passare l'indirizzo dello script da richiamare alla conferma del pagamento... per fare le verifiche del caso (dato che viene richiamato in maniera asincrona ed in background) devi loggare qualche info da qualche parte (p.es. facendo un dump delle variabili passate). Cmq stai usando la sandbox di PP? Devi testare così il sistema...

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    37
    ho controllato e a quanto pare le mail le invia, quindi sembra che almeno quel pezzo di codice lo esegue anche senza specificare il notify_url tra i parametri del form .... non parlarmi della sandbox che oggi non mi faceva più creare gli account di prova non sapevo come diavolo fare... giusto per capirci, i sorgenti almeno possono essere giusti a livello logico o no?

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    ma "le mai invia" cosa intendi? se viene eseguito un pezzo di codice e un altro no probabilmente c'è un errore nelle condizioni... hai verificato?

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    37
    "le invia" nel senso che sulla mail che ho specificato sono arrivate varie mail di notifica, quindi il pagamento viene effettuato e la pagina listener ipn va veramente in esecuzione.
    Vi terrò aggiornati su come si evolverà sta situazione oggi

  7. #7
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    37
    nuova domanda, quando schiaccio il pulsante del pagamento voglio che prima vengano fatte delle insert in una tabella solo dopo deve essere eseguito il form di paypal.

    Stavo pensando ad una cosa del tipo

    <input type='submit' value='paga adesso' id='button'>

    lo schiaccio e mando in esecuzione jquery

    $(document).ready(function(){
    $('#button').click(function(){
    <?php
    /*qui eseguire la query php*/
    /*submit del form paypal*/
    ?>
    });
    });


    Dite è corretto fare così?

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    non sono sicuro se hai inteso bene il processo di paypal (magari sì: scusa il dubbio nel caso):

    - il tuo script "paga.php" richiama paypal
    - paypal elabora la richiesta e torna a una pagina di appoggio da te specifica, p.es. "grazie.php"
    - nel frattempo IN MANIERA ASINCRONA elabora il pagamento e in particolare in caso di completamento a buon fine richiama in background un altro tuo script, p.es. "pagato.php"

    Stai seguendo questo schema? Dagli esempi che posti mi è venuto il dubbio... scusa

  9. #9
    Utente di HTML.it
    Registrato dal
    Oct 2008
    Messaggi
    37
    tutta quella parte l'ho risolta fortunatamente, ora sono nuovamente bloccato su una cosa di jquery/php.

    io voglio fare che quando clicchi sul tasto per pagare prima viene letto un file inviato dall'utente sul server, devo fare delle query e solo al termine devono procedere con il pagamento.

    il problema è che se provo a concatenare variabili php dentro jquery non va niente come vorrei

    echo"<script>";
    echo"$(document).ready(function(){";
    echo"$('#rinnova').click(function(){";
    $conn=mysql_connect('localhost', 'root', 'root');
    if(!$conn){
    echo"alert('no');";
    }
    else{
    $c="ciao";
    echo"alert('".$c."')";
    }
    echo"});";
    echo"});";
    echo"</script>";

    una cosa così ad esempio non va
    se faccio così invece va tutto bene

    echo"<script>";
    echo"$(document).ready(function(){";
    echo"$('#rinnova').click(function(){";
    $conn=mysql_connect('localhost', 'root', 'root');
    if(!$conn){
    echo"alert('no');";
    }
    else{
    echo"
    var c='ok';
    alert(c)";
    }
    echo"});";
    echo"});";
    echo"</script>";

  10. #10
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    mmmh.. non sono sicuro ma dal modo in cui è scritto lo script mi sembra quasi che ritieni l'esecuzione del php e dello javascript immerso contestuale... è così? Perchè non sarebbe corretto, in questo caso...

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.