この説明のつかないことは、おそらく何千人ものウェブマスターに影響を与えるか、影響を与えるでしょう。
問題は、Paypal がこの要求にまったく応答しないことです。以下は、私が使用するサンプル コードとプログラマーのコメントです。
注文日 - 5 回繰り返されました。なんで?これは、PayPal がこのスクリプトの IPN を 5 回試みましたが、成功しなかったことを意味するだけです。HTTP を 1.0 に更新してスクリプトを再アップロードした場合にのみ、PayPal から「VERIFIED」応答が表示されました。その後も、PayPal は引き続き問い合わせを行っていました。HTTP = 1.1 の場合、PayPal はすべてを適切に取得していますが、適切に応答していないようです。その後、何らかの理由で、同じ支払いに対してさらに別の応答を作成するために戻ります。HTTP 1.0 では、すべてが花のようなものです。1 つの要求、1 つの応答ですべてが機能します。何が悪いのかわからない... 0 スクリプトを再アップロードしました。その後も、PayPal は引き続き問い合わせを行っていました。HTTP = 1.1 の場合、PayPal はすべてを適切に取得していますが、適切に応答していないようです。その後、何らかの理由で、同じ支払いに対してさらに別の応答を作成するために戻ります。HTTP 1.0 では、すべてが花のようなものです。1 つの要求、1 つの応答ですべてが機能します。何が悪いのかわからない... 0 スクリプトを再アップロードしました。その後も、PayPal は引き続き問い合わせを行っていました。HTTP = 1.1 の場合、PayPal はすべてを適切に取得していますが、適切に応答していないようです。その後、何らかの理由で、同じ支払いに対してさらに別の応答を作成するために戻ります。HTTP 1.0 では、すべてが花のようなものです。1 つの要求、1 つの応答ですべてが機能します。何が悪いのかわからない...
Ps。「INVALID」応答について話しているのではありません。「INVALID」応答は実際には成功の一部ですが、HTTP 1.1 の場合、PayPal は応答をまったく提供せず、空の文字列です。」
<?php
$req = 'cmd=_notify-validate';
$r='';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
$r.="{$key}: {$value}\n";
}
// post back to PayPal system to validate
$header .= "POST /cgi-bin/webscr HTTP/1.1\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Host: www.paypal.com\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
#I also tried: $fp =fsockopen('ssl://www.paypal.com',443,$err_num,$err_str,30);
if (!$fp) {
$r.="----\nHTTP ERROR\n";
// HTTP ERROR
} else {
$r.="----\nReceived IPN request\n";
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
}
fclose ($fp);
if (strcmp ($res, 'VERIFIED') == 0) {
$proceed=TRUE;
}
else{
$proceed=FALSE;
}
}
?>
PS。これは、notify_url
使用するスクリプトの一部です。
<input type="hidden" name="notify_url" value="{$main_url}/index.php?action=ipn&user_id={$user_id}" />
サンドボックスでテストされたとき、それは機能しています..