我正在使用 PayPal IPN。我正在使用我使用多年的脚本并且从未遇到任何问题,但是,现在我正在使用 MassPay API 并在单个请求中包含 250 个。因此,发送的 IPN 数据比我通常处理的要大得多,并且不知何故我正在丢失数据。
在我的 IPN 脚本中,我要做的第一件事是序列化 POST 数据并将其保存到 MySQL 中的 TEXT 字段。当我这样做时,我没有从 PHP 或 MySQL 得到任何错误,并且数据很好地显示在我的表中,但是,当我将其与显示的内容进行比较时,它几乎丢失了 POST 中实际包含的数据的一半在 PayPal IPN 历史记录日志中。
除了保存原始 IPN 数据之外,我还在脚本中遍历所有 MassPay 项目以单独处理付款。这是我如何在 IPN 中编译所有个人批量付款的 PHP 片段...
// Mass Payments
$i = 1;
$mass_payments = array();
while(isset($_POST['masspay_txn_id_' . $i]))
{
$masspay_txn_id = isset($_POST['masspay_txn_id_' . $i]) ? $_POST['masspay_txn_id_' . $i] : '';
$mc_currency = isset($_POST['mc_currency_' . $i]) ? $_POST['mc_currency_' . $i] : '';
$mc_fee = isset($_POST['mc_fee_' . $i]) ? $_POST['mc_fee_' . $i] : 0;
$mc_gross = isset($_POST['mc_gross_' . $i]) ? $_POST['mc_gross_' . $i] : 0;
$receiver_email = isset($_POST['receiver_email_' . $i]) ? $_POST['receiver_email_' . $i] : '';
$status = isset($_POST['status_' . $i]) ? $_POST['status_' . $i] : '';
$unique_id = isset($_POST['unique_id_' . $i]) ? $_POST['unique_id_' . $i] : '';
$current_payment_data_set = array(
'masspay_txn_id' => $masspay_txn_id,
'mc_currency' => $mc_currency,
'mc_fee' => $mc_fee,
'mc_gross' => $mc_gross,
'receiver_email' => $receiver_email,
'status' => $status,
'unique_id' => $unique_id
);
array_push($mass_payments, $current_payment_data_set);
$i++;
}
同样,我没有收到任何 PHP 警告、通知、错误等,并且 IPN 脚本成功完成,结果为 200 OK,但是,我系统中的一半付款记录没有像应有的那样更新,因为它们是不包括我从 PayPal 得到的东西。确实出现在我收到的 IPN 数据中的数据会在我的系统中按预期更新。
同样,当我检查 PayPal IPN 历史记录时,它显示 IPN 包含了我似乎丢失的所有数据,当我比较两者时,IPN 历史记录中的一个是从 masspay_txn_id_1 到 masspay_txn_id_250 的所有数据。它对所有东西都有唯一的 ID,等等。不过,我的脚本只看到唯一的 ID 100 - 199,它遗漏了许多其他通用的东西,比如 txn_type。
是否有任何服务器设置或任何可能导致我丢失 POST 数据的东西,即使我在任何地方都没有收到任何错误?
更新 我最终采取了 PayPal IPN 历史显示的内容,其中包括所有内容,并将其放入一个 PHP 脚本中,该脚本将数据发布到我的 IPN 侦听器。不过,我仍然在丢失数据,所以我的服务器以某种方式截断了 POST 数据,但没有给我任何警告或任何东西。不过,我没有找到任何有关可能导致此问题或如何解决此问题的信息..??
任何有关这方面的信息将不胜感激。谢谢!