【发布时间】:2012-08-14 20:57:27
【问题描述】:
我有一个 PayPal 侦听器,它从 PayPal 收到 HTTP POST 请求(或 PayPal 文档似乎表明这是他们发送的),侦听器发回信息以供 PayPal 验证,然后如果信息得到验证,它进行数据库事务。这是正常的 PayPal IPN 流程,验证部分工作正常。
我从 PayPal 获得的 POST 数组中的一个值是我通过传递以跟踪交易号的值。所以我打了一个电话,看起来像:(不是实际代码;我完全了解SQL injection)
UPDATE transactions SET status='paid' WHERE id=$_POST['invoice']
问题:如果我通过将带有一些输入的表单指向我的侦听器来伪造输入,那么一切正常,但如果我从 PayPal 获得一个真正的 POST 数组,则数据库不会运行。我知道$_POST['invoice'] 变量是在我获得真实的 PayPal 数据时设置的,我已经对其进行了测试,它有一个有效值,比如 84,所以我不知道为什么我的交易没有执行。事务上方和下方的行都执行。
也许我必须发布我的实际代码,但是否可以通过某种方式配置 PHP,使其在收到来自 PayPal 的请求时不会运行交易?就像我说的,我认为 PayPal 正在发送一个 HTTP POST 请求,因此它应该与我的假表单无法区分,但有些地方出了问题。
【问题讨论】:
-
我们需要查看一些围绕 sql 查询的确切代码。查询中可能存在语法错误(当插入来自 PayPal 的数据时)。检查您的错误日志。
-
这是本地主机还是实时服务器?
-
我怀疑代码的用处,但
$conditionArray = array('transaction' => $invoice_number); $fields = array('status' => 'Paid'); $transactions->changeFields($conditionArray, "AND", $fields);第一行是我知道我从贝宝获得的发票号码。第二行是我想如何更新表条目。第三行是我调用一个复杂的函数,但我知道该函数有效,因为如果 $invoice_number 被欺骗,它就有效。上面和下面的行向我发送电子邮件,这就是我知道 $invoice_number 已设置的方式。 -
@LawrenceCherone 它是一个实时服务器
-
@AlexLunix 我实际上无法检查错误日志,但我会问可以的人,希望这会提供一些见解,如果它有任何帮助,我会在这里发布,谢谢!
标签: php mysql paypal paypal-ipn