php教程

超轻量级php框架startmvc

朋友网关于QQ相关的PHP代码(研究QQ的绝佳资料)

更新时间:2020-03-02 15:39:05 作者:startmvc
<?/*******************************************************************************/error_reporting(E_ALL^E_NOTICE


<?
/***************************************

****************************************/ 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;         }     }

} ?>

QQ PHP代码