龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > web编程 > php编程 >

php 模拟飞信fetion发送类[直接调用官方]

时间:2014-09-11 11:45来源:网络整理 作者:网络 点击:
分享到:
模拟飞信fetion发送类[直接调用官方] [代码片段(219行)]
class PHPFetion
{
    protected $_mobile;
    protected $_password;
    protected $_cookie = '';
    protected $_uids = array();
    protected $_csrfToten = null;
    public function __construct($mobile, $password)
    {
        if ($mobile === '' || $password === '')
        {
            return;
        }

        $this->_mobile = $mobile;
        $this->_password = $password;

        $this->_login();
    }

    public function __destruct()
    {
        $this->_logout();
    }

    protected function _login()
    {
        $uri = '/huc/user/space/login.do?m=submit&fr=space';
        $data = 'mobilenum='.$this->_mobile.'&password='.urlencode($this->_password);

        $result = $this->_postWithCookie($uri, $data);

        preg_match_all('/.*?\\r\\nSet-Cookie: (.*?);.*?/si', $result, $matches);
        if (isset($matches[1]))
        {
            $this->_cookie = implode('; ', $matches[1]);
        }

        $result = $this->_postWithCookie('/im/login/cklogin.action', '');
        return $result;
    }

    public function send($mobile, $message)
    {
        if ($message === '')
        {
            return '';
        }

        if ($mobile == $this->_mobile)
        {
            return $this->_toMyself($message);
        }
        else
        {
            $uid = $this->_getUid($mobile);

            return $uid === '' ? '' : $this->_toUid($uid, $message);
        }
    }

    protected function _getUid($mobile)
    {
        if (empty($this->_uids[$mobile]))
        {
            $uri = '/im/index/searchOtherInfoList.action';
            $data = 'searchText='.$mobile;

            $result = $this->_postWithCookie($uri, $data);

            //匹配
            preg_match('/toinputMsg\\.action\\?touserid=(\\d+)/si', $result, $matches);

            $this->_uids[$mobile] = isset($matches[1]) ? $matches[1] : '';
        }

        return $this->_uids[$mobile];
    }

    protected function _getCsrfToken($uid)
    {
        if ($this->_csrfToten === null)
        {
            $uri = '/im/chat/toinputMsg.action?touserid='.$uid;

            $result = $this->_postWithCookie($uri, '');

            preg_match('/name="csrfToken".*?value="(.*?)"/', $result, $matches);

            $this->_csrfToten = isset($matches[1]) ? $matches[1] : '';
        }

        return $this->_csrfToten;
    }

    protected function _toUid($uid, $message)
    {
        $uri = '/im/chat/sendMsg.action?touserid='.$uid;
        $csrfToken = $this->_getCsrfToken($uid);
        $data = 'msg='.urlencode($message).'&csrfToken='.$csrfToken;

        $result = $this->_postWithCookie($uri, $data);

        return $result;
    }

    protected function _toMyself($message)
    {
        $uri = '/im/user/sendMsgToMyselfs.action';
        $result = $this->_postWithCookie($uri, 'msg='.urlencode($message));
        return $result;
    }

    protected function _logout()
    {
        $uri = '/im/index/logoutsubmit.action';
        $result = $this->_postWithCookie($uri, '');

        return $result;
    }

    protected function _postWithCookie($uri, $data)
    {
        $fp = fsockopen('f.10086.cn', 80);
        fputs($fp, "POST $uri HTTP/1.1\\r\\n");
        fputs($fp, "Host: f.10086.cn\\r\\n");
        fputs($fp, "Cookie: {$this->_cookie}\\r\\n");
        fputs($fp, "Content-Type: application/x-www-form-urlencoded\\r\\n");
        fputs($fp, "User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:14.0) Gecko/20100101 Firefox/14.0.1\\r\\n");
        fputs($fp, "Content-Length: ".strlen($data)."\\r\\n");
        fputs($fp, "Connection: close\\r\\n\\r\\n");
        fputs($fp, $data);

        $result = '';
        while (!feof($fp))
        {
            $result .= fgets($fp);
        }

        fclose($fp);

        return $result;
    }

}

function curl($url, $postFields = null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    if(strlen($url) > 5 && strtolower(substr($url,0,5)) == "https" ) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }

    if (is_array($postFields) && 0 < count($postFields))
    {
        $postBodyString = "";
        $postMultipart = false;
        foreach ($postFields as $k => $v)
        {
            if("@" != substr($v, 0, 1))
            {
                $postBodyString .= "$k=" . urlencode($v) . "&"; 
            }
            else
            {
                $postMultipart = true;
            }
        }
        unset($k, $v);
        curl_setopt($ch, CURLOPT_POST, true);
        if ($postMultipart)
        {
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postFields);
        }
        else
        {
            curl_setopt($ch, CURLOPT_POSTFIELDS, substr($postBodyString,0,-1));
        }
    }
    $reponse = curl_exec($ch);

    if (curl_errno($ch))
    {
        throw new Exception(curl_error($ch),0);
    }
    else
    {
        $httpStatusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        if (200 !== $httpStatusCode)
        {
            throw new Exception($reponse,$httpStatusCode);
        }
    }
    curl_close($ch);
    return $reponse;
}
function object_to_array($obj)
{
    $_arr = is_object($obj) ? get_object_vars($obj) : $obj;
    foreach ($_arr as $key => $val)
    {
        $val = (is_array($val) || is_object($val)) ? object_to_array($val) : $val;
        $arr[$key] = $val;
    }
    return $arr;
}
//该片段来自于http://outofmemory.cn
精彩图集

赞助商链接