Paypal 为什么沙盒贝宝不是';你不给我发IPN吗?

Paypal 为什么沙盒贝宝不是';你不给我发IPN吗?,paypal,Paypal,我的处理程序和paypal几天前进行了沟通,然后发生了一些事情,使得后者不再发送IPN。我尝试通过自己的脚本模拟IPN发送,但没有使用cURL进行验证的回发功能。我的教练工作得很好。我还将一行简单的代码(已经通过cURL测试)放在发回paypal的代码之前,以便检查paypal的响应。这行代码只是将IPN记录到数据库中。它也没有记录下来。应该是吧?因为贝宝发送了两次IPN。我确保在我的商户帐户中打开了IPN,并且链接指向我的处理程序。现在我开始怀疑贝宝没有给我寄任何东西。这是我的处理程序: &l

我的处理程序和paypal几天前进行了沟通,然后发生了一些事情,使得后者不再发送IPN。我尝试通过自己的脚本模拟IPN发送,但没有使用cURL进行验证的回发功能。我的教练工作得很好。我还将一行简单的代码(已经通过cURL测试)放在发回paypal的代码之前,以便检查paypal的响应。这行代码只是将IPN记录到数据库中。它也没有记录下来。应该是吧?因为贝宝发送了两次IPN。我确保在我的商户帐户中打开了IPN,并且链接指向我的处理程序。现在我开始怀疑贝宝没有给我寄任何东西。这是我的处理程序:

<?php

require_once 'classes/Mysql.php';
require_once 'classes/Email.php';

$mysql = new Mysql();
$myemail = new Email();

// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// assign posted variables to local variables
$item_name = $_POST['item_name'];
$payment_status = $_POST['txn_type'];
$payment_amount = $_POST['mc_amount3'];
$payment_currency = $_POST['mc_currency'];
$subscr_id = $_POST['subscr_id'];
$receiver_email = urldecode($_POST['receiver_email']);
$payer_email = $_POST['payer_email'];
$subscr_type = $_POST['option_selection1'];
$username = $_POST['custom'];

//Save a copy of $req to the database. If paypal sends IPN, this should at least grab the first one before validation. 
$memberID = $mysql->get_member_id($username);
$mysql->test_message($req.$payment_amount.$payment_currency, $memberID, $username, $payment_amount, $payment_currency);

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

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {

//This if block does the payment processing. If I place this before the validation/post back occurs, it doesn't work either. But it works when testing using my cURL script--- before the validation.
if($memberID)
{
    if($payment_status=='subscr_signup' && $payment_currency=='USD' && !$mysql->check_if_transactionID_exists($subscr_id)) 
    {
        $mysql->activate_subscription($memberID, $subscr_id, $subscr_type, $payment_amount);
    }

}

}
else if (strcmp ($res, "INVALID") == 0) {
// log for manual investigation
}
}
fclose ($fp);
}

我遇到了类似的问题——如果您从
$res=fgets($fp,1024)行转储var
$res
您将看到
HTTP/1.1 200 OK
,而不是您要查找的
已验证的
/
无效的

请尝试查看此答案以了解更多信息: