Paypal IPN 未调用问题

Posted

技术标签:

【中文标题】Paypal IPN 未调用问题【英文标题】:Paypal IPN not calling Issue 【发布时间】:2014-07-15 23:32:32 【问题描述】:

我遇到了一些关于 Paypal IPN 没有在我的一台服务器上被解雇的问题。下面是场景。

1) 我有两个站点,站点 A(旧)在服务器 X 上,站点 B(新)在服务器 Y 上。这两个站点都具有相同的 Paypal 快速结帐表单提交和 IPN 代码。 2) 站点 A 运行顺利,提交了 paypal 快速结帐表单,并且 IPN 被正确触发。 3) 但是对于站点 B,虽然我们的表单被正确提交并且支付成功,但 IPN 并没有被解雇。

更多信息: 我检查了 Paypal 的业务 A/c 是否有任何可能需要添加 IPN 所在的 IP/域的功能。

我还与 Paypal 支持人员核实过,他们说从 2014 年 3 月 25 日起,他们已告知将 Paypal 的 API 相关 IP 地址添加到我们的服务器防火墙中。我们已经添加了这些 IP 地址,但仍然无法正常工作。

  URL : https://ppmts.custhelp.com/app/answers/detail/a_id/14/related/1/session/L2F2LzEvdGltZS8xNDAxMTcyODkwL3NpZC9VbENEUWhWbA%3D%3D

希望以下信息对您来说足够了。请建议我们中的任何人是否有一些解决方案需要克服。

提前致谢。

【问题讨论】:

【参考方案1】:

很遗憾,我没有太多特定问题的信息可供我使用,所以让我们将其作为 IPN 故障排除指南供将来参考:)

检查给定帐户的 IPN 功能状态 -

https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-ipn-notify(先登录您的帐户,然后点击链接进入 IPN 设置)

替代方案:

登录 PayPal.com 打开个人资料 --> 我的销售偏好 找到“即时付款通知”选项

IPN 可以处于四种状态:

已启用 --> 如果系统提示您选择设置,IPN 是 如果在 结帐请求。

使用默认 URL 设置启用 --> 如果显示“通知 URL”并且“消息传递”设置为启用,则每次您未在结帐请求(例如,eBay 交易将发送到默认 URL,因为 eBay 的快速结帐集成未传递通知 URL)

已禁用 --> 您从未设置默认 URL,但在您的事务中传递的 IPN URL 已引发太多错误。您应该会看到空的地址字段和“不接收 IPN 消息(已禁用)”选项被选中。

使用默认 URL 集禁用 --> 在某个时间点配置了默认 IPN URL,但由于默认 URL 或动态 URL 失败,IPN 功能已被禁用。您将看到 URL 和“Message Delivery = Disabled”

为什么 PayPal 会禁用 IPN 递送?

PayPal 期望您的服务器以 HTTP-200 OK 消息进行响应。如果我们收到不同的响应代码,则会启动重试机制。 IPN 消息总共发送 16 次,每次尝试之间的时间帧都会增加。如果一个 URL 的错误达到某个阈值,IPN 会自动禁用。您将收到一封电子邮件到 PayPal 帐户上列出的主要电子邮件地址,警告您即将停用

    如果启用了 IPN,请检查 https://www.paypal.com/cgi-bin/webscr?cmd=%5fdisplay%2dipns%2dhistory&nav=0%2e3%2e4 下最后一条 IPN 消息的状态

    它会显示您的服务器发回的最后一个 HTTP 响应代码,您可以过滤失败/重试消息。

    检查http://en.wikipedia.org/wiki/List_of_HTTP_status_codes 以了解状态的含义。

    如果没有 HTTP 响应代码,则存在较低级别的连接问题。 最常见的原因是:

    防火墙 SSL 连接问题(尝试使用 HTTP) 黑洞路由

    如果你觉得一切配置正确,请查看https://ppmts.custhelp.com/app/answers/detail/a_id/733

    如果 IPN 消息被标记为“已发送”(已收到 HTTP 200),则 IPN 处理的下一步是将数据发回 PayPal 进行验证。您可以在脚本中启用日志记录(将 HTTP 请求和响应转储到服务器上的文件中) - 或者您可以联系 PayPal MTS (https://www.paypal.com/mts) 并询问 PayPal 端可见的内容。

    检查与贝宝的连接性的一个很好的测试是在网络服务器本身上运行以下命令:

    curl -d "cmd=_notify-validate" -v https://www.paypal.com/cgi-bin/webscr

    如果您看到 POST 已到达 PayPal,但 PayPal 对所有消息都以 INVALID 响应:

    检查您的代码,https://github.com/paypal/ipn-code-samples 是一个很好的示例来源

    如果 PayPal 以 INVALID 响应某些消息,您可能会遇到编码问题。您最好在 https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-language-encoding 下设置字符编码设置 - 将它们设置为 UTF8 以获得最佳效果。

    如果 PayPal 以 VERIFIED 响应,但您的脚本在验证付款后没有继续处理,请确保您运行 TRIM()(或所用语言中的等效项)来删除空格、换行符和CRLF

    之后会发生什么取决于 IPN 脚本,您在连接到数据库、解析 IPN 消息中的某些数据或某些编码错误时可能会遇到错误。

简而言之:如果 IPN 消息已被接收、发回并经过验证,那么其他一切都发生在您自己的服务器上的代码中,您必须开始挖掘日志文件(或确保日志正在创建,这总是一个好主意)找出发生了什么。如果问题是可重现的,最好检查其中一个示例脚本(包括日志记录)发生了什么

希望这有助于正面解决 IPN 问题 - 有关 IPN 的任何问题?如果您想调查 paypal 方面发生的事情,请联系 paypal.com/mts。

【讨论】:

我在我们公司的网站上遇到了同样的问题。我们的 IPN 实施至少 18 个月没有改变,上周我们出现了 11 个错误。这是一个间歇性问题(无法复制),我们既没有“验证”也没有“无效”。相反,我们得到的是:处理您的请求时发生错误。参考 #39.86cd417.1401321268.3e750f3 这看起来像是服务器错误,但我不确定。 确实如此 - 更具体地说:Akamai 如果您看到此错误,请检查您的 DNS 设置是否有过时条目/硬编码 如果您遇到此问题并且 DNS 配置正常 - 请直接与我们联系参考 # under paypal.com/mts 解决方法:切换到使用 IPNPB.paypal.com 作为 POST 返回的目标 URL。您可以在此处找到 PayPal IP:ppmts.custhelp.com/app/answers/detail/a_id/92

以上是关于Paypal IPN 未调用问题的主要内容,如果未能解决你的问题,请参考以下文章

Paypal IPN:notify_url 未调用

Paypal:IPN 侦听器未收到 IPN 消息

未收到 Paypal 沙箱 IPN 消息

未使用发票 API 接收 PayPal IPN

Paypal 自适应支付 IPN 回调:如何返回完整未更改的 ipn 消息

Paypal API,未收到 IPN 消息