2017-02-03 46 views
0

我目前正在测试PHP网站上的立即购买按钮。下面是代码我有(或多或少):我是否收到所有事件的Paypal立即购买按钮回拨?

<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)。

回答

1

在Web结帐形式notify_url设置覆盖轮廓IPN URI,因此,如果一个表格没有指定notify_url那么轮廓值将被使用,但如果形式不指定地址,则配置文件值将不会被使用。我很欣赏这是令人困惑的,因为PayPal配置文件页面(您指定默认IPN地址)没有提到这一点,PayPal自己的文档也没有提及。 (为了进一步挫败事情,贝宝的文档仍然有屏幕截图和文字描述旧的(2005-2015)帐户管理页面,但他们仍未更新它们)。

注意,虽然名称“即时付款通知”,该消息是不实际的即时 - 在我的经验,是15秒,(很少)之间的延迟时间长达2分钟我的代码之前收到IPN信息。出于这个原因,如果你真的需要即时通知,你还应该使用PDT来扩充你的IPN处理程序。 PDT是PayPal的网上结帐流程将您的客户重定向回到具有查询字符串中的不透明交易ID的自定义URL,当您处理来自返回客户的传入请求时,您可以使用它来检索您自己代码中的实际交易详细信息。

IPN系统现在已有数十年历史,可以追溯到上世纪90年代后期 - 因此它的设计有点奇怪,事实上,您将为同一事务接收多个通知 - 但它取决于类型的交易。这在PayPal的IPN文档中有记载,但是它们又不会给你所有的细节,在很多情况下,你必须通过试错法来学习。

例如,如果使用PayPal自己的结账页面并且客户使用信用卡或PayPal账户余额进行支付是一个简单的Web Checkout,那么您将收到单个通知,通知您交易成功,就是这样。但是,如果客户由美国ACH支付(又名eCheck),那么您将收到多个通知,因为结算流程需要一段时间:您将首先收到初始通知,表明已付款,但尚未结清,然后您将在2-3天后收到另一个通知,通知您付款是否成功清除(并且您的PayPal账户实际上有资金)或失败。

我个人不推荐使用PayPal沙盒进行琐碎的练习,因为它无法在现实生活中模拟所有可能的场景,而且设置起来很麻烦。您认真测试的重要程度取决于此代码对您的业务的重要程度。

简而言之,对于贝宝来说,不要害怕进行生产测试,并确保您的代码优雅地处理异常信息,我强烈建议您记录并保存每个传入的IPN消息,以便获得对您可以处理的数据有更好的“感觉” - 因为PayPal的文档在许多领域缺乏。

+0

哇,谢谢。你一直非常详尽! – beppe9000

+0

非常明确的解释@戴 – Sol

相关问题