0

我有一个 PayPal 监听器,它从 PayPal 获取HTTP POST请求(或者 PayPal 文档似乎表明这是他们发送的内容),监听器发回信息以供 PayPal 验证,然后如果信息得到验证,它会执行数据库事务。这是正常的 PayPal IPN 流程,验证部分工作正常。

我从 PayPal 获得的数组中的值之一POST是我通过它来跟踪交易号的东西。所以我打了一个看起来像这样的电话:(不是实际代码;我完全了解SQL 注入

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

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

也许我将不得不发布我的实际代码,但是是否有可能以某种方式配置 PHP,使其在收到来自 PayPal 的请求时不会运行交易?就像我说的,我认为 PayPal 正在发送一个HTTP POST请求,所以它应该与我的假表格无法区分,但有些地方出了问题。

4

2 回答 2

0

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

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

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

于 2012-08-20T03:21:46.067 回答
0

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

于 2012-09-01T12:37:01.057 回答