0

PayPal IPN を使用しています。私は何年も使用してきたスクリプトを使用しており、問題が発生したことはありませんが、現在は MassPay API を使用しており、1 つの要求に 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 履歴の 2 つを比較すると、masspay_txn_id_1 から masspay_txn_id_250 までのすべてのデータが含まれています。すべてに一意の ID などがあります。ただし、私のスクリプトは一意の ID 100 ~ 199 しか見ておらず、txn_type などの他の多くの一般的なものを除外しています。

どこにもエラーが発生していなくても、サーバー設定または POST データを失う原因となるものはありますか?

更新 すべてを含む PayPal IPN History が示したものを取得し、それを PHP スクリプトに配置して、データを IPN リスナーに POST しました。ただし、まだデータが失われているため、サーバーが POST データを切り捨てていますが、警告などは表示されません。これの原因や修正方法に関する情報は見つかりません..??

これに関する情報は大歓迎です。ありがとう!

4

2 に答える 2

0
file_put_contents('ipnlog.txt', print_r($_POST, true), FILE_APPEND);

データはありますか?

IPN メッセージが特定のバイト サイズに制限されて途切れるという問題があったことを思い出しますが、詳細はわかりません。

于 2013-07-02T22:20:22.023 に答える