php - PayPal IPN 使用 PHP 生成 HTTP 302 错误

标签 php paypal paypal-ipn

我有一个运行的 IPN 脚本,并且已经运行了一段时间。最近我开始收到 HTTP/1.1 302 Temporarily Moved 作为响应,但无法确定原因。

以下是与发布到PayPal并获得响应相关的代码:

$sd = @fsockopen('ssl://www.paypal.com', 443, $errno, $errstr, 30);
if(!$sd) {
    $error = 'Error opening socket connection to PayPal: '.$errstr;
    quit($error, $errno);
}

$req = 'cmd=_notify-validate';
foreach($_POST as $key=>$value) $req .= "&{$key}=".urlencode(stripslashes($value));

// post back to PayPal to validate
$header  = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".strlen($req)."\r\n";
$header .= "Host: http://www.paypal.com/\r\n";
$header .= "Connection: close\r\n\r\n";

fputs($sd, $header.$req);
$response = '';
while(!feof($sd)) $response .= fgets($sd, 4096);
fclose($sd);

请注意,所有的连接、传输和响应都有效,我没有收到错误信息。但是 PayPal 的响应是不正确的,因为它没有提供 VERIFIED 或 INVALID,如其文档中所述,而是 HTTP 302 错误。

最佳答案

我以这种方式构建我的请求(并且有效)。或许能帮到你

$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
    $value = urlencode(stripslashes($value));
    //Fixes some special characters Paypal sends
    $value = preg_replace('/(.*[^%^0^D])(%0A)(.*)/i','${1}%0D%0A${3}', $value);
    $req .= '&' . $key . '=' . $value;
}

关于php - PayPal IPN 使用 PHP 生成 HTTP 302 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19438962/

相关文章:

php - 如何打印将在 laravel 5.1 中执行的更新查询

java - Paypal SetExpressCheckout Soap

PayPal 订阅修改错误 UNPROCESSABLE_ENTITY

paypal - 如何在 Checkout.com 的测试环境中测试标记的交易响应

php - 上个月Paypal的IPN有没有变化?

php - Paypal 成功页面不返回任何试用期订阅数据

PayPal 并行支付 IPN

php - 无法使用 Yii 框架连接数据库

javascript - 如何在点击字形图标时显示通知右上角几秒钟?

javascript - 如何让我的 div 以水平方式显示?