复制代码 代码如下:<?/***************************************

****************************************/error_reporting(E_ALL ^ E_NOTICE);

require_once( "http.inc.php" );require_once( "class.Chinese.php");

//成功2xx    define( "QQ_RETURN_SUCCESS",    200 );    define( "QQ_LOGIN_SUCCESS",    201 );    define( "QQ_LIST_NONE",        202 );    define( "QQ_ADDTOLIST_SUCCESS",    203 );    define( "QQ_REPLYADD_SUCCESS",    204 );    define( "QQ_GETMSG_NONE",    205 );

//警告3xx    define( "QQ_ADDTOLIST_NEEDAUTH",300 );    define( "QQ_ADDTOLIST_REFUSE",    301 );    define( "QQ_ADDTOLIST_UNKNOWN",    302 );

//失败4xx    define( "QQ_RETURN_FAILED",    400 );    define( "QQ_LIST_ERROR",    401 );    define( "QQ_GETMSG_ERROR",    402 );

//在线状态    define( "QQ_STATUS_ONLINE",    10);    define( "QQ_STATUS_OFFLINE",    20);    define( "QQ_STATUS_BUSY",    30);

//血型    $QQ_DATA_BT = array        (=> "",=> "A型",=> "B型",=> "O型",=> "AB型",=> "其他"        );

//星座    $QQ_DATA_CO = array        (=> "",=> "水瓶座",=> "双鱼座",=> "牡羊座",=> "金牛座",=> "双子座",=> "巨蟹座",=> "狮子座",=> "处女座",=> "天秤座",=> "天蝎座",=> "射手座",=> "摩羯座"        );

//生肖    $QQ_DATA_SH = array        (=> "",=> "鼠",=> "牛",=> "虎",=> "兔",=> "龙",=> "蛇",=> "马",=> "羊",=> "猴",=> "鸡",=> "狗",=> "猪"        );

//性别    $QQ_DATA_SX = array        (=> "男",=> "女"        );

class QQClient{    var $uin;    var $pwd;

    var $server    =    "kconn.tencent.com";    //备用:219.133.51.11    var $port    =    21001;    //备用:8000    var $httpclient;    var $chs    =    NULL;

    function QQClient($uin,$pwd)    {        $this->uin = $uin;        $this->pwd = $pwd;    }

    function encode($str)    /*        说明:把KEY1=VAL1&KEY2=VAL2格式变为数组    */    {        $arr = explode("&" , $str);        $return = array();        foreach($arr as $k=>$v)        {            list($key,$val) = explode("=",$v);            $return[$key] = $val;            $this->chs = NULL;        }        return $return;    }

    function utf8_to_gb2312($str)    {        $this->chs = new Chinese("UTF8","GB2312", $str );        return $this->chs->ConvertIT();    }

    function gb2312_to_utf8($str)    {        $this->chs = new Chinese("GB2312","UTF8", $str );        return $this->chs->ConvertIT();    }

    function query($str)    {        $this->httpclient = new http( HTTP_V11, true );        $this->httpclient->host = "kconn.tencent.com";        $this->httpcilent->port = 21001;

        $query = $this->encode($str);        $status = $this->httpclient->post( "", $query, "" );        if ( $status == HTTP_STATUS_OK ) {            return $this->httpclient->get_response_body();        }        else        {            print_r($this->httpclient);            return false;        }        $this->httpclient->disconnect();        unset($this->httpclient);    }

    function split_str($str)    {        $arr = explode("," , $str);        if($arr[count($arr)-1] == NULL)        {            unset($arr[count($arr)-1]);        }        return $arr;    }

    function login()    {        //登陆        //VER=1.1&CMD=Login&SEQ=&UIN=&PS=&M5=1&LC=9326B87B234E7235        $str = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&PS=".md5($this->pwd)."&M5=1&LC=9326B87B234E7235";        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //返回成功            if($return["RS"]==0)            {                //登陆成功                return QQ_LOGIN_SUCCESS;            }            else            {                //登陆失败                $GLOBALS["QQ_ERROR_MSG"] = $this->utf8_to_gb2312($return["RA"]);                return QQ_LOGIN_FAILED;            }        }        else        {            //返回失败            return QQ_RETURN_FAILED;                    }    }

    function getFriendsList()    {        //得到好友列表        //VER=1.1&CMD=List&SEQ=&UIN=&TN=160&UN=0         $str = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&TN=160&UN=0";        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //返回成功            return $this->split_str($return["UN"]);        }        else        {            //返回失败            return QQ_RETURN_FAILED;                    }    }

    function getOnlineList()    {        //得到在线好友列表        //VER=1.1&CMD=Query_Stat&SEQ=&UIN=&TN=50&UN=0         $str = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&TN=50&UN=0";        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //返回成功            if($return["SN"] > 0)            {                //在线好友数>0                $uns = $this->split_str($return["UN"]);    //号码列表                $nks = $this->split_str($return["NK"]); //昵称列表                $sts = $this->split_str($return["ST"]); //状态列表                $fcs = $this->split_str($return["FC"]); //头像列表                $error = 0;                ((count($uns)==count($nks))==(count($sts)==count($fcs)))==(count($nks)==count($sts)) ?                    $num = count($uns)                    :                    $error = 1;                ;                if($error == 1) return QQ_LIST_ERROR;                $arr = array();                for($i=0;$i<$num;$i++)                {                    $arr[] = array(                        "UN" => $uns[$i] ,                        "NK" => $this->utf8_to_gb2312($nks[$i]) ,                        "ST" => $sts[$i] ,                        "FC" => $fcs[$i]                    );                }                return ($arr);            }            else            {                //在线好友数<=0                return QQ_LIST_NONE;            }                    }        else        {            //返回失败            return QQ_RETURN_FAILED;                        }    }

    function getInfo($uin)    {        //得到好友信息        //AD为联系地址,AG为年龄,EM为MAIL,FC为头像,HP为网站,JB为职业,PC为邮编,PH为联系电话,PR为简介,PV为省,RN为真实名称,SC为毕业院校,SX为性别,UN为QQ号,NK为QQ昵称        //以下注释研究 by Hackfan        //BT为血型,CO为星座,CT为城市,CY为国家,MO为移动电话,SH生肖        //LV为查询的号码(1为精简查询,2为普通查询,3为详细查询)        //CV未知,ID未知(身份证?),MT未知,MV未知,        //VER=1.1&CMD=GetInfo&SEQ=&UIN=&LV=3&UN=        $str = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&LV=3&UN=".$uin;        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //返回成功            $arr = array                (                    "AD" => $this->utf8_to_gb2312($return["AD"]),        //联系地址                    "AG" => $this->utf8_to_gb2312($return["AG"]),        //年龄                    "BT" => $return["BT"],        //血型                    "CO" => $return["CO"],        //星座                    "CT" => $this->utf8_to_gb2312($return["CT"]),        //城市                    "CY" => $this->utf8_to_gb2312($return["CY"]),        //国家                    "EM" => $this->utf8_to_gb2312($return["EM"]),        //Email                    "FC" => $return["FC"],        //头像                    "HP" => $this->utf8_to_gb2312($return["HP"]),        //网站                    "JB" => $this->utf8_to_gb2312($return["JB"]),        //职业                    "MO" => $return["MO"],        //移动电话                    "PC" => $this->utf8_to_gb2312($return["PC"]),        //邮编                    "PH" => $this->utf8_to_gb2312($return["PH"]),        //联系电话                    "PR" => $this->utf8_to_gb2312($return["PR"]),        //简介                    "PV" => $this->utf8_to_gb2312($return["PV"]),        //省                    "RN" => $this->utf8_to_gb2312($return["RN"]),        //真实姓名                    "SC" => $this->utf8_to_gb2312($return["SC"]),        //毕业院校                    "SH" => $return["SH"],        //生肖                    "SX" => $return["SX"],        //性别                    "UN" => $return["UN"],        //QQ号                    "NK" => $this->utf8_to_gb2312($return["NK"])        //昵称                );            return $arr;        }        else        {            //返回失败            return QQ_RETURN_FAILED;                        }

    }

    function addFriend($uin)    {        //添加新好友        //VER=1.1&CMD=AddToList&SEQ=&UIN=&UN=        $str = "VER=1.1&CMD=AddToList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin;        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //返回成功            switch($return["CD"])            {                case 0 :                    //对方允许任何人加为好友                    return QQ_ADDTOLIST_SUCCESS;                    break;                case 1 :                    //需要验证                    return QQ_ADDTOLIST_NEEDAUTH;                    break;                case 3 :                    //不允许任何人加为好友                    return QQ_ADDTOLIST_REFUSE;                    break;                default :                    //未知的代码                    return QQ_ADDTOLIST_UNKNOWN;                    break;            }        }        else        {            //返回失败            return QQ_RETURN_FAILED;        }    }

    function replyAdd($uin,$type,$msg)    {        //回应添加好友        //VER=1.1&CMD=Ack_AddToList&SEQ=&UIN=&UN=&CD=&RS=        //CD为响应状态,CD为0表示“通过验证”。CD为1表示“拒决加为对方为好友”。CD为2表示“为请求对方加为好友”。RS为你要请求的理由        $str = "VER=1.2&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin."&CD=".$type."&RS=".$this->gb2312_to_utf8($msg);        $return = $this->encode($this->query($str));                if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //服务器成功得到信息            return QQ_RETURN_SUCCESS;        }        else        {            //失败            return QQ_RETURN_FAILED;                    }    }

    function delFriend($uin)    {        //删除好友        //VER=1.1&CMD=DelFromList&SEQ=&UIN=&UN=        $str = "VER=1.1&CMD=DelFromList&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=$uin";        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //服务器成功得到信息            return QQ_RETURN_SUCCESS;        }        else        {            //失败            return QQ_RETURN_FAILED;        }    }

    function changeStatus($status)    {        //改变状态        //VER=1.1&CMD=Change_Stat&SEQ=&UIN=&ST=         //ST为要改变的状态,10为上线,20为离线,30为忙碌。        $str = "VER=1.1&CMD=Change_stat&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&ST=".$status;        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //服务器成功得到信息            return QQ_RETURN_SUCCESS;        }        else        {            //失败            return QQ_RETURN_FAILED;        }    }

    function logout()    {        //退出登陆        //VER=1.1&CMD=Logout&SEQ=&UIN=        $str = "VER=1.1&CMD=Logout&SEQ=".rand(1000,9000)."&UIN=".$this->uin;        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //服务器成功得到信息            return QQ_RETURN_SUCCESS;        }        else        {            //失败            return QQ_RETURN_FAILED;        }    }

    function getMsg()    {        //获得消息        //VER=1.1&CMD=GetMsgEx&SEQ=&UIN=        //MT表示消息类型,99表示系统消息,9表示用户消息。UN表示消息发送来源用户,MG表示发送的消息,MG消息可以表示某些特定的系统含意        //当MT=99时:MG=10表示用户上线,MG=20表示用户离线,MG=30表示用户忙碌        $str = "VER=1.1&CMD=GetMsgEx&SEQ=".rand(1000,9000)."&UIN=".$this->uin;        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //服务器成功得到信息            if($return["MN"] > 0)            {                //消息数>0                $mts = $this->split_str($return["MT"]);    //消息类型                $uns = $this->split_str($return["UN"]); //发送者号码                $mgs = $this->split_str($return["MG"]); //消息内容                $error = 0;                (count($mts)==count($uns))==(count($uns)==count($mgs))?                    $num = count($uns)                    :                    $error = 1;                ;                if($error == 1) return QQ_GETMSG_ERROR;    //出差错了                $arr = array();                for($i=0;$i<$num;$i++)                {                    $arr[] = array(                        "MT" => $mts[$i] ,                        "UN" => $uns[$i] ,                        "MG" => $this->utf8_to_gb2312($mgs[$i])                    );                }                return ($arr);            }            else            {                //在线好友数<=0                return QQ_GETMSG_NONE;            }        }        else        {            //失败            return QQ_RETURN_FAILED;        }    }

    function sendMsg($uin,$msg)    {        //发送消息        //VER=1.1&CMD=CLTMSG&SEQ=&UIN=&UN=&MG=         $str = "VER=1.1&CMD=CLTMSG&SEQ=".rand(1000,9000)."&UIN=".$this->uin."&UN=".$uin."&MG=".$this->gb2312_to_utf8($msg);        $return = $this->encode($this->query($str));        if($return["RES"]==0 and $return["UIN"] == $this->uin)        {            //服务器成功得到信息            return QQ_RETURN_SUCCESS;        }        else        {            //失败            return QQ_RETURN_FAILED;        }    }

}?>