【问题标题】:IPN delivery failed. HTTP error code 405: Method Not AllowedIPN 传送失败。 HTTP 错误代码 405:不允许的方法
【发布时间】:2010-11-12 19:38:40
【问题描述】:

我正在尝试测试我编写的处理 payapal IPN 通知的 servlet(我的 servlet 与此 example 非常相似) - 即使在启用测试帐户中的所有设置之后,我使用的 IPN 通知也是根本没有开火。

然后我发现显然在沙盒中测试 IPN 的唯一方法是通过 IPN 模拟器。我正在尝试使用它,但我得到了:

IPN 传送失败。 HTTP 错误代码 405:方法不允许

有人知道一点线索吗?

此外,我正在寻求任何建议以直接方式测试 IPN 处理程序,因为 IPN 模拟器有点糟糕(您选择的任何选项都会重置所有字段等等)。

任何帮助表示赞赏!

【问题讨论】:

  • 我不知道405错误,但是你可以不使用模拟器测试IPN。在沙盒环境中创建一个测试卖家账户,然后使用您刚刚创建的测试沙盒卖家账户创建一个按钮并设置您的 IPN 通知。
  • 我试过了 - 我在表单中设置了 notify_url 但 IPN 通知没有触发!

标签: testing servlets paypal paypal-ipn


【解决方案1】:

我会检查以确保您的 Web 服务器允许在您的 IPN 处理程序 URL 上发出 POST 请求。在此示例中,我在您链接的页面上使用了示例的 PHP 版本,并将脚本放置在 /ipn.php

然后我 telnet 到我的服务器。 (替换为您的服务器地址)

$ telnet myserver.com 80
Trying myserver.com...
Connected to myserver.com.
Escape character is '^]'.

将以下内容粘贴到您的 telnet 会话中。 (替换 ipn.php 和 myserver.com)。在最后一个命令后添加一个空行。

POST /ipn.php HTTP/1.1
Host: myserver.com
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 0
HTTP/1.1 200 OK

如果您没有看到 200 状态,则表示您的应用程序未正确处理 POST 请求,这可能是 405 错误的原因。

您应该确保在您的 servlet 中实现 doPost() 方法以及 doGet()。

如果您能够从 IPN 模拟器获取请求,并准备继续进行沙盒测试,请确保您拥有正确的通知 URL,并且在沙盒卖家的配置文件下启用了 IPN。

此外,请确保您的 IPN 处理程序也在记录无效请求,以便您知道该请求是否已启动。

最后,确保在您的 servlet 中将 IPN 验证 URL 设置为 https://www.sandbox.paypal.com/cgi-bin/webscr。 (您发布的示例中的 URL 是https://www.paypal.com/cgi-bin/webscr

【讨论】:

  • 此外,IPN 模拟器可能是快速测试 IPN 请求的最佳方式。但是,如果您使用适当的 IPN 处理程序构建您的应用程序,并开始使用沙盒帐户进行测试,则应该触发 IPN 请求。确保在卖家沙盒帐户下启用该功能。
  • 另外,我对 servlet 了解不多,但是您是否在您的方法中实现了 doPost 方法? java.sun.com/developer/onlineTraining/Programming/BasicJava1/…
  • 感谢您的帮助,我相信您是对的我只在我的 servlet 中实现了 doGet - 请将此集成到答案中,我将测试并标记为已接受。
  • 我也确实启用了配置文件即时付款通知下的功能,但它似乎根本没有触发!
  • 添加了有关 doPost() 的信息,以及尝试触发沙盒 IPN 的其他信息。
猜你喜欢
  • 2021-12-20
  • 1970-01-01
  • 1970-01-01
  • 2011-06-21
  • 2014-12-12
  • 2018-09-08
  • 2017-10-16
  • 2018-01-07
  • 2018-06-05
相关资源
最近更新 更多