我的服务器上的IPN接收器成功接收了IPN,并将其重新发布回PayPal的服务器(https://www.paypal.com/cgi-bin/webscr)以进行验证。我正在使用IPN模拟器测试它,它总是接收INVALID
。所以我已经完成了大部分工作,并让服务器进行对话。只需要一点精细的抛光,我无法调试,因为我没有反馈。我在哪里可以得到这些反馈?
PayPal的文档说明如下:
"在paypal.com上查看您的IPN历史记录。您的IPN历史记录告诉您PayPal是否发送了给定的IPN消息,以及您的听众是否对此做出了响应。此页面还可能提供有关运行您的听众的服务器状态的信息。如有必要,您可以通过IPN历史页面请求PayPal重新发送给定的IPN消息。"--https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNTesting/
所以我需要找到这个IPN的历史,对吧?但是这些IPN日志记录在哪个帐户?它们肯定包括使用模拟器生成的IPN吗?如果没有,那么重点是什么?开发人员如何调试?我查看了直播商家账户,沙盒商家账户,以及沙盒支付方账户。但他们都表示,没有任何IPN被发送的历史。
顺便说一句:PayPal的沙盒是一场噩梦,因为如果你从一个沙盒帐户注销,你会发现自己回到了直播网站的登录页面。同样,你不能使用沙盒商家帐户登录IPN模拟器,只能使用直播商家帐户,所以你永远必须以直播商家的身份登录才能发送请求,注销,以沙盒的身份登录,检查IPN历史记录,什么都找不到,退出,以直播的身份登录并重复,直到你疯了。然后,为了进一步混淆事情,模拟器从地址buyer@paypalsandbox.com
发送IPN,所以让你的想法付费!!!!IPN模拟器是否是沙盒的一部分?一旦你提交了一个模拟的IPN,如果你确实需要输入一个有效的沙箱付款人帐户的地址,它会将所有表单值重置为默认值(文档没有说明你是否输入,但我在这里很清楚),你还必须在每次请求时多次复制并粘贴到框中。请请PayPal,以一种非你同事可以理解的方式给你写文档。解释在测试IPN的每个阶段您需要处于什么环境中。
我感到非常沮丧,因为开发不应该这样做。我只是凭直觉盲目尝试,非常不科学,效率也很低。
有人能澄清(或向我指出文档中澄清的部分)如何调试INVALID
响应吗?
好。经过一段重要的时间,我得出了以下结论:
IPN模拟器实际上是沙箱的一部分。这对于进行快速轻量级测试以检查PayPal的服务器是否可以与您的服务器对话很有用,但仅此而已。它远非真正的支付过程模拟器!调试IPN验证过程的解决方案是从购物篮提交阶段开始支付模拟过程,在沙箱环境中设置一些非常重要的值。
1)首先,登录https://developer.paypal.com/使用您的LIVE商业帐户用户名和密码。单击Applications
>Sandbox Accounts
https://developer.paypal.com/webapps/developer/applications/accounts并创建2个沙箱帐户:
创建一个Merchant/Business沙盒帐户,这将是我们的假冒商店。例如alansugar@yourdomain.example.com
然后,创建一个个人沙盒帐户,这将是我们的假客户。例如ladygaga@yourdomain.example.com
我们要利用这个假商店和这个假顾客在沙盒里玩。。。
2)在您的服务器(提交给PayPal的服务器)上设置购物篮页面,在FORM元素的business
字段中设置您的商户/企业沙盒帐户地址,在action
属性中设置PayPal沙盒域。就像这样…
<form method="post" action="https://www.sandbox.paypal.com/cgi-bin/webscr">
<input type="hidden" value="_xclick" name="cmd">
<input type="hidden" value="alansugar@yourdomain.example.com" name="business">
<input type="hidden" value="1" name="no_note">
<input type="hidden" value="GBP" name="currency_code">
<input type="hidden" value="GB" name="lc">
<input type="hidden" value="PP-BuyNowBF" name="bn">
<input type="hidden" value="bo14-9097200" name="invoice">
<input type="hidden" value="monkey" name="custom">
<input type="hidden" value="A nice pair of trousers" name="item_name">
<input type="hidden" value="1" name="Some socks to match">
<input type="hidden" value="25.0" name="amount">
<input type="hidden" value="2" name="no_shipping">
<input class="buyButton" type="image" border="0" alt="PayPal – The safer, easier way to pay online." name="submit" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_buynowCC_LG.gif">
<img width="1" border="0" height="1" src="https://www.paypal.com/en_GB/i/scr/pixel.gif" alt="">
</form>
3)提交购物篮,当您看到PayPal支付页面时(您的浏览器地址栏将访问www.sandbox.PayPal.com域),使用您的虚假客户帐户进行支付。
4)登录https://developer.paypal.com/使用您的LIVE帐户。单击Applications
>Sandbox Accounts
,然后单击Enter Sandbox site
链接。现在,当你的浏览器仍然登录到你的主实时帐户时,你可以使用沙盒帐户的用户名和密码第二次登录到更深的层(非常令人困惑)。当然,只是为了让您感到困惑,右上角的Username
和Password
框将预先填充您的实时帐户详细信息。擦除这些并使用沙盒商人/企业帐户的用户名和密码。现在单击History
>IPN History
,您可以看到发布到服务器的请求。您应该能够很好地使用这些信息进行调试。如果您的商户/商业沙盒帐户上尚未启用IPN,它会指示您转到设置页面并启用它。请执行此操作。显然,在此之前的任何付款都不会触发IPN。
我希望这个描述能帮助到像我一样发现官方PayPal文档读起来像一本缺了一半页面的书的人!
要访问PayPal沙盒中的IPN通知历史记录,请登录https://www.sandbox.paypal.com使用您的测试商家帐户。导航到"我的帐户/个人资料"在"销售偏好"部分,它有一个链接"即时付款通知偏好"在该页面上有一个链接到"IPN历史页面"。
我不确定他们最近是否将其添加到沙盒中,但我同意这相当麻烦。