我目前正在测试PHP网站上的“立即购买”按钮。这是我的代码(或多或少):
<form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="........"
<input type="image" src="https://www.paypalobjects.com/fr_CA/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - la solution de paiement en ligne la plus simple et la plus sécurisée !">
<img alt="" border="0" src="https://www.sandbox.paypalobjects.com/fr_CA/i/scr/pixel.gif" width="1" height="1">
<input name="notify_url" value="https://www.example.com/paypal_notifications.php" type="hidden">
</form>
沙箱交易正在运行(发送完成),但我不知道我是否只会收到一次性消息或更新。
如果付款被撤销 - 比如说 - 一周之后,我会收到一个活动吗? (有没有办法立即撤销沙盒帐户中的付款?)
我只使用notify_url而不是帐户中的IPN设置,因为该帐户与多个网站一起使用(我找不到它......:P)。
答案 0 :(得分:1)
Web Checkout表单中的notify_url
设置会覆盖配置文件IPN URI,因此如果表单未指定notify_url
,则配置文件值将为使用,但如果表单确实指定了地址,则不会使用配置文件值。我很欣赏这是令人困惑的,因为PayPal配置文件页面(您指定默认的IPN地址)没有提到这一点,PayPal也没有自己的文档。
(为了进一步挫败事情,PayPal的文档仍然有截图和文字描述旧的(2005-2015)帐户管理页面,他们仍然没有更新它们。)
请注意,尽管名称为&#34; 即时付款通知&#34;,但邮件实际上并不是即时消息 - 根据我的经验,延迟时间介于15秒和(很少)之间在我的代码收到IPN消息之前2分钟。因此,如果您确实需要即时通知,还应使用PDT来增强您的IPN处理程序。 PDT是PayPal的网络结账流程将客户重定向回查询字符串中具有不透明交易ID的自定义URL,您可以使用该ID来处理来自您自己的代码中的实际交易详细信息回头客。
IPN系统现在已有几十年的历史,可以追溯到20世纪90年代末期 - 因此它的设计有点奇怪,事实上,你会收到同一笔交易的多个通知 - 但这取决于它的类型交易。这在PayPal的IPN文档中有记录,但同样,它们并没有为您提供所有细节,在许多情况下,您必须通过反复试验来学习。
例如,如果它是使用PayPal自己的结帐页面进行的直接网络结账,并且客户使用信用卡或PayPal帐户余额付款,那么您将收到一条通知你交易成功了,就是这样。但是,如果客户通过美国ACH(又名eCheck
)付款,那么您将收到多个通知,因为清算过程需要一段时间:您首先会收到付款的初始通知,但是它没有&但是,如果付款成功结算(并且您的PayPal帐户实际上有资金)或者是否失败,您将在2-3天后收到另一个通知,然后通知您。
我个人不建议使用PayPal Sandbox进行琐碎的练习,因为它无法模拟现实生活中的所有可能场景,而且设置起来很痛苦。您对测试的重视程度取决于此代码对您的业务的重要程度。
简而言之,特别是对于PayPal,不要害怕测试生产,并确保您的代码能够优雅地处理异常消息,我强烈建议您记录并保存每个传入的IPN消息,这样您就可以获得更好的感觉&#34;对于您可以处理的数据 - 再次,因为PayPal的文档在很多方面都缺乏。