5

所以,这对我来说是一个新的。我的 Paypal IPN 已经工作了一段时间,今天开始出现错误。

在使用 PayPal 进行验证的回发期间(添加 cmd=_notify-validate),PayPal 响应者说“不,这不是来自我的”。这个特定条目唯一奇怪的是(我相信)用户指定其地址的方式:

地址街 123 号
#789

其他一切似乎都很正常,IPN 处理程序非常愉快地处理其他通知。

有人见过这样的吗?

4

3 回答 3

4

好的,所以我发现了我的错误,是的,它与地址中的换行符有关。

基本上我是这样做的:

foreach ($post_array as $name => $value) {
  $value = urlencode($value);
  $post_string .= $name . '=' . $value . '&';
}
$post_string .= "cmd=_notify-validate";

当我还需要将 转换/n为 a/r/n时,如下所示:

foreach ($post_array as $name => $value) {
  $value = urlencode(str_replace("\n", "\r\n", $value));
  $post_string .= $name . '=' . $value . '&';
}
$post_string .= "cmd=_notify-validate";

现在贝宝很高兴。

乐叹息。

于 2010-11-22T19:09:27.480 回答
1

2018 年更新,因为在将站点从 CI v2 更新到 CI v3 后,我再次遇到了这个错误……

从 CodeIgniter v3 开始,换行标准化现在默认关闭(以前默认开启)。从 CI v3.1.3 开始,standardize_newlines 被认为是 deprecated,所以如果你还没有放弃它,那么是时候放弃它了。

结果是我的 IPN 脚本第一次必须处理带有换行符的地址时,Paypal 的响应是它是无效的。

花了一段时间才弄清楚,因为我没有意识到换行标准化默认值是不同的。但解决方案是简化连接响应字符串以发送回 Paypal 的代码,只需取出该(str_replace("\n", "\r\n", $value)部分并用 just 替换它$valueurlencode尽管如此)。

所以它回到了它最初应该如何工作的方式,本质上......现在贝宝又高兴了。

于 2018-06-15T23:21:18.460 回答
0

更多信息,因为我自己花了半天时间在这个错误上。

这似乎是我也在使用的 CodeIgniter 框架引入的一个错误,CodeIgniter 正在标准化新行https://github.com/EllisLab/CodeIgniter/blob/2.1.4/system/core/Input.php#L707

这似乎破坏了 IPN 响应,上面的答案是修复它的最佳方法。

$value = urlencode(str_replace("\n", "\r\n", $value));
于 2014-05-01T03:13:27.963 回答