Paypal Sandbox IPN - 未获得VERIFIED响应

时间:2014-12-12 21:55:54

标签: php paypal paypal-ipn paypal-sandbox

我讨厌提出一个似乎曾多次被问过的问题但是从阅读很多帖子中我似乎无法弄清楚为什么我没有得到"验证"从paypal沙箱回来的消息,我现在已经好几个小时了,现在还没有进一步。

我通过电子邮件将验证电话的结果通过电子邮件发送给PayPal,下面是它的说法,但没有"已验证",我正在使用IPN模拟器进行测试https://developer.paypal.com/webapps/developer/applications/ipn_simulator

发现HTTP / 1.0 302 地点:https://www.sandbox.paypal.com 服务器:BigIP 连接:保持活力 内容长度:0

<?php
    include("connect.php");

    // Send an empty HTTP 200 OK response to acknowledge receipt of the notification
    header('HTTP/1.1 200 OK');

    // Assign payment notification values 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'];
    $payer_email      = $_POST['payer_email'];

    // Build the required acknowledgement message out of the notification just received
    $req = 'cmd=_notify-validate';               // Add 'cmd=_notify-validate' to beginning of the acknowledgement

    $msg = "";
    foreach ($_POST as $key => $value) {         // Loop through the notification NV pairs
        $value = urlencode(stripslashes($value));  // Encode these values
        $req  .= "&$key=$value";                   // Add the NV pairs to the acknowledgement
    }

    $req = "";

    // Set up the acknowledgement request headers
    $header  = "POST /cgi-bin/webscr HTTP/1.1\r\n";                    // HTTP POST request
    $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";

    // Open a socket for the acknowledgement request
    $fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);

    // Send the HTTP POST request back to PayPal for validation
    fputs($fp, $header . $req);

    $result = "";
    while (!feof($fp))
    {                     // While not EOF
        $res=fgets($fp, 1024);               // Get the acknowledgement response
        $result .= $res;

        if (strcmp ($res, "VERIFIED") == 0){  // Response contains VERIFIED - process notification
            //db code here
        }
    }

    $to = 'test@email.com';
    $subject = 'Result';
    $m = $result;
    $headers = 'From: admin@email.com'."\r\n".
    'Reply-To: admin@email.com'."\r\n".
    'X-Mailer: PHP/'.phpversion();

    mail($to, $subject, $m, $headers);

    fclose($fp);  // Close the file
?>

3 个答案:

答案 0 :(得分:0)

您需要使用安全连接:

$fp = fsockopen ('https://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

答案 1 :(得分:0)

除了Matthew的回复之外,我还需要添加一行来将HTTP主机声明为详细here

$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Host: www.sandbox.paypal.com\r\n";

此外,我无法让https://协议在我的服务器上运行,但将其切换为ssl://为我工作,推理详细here

$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);

答案 2 :(得分:-1)

我花了几个小时解决这个问题,但以上都不是(和网络上的其他地方一样),但是我的代码在其他地方有错误。这是代码的混合,即使它们出现在Paypal之后,我也没有更新sql连接。基本上,一旦我修复了代码,它便开始工作。该代码之所以“不错”,是因为它在其他地方也可以使用,但是某些特定的部分却没有,SQL连接和表等我还不太记得是什么。但我建议遇到此问题的人员删除所有其他代码,直到他们可以检查Paypal IPN的工作为止。就我而言,我一头雾水。我连接到数据库并发送phpmailer电子邮件,因此,这是一个相当长的脚本,其中某些内容在新环境中不起作用。我猜想这使脚本失败了,即使通过直接URL可以正常运行也可以看到它。