Salve a tutti, sto testando i pagamenti con paypal, l'invio del form funziona così come il ritorno al sito mentre non riesco ad ottenere un risultato con il notify url.
Ho seguito la guida su html.it: http://www.html.it/articoli/php-e-paypal-ipn-1/
Ho provato a inviare email con php mailer o semplicemente a riportare i dati su DB come proposto dal codice di esempio. Non funziona in nessuno dei casi.
C'è qualcosa che va aggiornato rispetto al codice proposto? Per la cronaca uso PHP 7.
Vi posto il codice che sto usando.
Grazie mille
Codice PHP:
<?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-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
// apre una connessione al socket PayPal
$fp = fsockopen ('ssl://www.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);
// 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) {
// connessione a MySQL tramite istanza
$mysqli = new mysqli("****", "****", "****", "****");
$count = $mysqli->query("SELECT id 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) VALUES ('$txn_id')");
}
// 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);
}
?>