Salve, avrei bisogno di un' aiutino se è possibile. Ho preparato il file IPN seguendo la guida che ho trovato sul vostro sito ma non riesco a venirne fuori. Praticamente non riesco a recuperare le variabili della transazione e a inserirle nel database dopo che il cliente ha pagato. Non parte neppure la mail di avviso. Posto il codice in maniera tale che chi è più esperto di me, magari trovi qualche errore. Ahhhhh preciso anche che non ho ben capito se questo fiile vada accompagnato anche da un altro file .class.php per funzionare.Dove ci sono gli **** li ho inseriti perchè non posso mettere i link attivi non essendo premium.
Il mio file ipn-php è questo:
<?php
// intercetta le variabili IPN inviate da PayPal
$req = 'cmd=_notify-validate';
// legge l'intero contenuto dell'array POST
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// intestazione, prepara le variabili PayPal per la validazione
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-w*w-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
// apre una connessione al socket PayPal
$fp = fsockopen ('hts:/ww.sandbox.paypal.com', 443, $errno, $errstr, 30);
// converte le variabili inviate da IPN in variabili locali
$txn_id = filter_var($_POST['txn_id'], FILTER_SANITIZE_STRING);
$payment_status = filter_var($_POST['payment_status'], FILTER_SANITIZE_STRING);
$receiver_email = filter_var($_POST['receiver_email'], FILTER_SANITIZE_EMAIL);
$payer_email = filter_var($_POST['payer_email'], FILTER_SANITIZE_EMAIL);
$first_name = filter_var($_POST['first_name'], FILTER_SANITIZE_STRING);
$last_name = filter_var($_POST['last_name'], FILTER_SANITIZE_STRING);
$address_street = filter_var($_POST['address_street'], FILTER_SANITIZE_STRING);
$address_city = filter_var($_POST['address_city'], FILTER_SANITIZE_STRING);
$address_state = filter_var($_POST['address_state'], FILTER_SANITIZE_STRING);
$address_zip = filter_var($_POST['address_zip'], FILTER_SANITIZE_STRING);
// 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]"){
// connessione a MySQL tramite istanza
$mysqli = new mysqli("mio host", "username", "password", "nome_database");
$count = $mysqli->query("SELECT id_ordini FROM notifiche WHERE txn_id = '$txn_id'");
// controllo sull'identificatore della transazione
if ($mysqli->affected_rows == 0){
// query per l'inserimento dei dati
$result = $mysqli->query("INSERT INTO notifiche (txn_id, payment_status, payer_email, first_name, last_name, address_street, address_city, address_state, address_zip, amount) VALUES ('$txn_id', '$payment_status', '$payer_email', '$first_name', '$last_name', '$address_street', '$address_city', '$address_state', '$address_zip', $amount)");
}
// liberazione della memoria dal risultato della query
$count->close();
// chiusura della connessione
$mysqli->close();
}
}
// azione in caso di risposta negativa da parte di PayPal else
if (strcmp ($res, "INVALID") == 0) {
// è possibile eseguire qualsiasi operazione
// per esempio compilare un log degli errori o inviare una mail al venditore
}
}
// chiusura della sorgente di dati
fclose($fp);
}
?>
Può esservi utile anche la pagina che viene prima di questa? In quella pagina ho il form paypal che vi incollo solo perchè magari sbaglio li qualcosa!!!
<form method="post" name="paypal_form" action="hts:/ww.sandbox.paypal.com/cgi-bin/webscr">
<input type="hidden" name="business" value="[email protected]" />
<input type="hidden" name="cmd" value="_xclick" />
<!-- informazioni sulla transazione -->
<input type="hidden" name="return" value="<?php echo "ht:/".$_SERVER['HTTP_HOST']; ?>/miacartella/conferma_pagamento.php" />
<input type="hidden" name="cancel_return" value="<?php echo "ht*:/".$_SERVER['HTTP_HOST']; ?>/miacartella/cancella.php" />
<input type="hidden" name="notify_url" value="<?php echo "ht*:*/".$_SERVER['HTTP_HOST']; ?>/miacartella/ipn.php" />
<input type="hidden" name="rm" value="2" />
<input type="hidden" name="currency_code" value="EUR" />
<input type="hidden" name="lc" value="IT" />
<input type="hidden" name="cbt" value="Continua" />
<!-- informazioni sul prodotto -->
<input type="hidden" name="item_name" value="Telegramma Online La Nuova Posta Vetralla" />
<input type="hidden" name="amount" value="<?php echo $prezzo ?>" />
<!-- informazioni sulla vendita -->
<input type="hidden" name="custom" value="ABR24" />
<!-- informazioni sull'acquirente -->
<input type="hidden" name="first_name" />
<input type="hidden" name="last_name" />
<input type="hidden" name="address1" />
<input type="hidden" name="city" />
<input type="hidden" name="state" />
<input type="hidden" name="zip" />
<input type="hidden" name="email" />
<!-- pulsante pagamento -->
<input type="image" src="ht:/ww.paypal.com/it_IT/i/btn/x-click-but01.gif" border="0" name="submit" alt="Paga subito con PayPal" />
</form>
Ringrazio anticipatamente chiunque possa delucidarmi....perchè inizio a darci di matto!!! :- ( ((((((