0

数日間、PaypalIPNリスナースクリプトで問題が発生しています。Paypal IPNシステムに慣れていない方のために、基本的にPaypalは、トランザクションに関するメッセージをスクリプトに送信します。このメッセージには、いくつかのビットが追加されて返送されます。Paypalが正しい返信を受け取った場合は、「VERIFIED」と返信し、そうでない場合は「INVALID」と返信します。

私が経験した問題は、「fsockopen」コマンドにあると最初は思っていました。$ fp = fsockopen('ssl://sandbox.paypal.com'、443、$ errno、$ errstr、30); ただし、すべてのコードをこの行だけに減らしたので、問題なく接続されているようです。問題は、「feof」および「fgets」コマンドで発生します。スクリプトがハングアップするだけで、理由はわかりません。私は基本的にPaypalIPNListener Webサイトで提案されたコードをコピーしたので、それが機能すると思いました!feofまたはfgetsがなぜストールを引き起こしているのかを理解するのを手伝っていただければ幸いです。

完全なスクリプトは次のとおりです。

$postback = 'cmd=_notify-validate'; //doesn't matter what these include for now
$header='abc';

//Script has been activated, create debug
$filename = 'debug/debug1_script.txt';
$filehandle=fopen($filename, 'w');
fwrite($filehandle,$postback);
fclose($filehandle);


$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);//open the connection

//no connection, create debug file
if(!$fp){
    $filename = 'debug/debug2_fpfail.txt';
    $filehandle=fopen($filename, 'w');
    fwrite($filehandle, $errstr.'('.$errno.')');
    fclose($filehandle);
    die();
}


//post data back
fputs($fp, $header . $postback);

//create debug file
$filename = 'debug/debug3_postback.txt';
$filehandle=fopen($filename, 'w');
fwrite($filehandle, $header.$postback);
fclose($filehandle);


//script hangs with either of the two following lines included
while(!feof($fp)){
    $res=fgets($fp,1024);
}

よろしくお願いします!

4

4 に答える 4

6

だから私は解決策を見つけたと思います、それは代わりに

while(!feof())

fgets()

コンボ、私はこれを使用しました:

$res=stream_get_contents($fp, 1024);

初めて働いた!今、私は自分の人生を続けることができます。

于 2011-11-30T12:00:18.983 に答える
1

Googleからここに到着する人は、ヘッダーに「接続:閉じる」を含めることを忘れないでください。それ以外の場合、ホストはタイムアウトするまで接続を開いたままにします。

于 2012-03-16T22:37:39.090 に答える
1

他の誰かが同じ問題を抱えている場合、PayPalによるIPNの推奨選択肢はCURLのようです。

Githubのコードサンプルをチェックしてください:https ://github.com/paypal/ipn-code-samples/blob/master/paypal_ipn.php

于 2014-04-11T01:36:32.183 に答える
0

ソケットからペイパルに戻る接続はhttpPOSTで$fpある必要があります。feof()ペイパルは完全なHTTPリクエストを聞くことがないため、ハングします。そのため、何も返送されません。諦めるまでリッスンし続けます。

このペイパルIPNページのサンプルコードには、追加のもの(完成品$headerと変数)が必要です。$req

可能であれば、rawソケットの代わりにCURLを使用するようにこれを書き直します。そのため、完全なhttpリクエストをフォーマットしてrawhttpレスポンスを読み取る必要はありません。

于 2011-11-29T18:15:25.027 に答える