Paypal IPN を使用して Web サイトからの支払いを処理しています。すべて問題なく動作しており、確認済みの応答を受け取り、それに応じてデータベース内の注文を更新しています。私が抱えている問題は、複数の IPN 応答を送信していることです。
これは、paypal が私のコールバックにヒットしたときに 200 応答を受信していないことが原因である可能性があることを理解しています。
私が見る限り、すべて問題ありません。とにかく 200 応答を「偽装」する方法はありますか、それとも 200 応答がコールバックから送信されない理由を誰でも理解できますか?
ここに私のコールバックがあります:
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
//FH capture the callback in the callback table
$callback = "";
foreach ($_POST as $key => $value)
{
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
$callback .= $key."=".$value."&";
}
Payment::insert_callback($callback);
// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
// $header .= "Host: www.sandbox.paypal.com:443\r\n";
$header .= "Host: www.paypal.com:443\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
// $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
$item_name = (isset($_POST['item_name']))? $_POST['item_name'] : $_POST['item_name1'];
$item_number = (isset($_POST['item_number']))? $_POST['item_number'] : $_POST['item_number1'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];
if (!$fp)
{
}
else
{
fputs ($fp, $header . $req);
while (!feof($fp))
{
$res = fgets ($fp, 1024);
$res = trim(str_replace('\n', '', $res));
if (strcmp ($res, "VERIFIED") == 0)
{
Payment::insert_callback('VERIFIED');
Payment::update_listing_history($item_number, 1, $callback);
}
else if (strcmp ($res, "INVALID") == 0)
{
Payment::insert_callback('INVALID');
}
}
fclose ($fp);
}