Ipn paypal不起作用,不通过验证

时间:2016-07-17 16:21:47

标签: php paypal paypal-ipn

我问你的帮助,因为我无法解决支付宝IPN的问题。我创建了一个包含以下代码的按钮:

    <form method="post" name="paypal_form" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
<input type="hidden" name="business" value="xxx@xxx.com" />
<input type="hidden" name="cmd" value="_xclick" />

<!-- informazioni sulla transazione -->
<input type="hidden" name="notify_url" value="http://vps35355.ovh.net/lifedesktop/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 pagamento -->
<input type="hidden" name="shipping" value="7.00" />
<input type="hidden" name="cs" value="1" />

<!-- informazioni sul prodotto -->
<input type="hidden" name="item_name" value="Guida PayPal IPN con PHP" />
<input type="hidden" name="amount" value="100.00" />

<!-- questo campo conterrà le info che torneranno al sito e viene usato per passare l'id utente o altre info -->
<input type="hidden" name="custom" value="ABR24" />

<!-- informazioni sull'acquirente -->
<input type="text" name="first_name" />
<input type="text" name="last_name" />
<input type="text" name="address1" />
<input type="text" name="city" />
<input type="text" name="state" />
<input type="text" name="zip" />
<input type="text" name="email" />

<!-- pulsante pagamento -->
<input type="image" src="http://www.paypal.com/it_IT/i/btn/x-click-but01.gif" border="0" name="submit" alt="Paga subito con PayPal" />
</form>

然后我有一个通知页面,其中我的IPN代码如下:

<?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);
$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 == "xxxxxx"){

              mysql_connect("xxxx","xxxxx","xxxxx") or die ("Errore");
              mysql_select_db("xxxx") or die ("Impossibile selezionare il database");
              $query = "INSERT INTO utentipaypal (nome,cognome,email,username,password,idtransazione)
                    VALUES ('prova','prova','prova@prova.it', 'prova','prova','1')";
                    $result = mysql_query($query);
                    if (!$result) {
                      die("Errore nella query $query: " . mysql_error());
                    }

            }

        }

        // 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);
}

?>

循环成功运行,如果我将代码放在循环中并且如果代码有效则将其放在过滤器之外,但如果我将代码置于其中,如果这不运行。实质上,不检查条件“=='已验证'”。有人能帮我吗?你也可以告诉我哪里错了所以我不会重复这个错误?

0 个答案:

没有答案