成人午夜激情影院,小视频免费在线观看,国产精品夜夜嗨,欧美日韩精品一区二区在线播放

QQ的HTTP接口PHP探究

2010-08-28 10:55:38來源:西部e網(wǎng)作者:

  今天看到一同學寫的《QQ的HTTP接口PHP探究》這篇文章,詳盡的寫了QQ的HTTP接口操作的一些方法,希望利用HTTP接口做一些東西的朋友可以參考一下!

  1、研究說明

  Tencent在tqq.tencent.com的8000有一個使用HTTP的QQ接口,通過這個接口,可以進行一些基本的操作,如:登陸、登出、改變登陸狀態(tài)(上線、忙碌、離線、隱身)、添加刪除好友、查看好友信息、發(fā)送驗證信息(接受被加為好友、申請加對方為好友、拒絕被加為好友)、收發(fā)用戶消息、系統(tǒng)信息。

  目前我研究的是1.1版本的HTTP QQ協(xié)議,研究是微程在的成果上進行的,不敢說有什么超越,只不過更為詳細和準確。

  2、接口說明:

  接口位置:tqq.tencent.com:8000

  通信協(xié)議:HTTP

  數(shù)據(jù)傳輸方法:POST

  HTTP請求格式:

  POST HTTP/1.1

  Host: tqq.tencent.com:8000

  Content-Type: text/plain; charset=UTF-8

  Content-length: 長度

  Connection: close

  數(shù)據(jù)

  其中長度為 數(shù)據(jù) 的長度,數(shù)據(jù)的格式:

  VER=1.1&CMD=命令&SEQ=標記&UIN=QQ號&....

  以上4個參數(shù)是每個請求都必有的。其中,VER表示協(xié)議的版本,目前為1.1,據(jù)說1.2已經(jīng)出來了,這個亂寫的話,服務器返回 NULL;CMD為操作的指令,有Login、List、Query_Stat、GetInfo、AddToList、Ack_AddToList、 DelFromList、Change_Stat、GetMsgEx、CLTMSG、Logout;SEQ為當前請求的標記,防止重復發(fā)送,可以用當前時間,也可以用隨機數(shù);UIN是當前執(zhí)行操作的QQ號。不過不同的CMD還需要不同的參數(shù),下面我就公布我的研究成果。

  3、研究方法:

  我對目前網(wǎng)上的資料不夠滿意,就自己寫程序,發(fā)送多條相同CMD不同參數(shù)的請求,根據(jù)服務器的返回,來做判斷。感興趣的朋友可以參考一下,此處可以跳過。

  下面我公布我探測的代碼(PHP):

  $uin = "QQ號";

  $pwd = md5("QQ密碼");

  //登陸測試

  $poststring[] = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$uin."&PS=".$pwd."&M5=1&LC=9326B87B234E7235";

  //注意:登陸測試不能同時進行,必須等到服務器認為QQ斷開了,才能夠測試,不然結果不可信

  /*******

  $poststring[] = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$uin."&PS=".$pwd."&M5=0&LC=9326B87B234E7235";

  $poststring[] = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$uin."&PS=".$pwd."&M5=1&LC=9326B87B234E7235";

  $poststring[] = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$uin."&PS=".$pwd."&M5=2&LC=9326B87B234E7235";

  $poststring[] = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$uin."&PS=".$pwd."&M5=3&LC=9326B87B234E7235";

  $poststring[] = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$uin."&PS=".$pwd."&M6=1&LC=9326B87B234E7235";

  $poststring[] = "VER=1.1&CMD=Login&SEQ=".rand(1000,9000)."&UIN=".$uin."&PS=".$pwd."&M6=1&LC=1223423545756679";

  *******/

  //得到好友列表

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin;

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=160";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=0";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=".rand(1,10);

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=0";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=160&UN=0";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=160&UN=0";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=".rand(1,200)."&UN=0";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=".rand(1,200)."&UN=0";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=".rand(1,200)."&UN=0";

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=".rand(1,10);

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=".rand(1,10);

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=".rand(1,10);

  $poststring[] = "VER=1.1&CMD=List&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=106814";

  //得到在線列表

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin;

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=160";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=0";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=".rand(1,10);

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=0";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=160&UN=0";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=160&UN=0";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=".rand(1,200)."&UN=0";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=".rand(1,200)."&UN=0";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=".rand(1,200)."&UN=0";

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=".rand(1,10);

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=".rand(1,10);

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=".rand(1,10);

  $poststring[] = "VER=1.1&CMD=Query_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&TN=0&UN=106814";

  //查看好友信息

  $poststring[] = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$uin."&LV=0&UN=106814";

  $poststring[] = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$uin."&LV=1&UN=106814";

  $poststring[] = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$uin."&LV=2&UN=106814";

  $poststring[] = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$uin."&LV=3&UN=106814";

  $poststring[] = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$uin."&LV=4&UN=106814";

  $poststring[] = "VER=1.1&CMD=GetInfo&SEQ=".rand(1000,9000)."&UIN=".$uin."&LV=5&UN=106814";

  //增加好友

  $poststring[] = "VER=1.1&CMD=AddToList&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814";

  //發(fā)送驗證

  $poststring[] = "VER=1.1&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814&CD=0&RS=TEST";

  $poststring[] = "VER=1.1&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814&CD=1&RS=TEST";

  $poststring[] = "VER=1.1&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814&CD=2&RS=TEST";

  $poststring[] = "VER=1.1&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814&CD=3&RS=TEST";

  $poststring[] = "VER=1.1&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814&CD=4&RS=TEST";

  $poststring[] = "VER=1.1&CMD=Ack_AddToList&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814&CD=5&RS=TEST";

  //刪除好友

  $poststring[] = "VER=1.1&CMD=DelFromList&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814";

  //改變狀態(tài)

  for($i=0;$i<=60;$i=$i+5)

  {

  $poststring[] = "VER=1.1&CMD=Change_Stat&SEQ=".rand(1000,9000)."&UIN=".$uin."&ST=".$i;

  }

  //獲得消息

  $poststring[] = "VER=1.1&CMD=GetMsgEx&SEQ=".rand(1000,9000)."&UIN=".$uin."";

  //發(fā)送消息

  $poststring[] = "VER=1.1&CMD=CLTMSG&SEQ=".rand(1000,9000)."&UIN=".$uin."&UN=106814&MG=TEST";

  //登出

  $poststring[] = "VER=1.1&CMD=Logout&SEQ=".rand(1000,9000)."&UIN=".$uin."";

  $file = fopen("p.txt","w");

  foreach($poststring as $k=>$v)

  {

  ss_timing_start();

  $fp = fsockopen("tqq.tencent.com", "8000", $errno, $errstr, $timeout = 10);

  if(!$fp){

  //error tell us

  $content = $k.chr(13).chr(10)."ERROR:$errstr ($errno)";

  }else{

  //send the server request

  fputs($fp, "POST HTTP/1.1 ");

  // fputs($fp, "Host: $host ");

  // fputs($fp, "Content-type: application/x-www-form-urlencoded ");

  fputs($fp, "Content-length: ".strlen($v)." ");

  fputs($fp, "Connection: close ");

  fputs($fp, $v . " ");

  //loop through the response from the server

  $res = "";

  while(!feof($fp)) {

  $res .= fgets($fp, 4096);

  }

  //close fp - we are done with it

  fclose($fp);

  $content = $v.chr(13).chr(10).$res;

  }

  ss_timing_stop();

  $content .= chr(13).chr(10)."Time: ".ss_timing_current().chr(13).chr(10)."--------------------------------------".chr(13).chr(10);

  fputs($file,$content);

  }

  fclose($file);

  ?>

  function ss_timing_start ($name = "default") {

  global $ss_timing_start_times;

  $ss_timing_start_times[$name] = explode(" ", microtime());

  }

  function ss_timing_stop ($name = "default") {

  global $ss_timing_stop_times;

  $ss_timing_stop_times[$name] = explode(" ", microtime());

  }

  function ss_timing_current ($name = "default") {

  global $ss_timing_start_times, $ss_timing_stop_times;

  if (!isset($ss_timing_start_times[$name])) {

  return 0;

  }

  if (!isset($ss_timing_stop_times[$name])) {

  $stop_time = explode(" ", microtime());

  }

  else {

  $stop_time = $ss_timing_stop_times[$name];

  }

  $current = $stop_time[1]-$ss_timing_start_times[$name][1];

  $current += $stop_time[0]-$ss_timing_start_times[$name][0];

  return $current;

  }

  ?>

  4、研究成果:

  (1).登陸

  說明:在你做任何其他操作以前,你必須登陸。只有在登陸以后,你的其他指令才有可能被正確執(zhí)行(返回RES=0),不然服務器會返回 RES=20,不過有個例外,就是logout。當你成功登陸以后,服務器就會根據(jù)你的IP*和參數(shù)中的UIN來驗證身份。一臺電腦可以同時登陸多個 QQ,互不影響,就是因為有參數(shù)UIN。

  *至于我能夠確定服務器是通過IP來驗證的,是因為服務器不可能通過我的請求獲得其他信息了^_^

  提交數(shù)據(jù):VER=1.1&CMD=Login&SEQ=標記&UIN=QQ號&PS=QQ密碼& M5=1&LC=9326B87B234E7235

  說明:QQ密碼是通過md5加密的字符串,在PHP中可以直接用md5()進行加密;

  M5這個參數(shù)的作用還不清楚,但最好為1。

  LC這個參數(shù)有點神秘,不能有絲毫改動,不然服務器就沒有響應(沒有響應就是返回NULL)。

  返回:VER=1.1&CMD=LOGIN&SEQ=標記&UIN=QQ號&RES=0&RS=0& amp;HI=60&LI=300(成功)

  VER=1.1&CMD=LOGIN&SEQ=標記&UIN=QQ號&RES=0&RS=1& amp;RA=密碼錯誤(密碼錯誤)

  VER=1.1&CMD=LOGIN&SEQ=標記&UIN=QQ號&RES=5(QQ號非法,如100)

  NULL(UIN為字符、PS為空、LC錯誤)

  (2).得到好友列表

  提交數(shù)據(jù):VER=1.1&CMD=List&SEQ=標記&UIN=QQ號&TN=160& UN=0

  說明:TN、UN還不清楚具體表示什么,但是TN的值會影響返回的結果,有沒有UN對結果沒有影響

  返回:VER=1.1&CMD=LIST&SEQ=標記&UIN=QQ號&RES=0&FN=9(當 TN=0或沒有TN參數(shù)時,F(xiàn)N表示好友數(shù))

  VER=1.1&CMD=LIST&SEQ=標記&UIN=QQ號&RES=0&FN=1& SN=9&UN=3814526,...,(當TN存在且非0時,F(xiàn)N=1,SN表示好友數(shù),UN為好友列表,用","分割)

  VER=1.1&CMD=LIST&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN、TN、UN為字符)

  (3).得到在線好友列表

  提交數(shù)據(jù):VER=1.1&CMD=Query_Stat&SEQ=標記&UIN=QQ號&TN=50& amp;UN=0

  說明:TN、UN還不清楚具體表示什么,但是TN的值會影響返回的結果,有沒有UN對結果沒有影響

  返回:VER=1.1&CMD=QUERY_STAT&SEQ=標記&UIN=QQ號&RES=0& FC=0,&FN=1&SN=1&ST=10,&UN=106814,&NK=Hackfan 好,(當TN存在且非0時,F(xiàn)N=1,SN表示在線好友數(shù),F(xiàn)C、ST、UN、NK的值用","分割,分別表示頭像、狀態(tài)、號碼、昵稱)

  VER=1.1&CMD=QUERY_STAT&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN、TN、UN為字符)

  說明:FC為QQ頭像的的ID,如的頭像ID為270,那么其頭使用的圖片為91.bmp,其算法為ID/3+1;

  ST為QQ用戶的狀態(tài),10為上線,20為離線(或隱身),30為忙碌;

  特別說明:當參數(shù)TN=0或不存在時,服務器返回:

  VER=1.1&CMD=Query_Stat&SEQ=標記&UIN=QQ號

  HTTP/1.1 200 OK

  Server: tencent imserver/1.0.0

  Content-Type: text/plain; charset=UTF-8

  Content-Length: 56

  VER=1.1&CMD=QUERY_STAT&SEQ=標記&UIN=QQ號&RES=0& FN=1

  HTTP/1.1 200 OK

  Server: tencent imserver/1.0.0

  Content-Type: text/plain; charset=UTF-8

  Content-Length: 77

  VER=1.1&CMD=QUERY_STAT&SEQ=標記&UIN=QQ號&RES=0& FC=&FN=1&SN=0&ST=&UN=&NK=

  返回了2次,第一次的結果中,F(xiàn)N為在線好友數(shù),第二次返回的數(shù)據(jù)基本沒用。

  (4).查看好友信息

  提交數(shù)據(jù):VER=1.1&CMD=GetInfo&SEQ=標記&UIN=QQ號&LV=查詢類型& amp;UN=被查詢QQ號碼

  說明:LV=0,1為精簡查詢,LV=2為普通查詢,LV>=3為詳細查詢

  返回:VER=1.1&CMD=GETINFO&SEQ=標記&UIN=QQ號&RES=0& LV=0&UN=106814&NK=Hackfan 好(精簡查詢)

  VER=1.1&CMD=GETINFO&SEQ=標記&UIN=QQ號&RES=0&AD=地址& amp;AG=19&EM=hackfan@qq.com&FC=0&HP=http://blog.hackfan.net& amp;JB=學生

  &LV=2&PC=郵編&PH=電話&PR=The guy is updating to .NET Frameword......&PV=江蘇&RN=胡吉陽&SC=畢業(yè)院校&SX=0&UN=106814& amp;NK=Hackfan

  好(普通查詢)

  VER=1.1&CMD=GETINFO&SEQ=標記&UIN=QQ號&RES=0&AD=地址& amp;AG=19&BT=2&CO=6&CT=蘇州&CV=%01&CY=中華人民共和國

  &EM=hackfan@qq.com&FC=0&HP=http://blog.hackfan.net& ID=-&JB=學生&LV=3&MO=136********&MT=0&MV=&PC=郵編& amp;PH=電話&PR=The guy is

  updating to .NET Frameword......&PV=江蘇&RN=胡吉陽&SC=畢業(yè)院校&SH=3&SX=0& UN=106814&NK=Hackfan 好(詳細查詢)

  VER=1.1&CMD=GETINFO&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN、LV、UN為字符)

  說明:AD為聯(lián)系地址

  AG為年齡

  BT為血型

  CO為星座

  CT為城市

  CV為未知*

  CY為國家

  EM為Email

  FC為頭像

  HP為網(wǎng)站

  ID為未知

  JB為職業(yè)

  LV為查詢代碼(就是發(fā)送的LV)

  MO為移動電話

  MT為未知

  MV為未知

  PC為郵編

  PH為聯(lián)系電話

  PR為簡介

  PV為省

  RN為真實姓名

  SC為畢業(yè)院校

  SH為生肖

  SX為性別

  UN為QQ號

  NK為昵稱

  血型:0 => "",

  1 => "A型",

  2 => "B型",

  3 => "O型",

  4 => "AB型",

  5 => "其他"

  星座:0 => "",

  1 => "水瓶座",

  2 => "雙魚座",

  3 => "牡羊座",

  4 => "金牛座",

  5 => "雙子座",

  6 => "巨蟹座",

  7 => "獅子座",

  8 => "處女座",

  9 => "天秤座",

  10 => "天蝎座",

  11 => "射手座",

  12 => "摩羯座"

  生肖:0 => "",

  1 => "鼠",

  2 => "牛",

  3 => "虎",

  4 => "兔",

  5 => "龍",

  6 => "蛇",

  7 => "馬",

  8 => "羊",

  9 => "猴",

  10 => "雞",

  11 => "狗",

  12 => "豬"

  性別:0 => "男",

  1 => "女"

  (5).增加好友

  提交數(shù)據(jù):VER=1.1&CMD=AddToList&SEQ=標記&UIN=QQ號&UN=對方QQ號

  返回:VER=1.1&CMD=AddToList&SEQ=標記&UIN=QQ號&RES=0& CD=0&UN=對方QQ號(允許被加為好友,此時他已經(jīng)是你的好友)

  VER=1.1&CMD=AddToList&SEQ=標記&UIN=QQ號&RES=0& CD=1&UN=對方QQ號(需要驗證)

  VER=1.1&CMD=AddToList&SEQ=標記&UIN=QQ號&RES=0& CD=2&UN=對方QQ號(決絕被加為好友)

  VER=1.1&CMD=AddToList&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN、UN為字符)

  (6).發(fā)送驗證

  說明:1、如果你加對方為好友,你需要發(fā)送驗證

  2、對方加你為好友,發(fā)送了驗證,你要通過或者拒絕

  這2種情況需要發(fā)送驗證消息

  提交數(shù)據(jù):VER=1.1&CMD=Ack_AddToList&SEQ=標記&UIN=QQ號&UN=對方 QQ號&CD=驗證類型&RS=理由

  說明:CD為0表示“通過驗證”,CD為1表示“拒決加為對方為好友”,CD為2表示“為請求對方加為好友”。

  返回:VER=1.1&CMD=Ack_AddToList&SEQ=標記&UIN=QQ號&RES=0(成功)

  VER=1.1&CMD=Ack_AddToList&SEQ=標記&UIN=QQ號&RES=3(*)

  VER=1.1&CMD=Ack_AddToList&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN、UN、CD為字符,RS為非UTF-8字符)

  *如果服務器返回RES=3,那么這次對話的響應時間在20s。當發(fā)送驗證請求的時候,必須連發(fā)2次(請求內容不必一樣),其中一條 RES=3,對方收不到,一條RES=0,對方能夠收到。當CD>=3時,RES=3,響應時間20s。

  (7).刪除好友

  提交數(shù)據(jù):VER=1.1&CMD=DelFromList&SEQ=標記&UIN=QQ號&UN=刪除的 QQ號

  返回:VER=1.1&CMD=DelFromList&SEQ=標記&UIN=QQ號&RES=0& amp;(成功)

  VER=1.1&CMD=DelFromList&SEQ=標記&UIN=QQ號&RES=3(響應時間 30s,重復發(fā)送的后果)

  VER=1.1&CMD=DelFromList&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN、UN為字符)

  (8).改變狀態(tài)

  提交數(shù)據(jù):VER=1.1&CMD=Change_Stat&SEQ=標記&UIN=QQ號&ST=狀態(tài)代碼

  說明:狀態(tài)代碼:10為上線,20為離線,30為忙碌,40為隱身,其他視為非法

  返回:VER=1.1&CMD=Change_Stat&SEQ=標記&UIN=QQ號&RES=0& amp;(成功)

  VER=1.1&CMD=Change_Stat&SEQ=標記&UIN=QQ號&RES=3(失敗,原因不明,響應時間20s,可能是過于頻繁的改變狀態(tài)引起的)

  VER=1.1&CMD=Change_Stat&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN為字符,ST非法)

  特別說明:如果你改變好友,將會給所有好友發(fā)送一條系統(tǒng)信息,內容就是狀態(tài)代碼;如果隱身,發(fā)送的狀態(tài)代碼為20,表示離線。

  同理,當你的好友改變狀態(tài),你也會收到一條系統(tǒng)信息。

  (9).獲得消息

  提交數(shù)據(jù):VER=1.1&CMD=GetMsgEx&SEQ=標記&UIN=QQ號

  返回:VER=1.1&CMD=GETMSGEX&SEQ=標記&UIN=QQ號&RES=0& MN=4&MT=99,99,99,9,&UN=36791785,99833581,99833581,106814,&MG=20,30,10,hi ,(MN表示信息數(shù)量,MT、UN、MG的值用","分割,分別表示消息類型、發(fā)送人號碼、消息內容)

  VER=1.1&CMD=GETMSGEX&SEQ=標記&UIN=QQ號&RES=0&MN=0& amp;MT=&UN=&MG=(表示沒有信息)

  VER=1.1&CMD=GETMSGEX&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN為字符)

  說明:關于MT:

  9為用戶消息,99為系統(tǒng)消息,2為請求信息,3為通過驗證,4為拒絕被加好友

  關于MG:

  當MT=9時,MG為用戶發(fā)送的消息內容

  當MT=99時,

  MG=10(QQ_STATUS_ONLINE)表示對方上線

  MG=20(QQ_STATUS_OFFLINE)表示對方下線

  MG=30(QQ_STATUS_BUSY)表示對方進入忙碌狀態(tài)

  當MT=2時,MG為對方請求你驗證的信息

  當MT=3時,表示對方通過你的驗證

  當MT=4時,MG為對方拒絕你理由

  當對方發(fā)送的消息過長時,服務器會自動截成幾段,每段最多400個字節(jié)。完整的信息最后將有一個空格。

  比如,我發(fā)送401個"A"的信息,接受的時候,服務器返回:

  VER=1.1&CMD=GETMSGEX&SEQ=標記&UIN=QQ號&RES=0&MN=2& amp;MT=9,9,&UN=106814,106814,&MG=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,A ,

  比如,我發(fā)送400個"A"的信息,接受的時候,服務器返回:

  VER=1.1&CMD=GETMSGEX&SEQ=標記&UIN=QQ號&RES=0&MN=2& amp;MT=9,9,&UN=106814,106814,&MG=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA,A ,

  比如,我發(fā)送399個"A"的信息,接受的時候,服務器返回:

  VER=1.1&CMD=GETMSGEX&SEQ=標記&UIN=QQ號&RES=0&MN=1& amp;MT=9,9,&UN=106814,&MG=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA ,

  (10).發(fā)送消息

  提交數(shù)據(jù):VER=1.1&CMD=CLTMSG&SEQ=標記&UIN=QQ號&UN=對方QQ號& amp;MG=發(fā)送內容

  說明:發(fā)送內容的長度應小于400字節(jié)

  返回:VER=1.1&CMD=CLTMSG&SEQ=標記&UIN=QQ號&RES=0&(成功發(fā)送,對方不一定能收到哦)

  VER=1.1&CMD=CLTMSG&SEQ=標記&UIN=QQ號&RES=3(發(fā)送過快或者內容超長& gt;400個字節(jié))

  VER=1.1&CMD=CLTMSG&SEQ=標記&UIN=QQ號&RES=20(沒有正確登陸)

  NULL(UIN、UN為字符,MG含非UTF-8字符)

  說明:1、當你發(fā)消息時,以下情形對方可能看不到(其實是收到了,QQ不提示)你發(fā)送的消息:

  你倆互為陌生人,且對方?jīng)]有和你說過話

  你在他的陌生人列表里,并且他沒有和你說過話(沒有驗證)

  2、當你過快發(fā)送消息時,系統(tǒng)會給你一個懲罰,RES=3,相應時間20s

  3、當我發(fā)送含有小寫字母h的信息時,服務器有可能返回NULL

  4、過長的消息需要分段發(fā)送,當消息長度超過400字節(jié)的時候,服務器返回RES=3

  (11).登出

  提交數(shù)據(jù):VER=1.1&CMD=Logout&SEQ=標記&UIN=QQ號

  返回:VER=1.1&CMD=LOGOUT&SEQ=標記&UIN=QQ號&RES=0(成功,好像永遠成功的,不管你是否登陸)

  NULL(UIN為字符)

  5、總結

  通過對照以上的接口說明,我開發(fā)出了能夠實現(xiàn)基本QQ功能的PHP類,它整合了以上所有的接口,使用更方便,可以開發(fā)QQ機器人、群發(fā)廣告程序等。

關鍵詞:QQphp
主站蜘蛛池模板: 河东区| 古浪县| 班玛县| 信宜市| 黑河市| 探索| 黄龙县| 琼海市| 金坛市| 葫芦岛市| 六盘水市| 淅川县| 托克逊县| 宿迁市| 齐河县| 河东区| 贵南县| 三都| 平泉县| 安庆市| 平邑县| 南宫市| 旌德县| 县级市| 哈尔滨市| 红安县| 郓城县| 信丰县| 濉溪县| 汉沽区| 贵定县| 安阳县| 新乐市| 仁化县| 牡丹江市| 邵阳市| 文化| 肃宁县| 尚志市| 商水县| 红安县|