【问题标题】:Pay Pal Listener doesn't run database transactionsPaypal Listener 不运行数据库事务
【发布时间】: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


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-11
      • 2016-02-15
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      • 1970-01-01
      • 2020-06-05
      相关资源
      最近更新 更多