0

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);
        }
4

0 に答える 0