php - PayPal IPN 始终在 codeigniter 中响应无效和空白数组

标签 php codeigniter paypal

我的问题

我在 CodeIgniter 框架中设置了一个 IPN 监听器,但它总是返回无效响应。

到目前为止我尝试过的:

  • 确保我的服务器将请求发送到 www.sandbox.paypal.com 而不是 www.paypal.com。
  • 确保我的响应等于 PayPal 的请求,前缀为 cmd=_notify-validate&
  • 我使用了 PayPal IPN 代码示例

我的代码:

Paypal 购买按钮代码...

<form action="https://www.sandbox.paypal.com/cgi-bin/webscr"     method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="My sandbox facilitator email id">
<input type="hidden" name="item_name" value="My Business">
<input type="hidden" name="item_number" value="10101">
<input type="hidden" name="amount" value="10">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="lc" value="US">
<input type="hidden" name="bn" value="PP-BuyNowBF">
<input type="image" src="" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
<img alt="" border="0"  src="https://www.paypal.com/en_GB/i/scr/pixel.gif" width="1" height="1">
<input type="hidden" name="return" value="<?php echo base_url(); ?>homepage/success">
 <input type="hidden" name="cancel_return" value="<?php echo base_url();homepage/cancel">
<input type="hidden" name="rm" value="2"> 
<input type="hidden" name="notify_url" value="<?php echo base_url(); ?>/homepage/ipn" /> 
</form>

来自此链接的 Paypal IPN 代码示例 https://github.com/paypal/ipn-code-samples/blob/master/paypal_ipn.php#L125

最佳答案

我遇到了类似的问题,我从 paypal 收到无效响应,但这是由于传递值中的某些字符造成的。

确保您传递给 paypal 的值是正确的。我的数据是正确的,但由于 Paypal 不接受的字符而导致问题。

我像下面的代码一样修复了它:

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

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, 'https://www.sandbox.paypal.com/cgi-bin/webscr');
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Host: www.sandbox.paypal.com'));
        $res = curl_exec($ch);
        curl_close($ch);

关于php - PayPal IPN 始终在 codeigniter 中响应无效和空白数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39361965/

相关文章:

java - Paypal "Buy now"按钮-如何知道支付成功

php - 通过 getSingleScalarResult() 和 groupBy() 获取计数查询结果 - 异常

禁用cookie的php setcookie行为

php - 从 php 运行时 SQL IN 不工作

mysql - 如何插入 TABLE1 (field1,field2 'value' ,'myval' ,'currentdate' ) select(field1,field2) from TABLE2

php - Paypal IPN如何获取当前 session

php - cakePHP 和 EasyPHP 无法烘焙

php - 在一个引导轮播中显示多个图像时出错

php - 使用 PHP/Codeigniter 连接到远程数据库(EC2 实例)?

php - Paypal 标准按钮不返回交易变量