其他提示

对不起,我的原始响应真的严重措词:)

与fgets仅读取一行行,第一行是所述HTTP响应。你的代码永远不会给人机会继续读书,但是,作为第一线处理后,你会出错误,。

我倾向于喜欢的东西来代替while循环:

    while (!feof($fp)) {
         $res = trim(fgets($fp, 1024));

         if (strcmp($res, "VERIFIED")==0) {
            //do something ...
         }
         else if (strcmp($res, "INVALID") == 0) {
             fclose ($fp);
             return false;
         }
     }

由于@Mike说,你看整个身体 - 你的情况,你只是测试,如果VERIFIEDINVALID出现在第一个1024个字节的答复,这可能是头部的

顺便说一句,你不需要使用fsockopen(),大多数人做的,因为贝宝使用它,这样它在旧箱的设置提供了一个例子。卷曲或用HTTP POST方面会做的工作就好了file_get_contents,这里是一个例子,我编码的 phunction PHP框架

public static function PayPal($email, $status = 'Completed', $sandbox = false)
{
    if (preg_match('~^(?:.+[.])?paypal[.]com$~', gethostbyaddr($_SERVER['REMOTE_ADDR'])) > 0)
    {
        $url = ($sandbox !== true) ? '' : '.sandbox';
        $result = self::CURL('https://www' . $url . '.paypal.com/cgi-bin/webscr/', array_merge(array('cmd' => '_notify-validate'), $_POST), 'POST');

        if ($result == 'VERIFIED')
        {
            $email = strlen($email) * strcasecmp($email, $_POST['receiver_email']);
            $status = strlen($status) * strcasecmp($status, $_POST['payment_status']);

            if (($email == 0) && ($status == 0))
            {
                return true;
            }
        }
    }

    return false;
}
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top