1

Paypal IPN に次のコードを使用しています。

    <?php

mysql_connect("localhost", "user", "password") or die(mysql_error());
mysql_select_db("PayPal") or die(mysql_error());

// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\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.paypal.com', 443, $errno, $errstr, 30);

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {

// PAYMENT VALIDATED & VERIFIED!

}

else if (strcmp ($res, "INVALID") == 0) {

// PAYMENT INVALID & INVESTIGATE MANUALY!

}
}
fclose ($fp);
}

    ?>

あらゆる方法でテストした後、次の場合を除いてすべてが機能します。

if (strcmp ($res, "VERIFIED") == 0)  

動作しません

if (strcmp ($res, "VERIFIED") == 1)

作品

サンドボックスからIPNを送信しているため、明らかに検証されていません。

何が欠けている可能性がありますか?

4

1 に答える 1

3

どちらもそうだと言っているのでstrcmp($res, "VERIFIED") == 1、$resは文字列VERIFIEDよりも1文字「大きい」です。私の推測では、$resの最後に\n文字があるか、それ以外の何かを削除する必要があります。str_replace('\n', '', $res)strcmpで行を呼び出す前に、次のようなことを試してください。ただ大声で考えています。これが機能しない場合は、私に知らせてください。

Fyi、PayPalには、cURLを使用してPHPでIPNを検証するためのサンプルコードがオンラインにあります。リンク:http ://www.x.com/developers/paypal/documentation-tools/paypal-code-samples#instantpaymentnotification

于 2012-09-14T18:08:29.520 に答える