0

私は PayPal IPN リスナーを実装する相対的な PHP 初心者であり、応答コードを確認する方法が本当にわからないことを除いて、すべて正常に動作しているようです。

cURL で醜いことを試してみましたが、まったく機能しません (cURL を理解していません)。

ネット上のどこかから入手したこのコードを試しました:

$fp = fsockopen('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30);
$response_headers = get_headers($fp);
$response_code = (int)substr($response_headers[0], 9, 3);

...しかし、機能していません ($response_code = 0 を返します)。

そのため、現在、Response 200 をチェックせずに IPN コードをデバッグしています。

これを確認するための適切な/簡単な方法について、より経験豊富な人が私にアドバイスできますか?

ありがとう

4

1 に答える 1

2

get_headers($fp) ではなく、get_headers( $url ) です。私が完全に間違って読んでいない限り(そして、私が見たことのない他のモードがあります)、ソケットハンドルではなく、読んでいるURLを渡す必要があります。実際には、明らかに独自の GET を行うため、現在のタスクには役に立たないでしょう。

fsockopen(...) は低レベル (TCP/IP) 関数です。CURL ハンドルではなく、ソケット ハンドルを返します。これが curl_getinfo(...) を使用できない理由です。あなたはこのようなものが欲しい...

$fp = curl_init('https://www.sandbox.paypal.com/cgi-bin/webscr');
curl_setopt($fp, CURLOPT_POST, true);
curl_setopt($fp, CURLOPT_POSTFIELDS, $_POST);
curl_setopt($fp, CURLOPT_RETURNTRANSFER, true);

$response = curl_exec($fp);

$response_code = curl_getinfo($fp, CURLINFO_HTTP_CODE);

私が覚えていることを除いて、投稿フィールドに「cmd = _notify-validate」を追加する必要があります。

fsockopen(...) を使用しないでください。ええ、わかっています。それが Paypal のサンプル コードの機能です。しかし、これはどこでも実行できるように設計されており、インストールされている CURL に依存することはできません。できますので、ご利用ください。

于 2010-05-16T14:45:51.100 に答える