Paypal Listener不运行数据库事务

时间:2012-08-18 21:04:42

标签: php mysql paypal paypal-ipn

我有一个PayPal监听器从PayPal获取HTTP POST请求(或PayPal文档似乎表明他们发送的是什么),监听器发回信息以供PayPal验证,然后如果信息是经过验证,它可以进行数据库交这是正常的PayPal IPN流程,验证部分工作正常。

我从PayPal获得的POST数组中的一个值是我要通过以跟踪交易号的内容。所以我打电话看起来像:(不是实际的代码;我完全了解SQL injection

UPDATE transactions SET status='paid' WHERE id=$_POST['invoice']

问题:如果我通过将带有一些输入的表单指向我的监听器来伪造输入,一切正常,但如果我从PayPal获得一个真正的POST数组,则数据库不会运行。我知道当我得到真正的PayPal数据时设置$_POST['invoice']变量,我已经测试了它,并且它有一个有效值,如84,所以我不知道为什么我的事务不执行。事务上方和下方的行都执行。

也许我必须发布我的实际代码,但有可能以某种方式配置PHP,以便在收到来自PayPal的请求时不会运行事务吗?就像我说的那样,我认为PayPal正在发送一个HTTP POST请求,所以它应该与我的假形式无法区分,但是出了点问题。

2 个答案:

答案 0 :(得分:0)

您的表单输入可能与实际的IPN不同。

PayPal的IPN可以包含数组,当从$ _POST变量读取时,php无法很好地处理这些数组。这可能会使您的处理程序瘫痪(在这种情况下,您将需要读取和操作原始数据)。

如果可能的话,尝试读取原始传入数据并与其他人建议的模拟数据进行比较。

答案 1 :(得分:0)

通知URL设置为指向开发数据库中的侦听器。所以我收到了电子邮件,表明POST ['invoice']变量已设置,但所有事务都在开发数据库上运行