QQ API 接口

1、找寻支持 QQ HTTP 协议的服务器。 大家也许会被一些假像所迷惑,也许会认为 QQ 的 HTTP 服务器是基于 80  口进行通信的(如:218.17.209.23: 80) ,其实不然,正真基于 HTTP 的服务器应该是:http:  //tqq.tencent.com:8000, 它是一个通过 8000 口进行 通讯的服务器。 由于 QQ 的 HTTP 服务器并不支持 HTTP 协议中  GET 方 法, 它支持 POST 方法。 所以我们要给 QQ 的 HTTP 协议 传参数,那么就必需要用 POST 方式才行。

2、C#和 DELPHI  是实现 HTTP 的 POST 方法的通信。 C#: C#里 System.Web 空间下提供了一个叫做 WebClien t 的对象, 使用此对象就可以使  C#直接对服务器发送 WE B 客户端的请求。 那么我们要对服务器提交 POST 方法那 么就必须使用其 UploadData()方法才行。首先把要请求  的信息先转换为字节(因为 POST 提交的是字符的流数 据) ,然后再做为 UploadData()的参数。使用 UploadD  ata()进行数据提交,最后返回,POST 的回馈信息。如 下: WebClient _client = new WebClient(); string  postValues = "VER=1.0&CMD=Query_S  tat&SEQ=12321&UIN=29501213&TN=50&UN= 0"; Byte[] byteArray =  System.Text.Encoding.ASC II.GetBytes(postValues); Byte[] pageData =  _client.UploadData(Host,"P OST",byteArray); 这样,我们就利用 C#进行了一次 HTTP 的 POST 方法  提交了。
值在传入、返回时,其是基于 UTF-8 进行的,C#显示 中文是很常.

3、实现 QQ 的用户登录。 在 QQ  通信中用户必需要登录后才可以进行互相发送信 息等。QQ 的登录是很关键的,大家所看到的用户在线, 并不是用户的 QQ 一直连接着服务器,而是定时发送消  信给服务器,证明自己还连着线,如果超出时间 QQ 就 认为用户已经掉线了。 在登录协议中, 的密码是用标准的 MD5 来进行加密, QQ 而  C#自已带有,但是直接用不了,必需进行处理后,才 能使其变成标准的 MD5,处理代码如下:
public static string MD5(string  toCryS tring) { MD5CryptoServiceProvider hashmd5; hashmd5 = new M  D5CryptoServiceProvider(); return BitConverter.ToString(hashmd5.ComputeH  ash(Encoding.Default.GetBytes(toCryString))).Re place("-","").ToLower();//asp  是小写,把所有字符变 小写 } 了解 QQ 是如何对用户密码加密后,那么我们就开始真 正,解析 QQ 的 HTTP 登录协议了,我们把协议当传 PO ST  的参数传给服务器,而服务器则回馈相应的信息给客 户端:  传入协议:
VER=1.1&CMD=Login&SEQ=&UIN=&PS=&M5  =1&LC=9326B87B234E7235 VER 是用来说明 QQ 协议的版本,CMD 是说明协议的 命令,Login 就是指 QQ  的登录了,SEQ 是他的为了防 止重复发送而设定的一个标记,一般我们取当前时间数 值的一段放入即可。(C#:DateTime.Now.Ticks.To  String().Substring(7,7) DELPHI:CopyStr(inttost r(GetTickCount()),1,5)),UIN  是说明你当前要登录 的用户 QQ 号,PS,是 MD5 加密过后的密码的值。 返回协议:  VER=1.1&CMD=Login&SEQ=11281&UIN=&RE  S=0&RS=0&HI=60&LI=300(成功) RES 为 0 表示成功返回,RS 为 0 表示登录成功。  VER=1.1&CMD=Login&SEQ=11422&UIN=315  103947&RES=0&RS=1&RA=登录失败 RS 为 1 表示登录失败, 那么就会出现提示信息 RA 说明  原因。
4、获得 QQ 名单。 如果您加了您的好友,那么您的好友就会放入你的 QQ 的好友名单里面,那么我们要得到 QQ 名单就必需给 Q Q  服务器发送得到好友名单的协议(我就不从复已知的 参数了):  VER=1.1&CMD=List&SEQ=&UIN=&TN=160&U N=0 服务器得到协议后如果成功则返回:  VER=1.1&CMD=LIST&SEQ=43661&UIN=2950  1213&RES=0&FN=1&SN=24&UN=561256,1943 497,....
UN 后面则是您好友的 QQ  号码,每个号码都由,进行分 开。那么我们只需要得到 UN 后面的代码,把它列表化 就 OK 了。C#可以用 string.Split(‘,‘)把值放入列表进  行处理,而 DELPHI 可以使用 Split()把数值放入 TStri ngs 里进行处理。

5、获得 QQ 好友在线名单 获得 QQ  好友在线名单,跟获得好友名单差不多,唯一 不同的是用的命令不同用的是 Query_Stat,协议如下:  VER=1.1&CMD=Query_Stat&SEQ=&UIN=&TN =50&UN=0  服务器得到协议后如果成功则返回: VER=1.1&CMD=QUERY_STAT&  SEQ=-1&UIN=29501213&RES=0&FC=141,270,2  70,&FN=1&SN=3&ST=10,10,10,&UN= FC 为 QQ 头像的的 ID, 如的头像 ID 为 270,  那么其头 使用的图片为 91.bmp,其算法为 ID/3+1。ST 为 QQ 用户的状态,10 为上线,20 为离线,30 为忙碌。UN 为在线用户的 QQ  号,NK 为在线用户的 QQ 昵称。ST, UN,NK,每个逗号隔开的数据相互对应。

6、得到 QQ 用户的信息。 如果要看到 QQ  用户的真实名称,MAIL,年龄,个人说 明等信息,那么我们必需要向服务器发送得到好友信息 的信息:  VER=1.1&CMD=GetInfo&SEQ=&UIN=&LV=2& UN= UN 为要查看用户信息的 QQ 号。  服务器得到协议后如果成功则返回:
VER=1.1&CMD=GETINFO&SEQ=12707&UIN=4  15103947&RES=0&AD=云南昆明&AG=0&EM=Mi  [email protected]&FC=270&HP=msg  er.org(建设中...)&JB=程序员&LV=2&PC=650000 & PH=0871-6466529&PR=网络为媒%252c 关系为 本%252c 信息为财%252c 客户为主.%0d%0a&PV=  云南省&RN=刘 X&SC=社会大学&SX=0&UN=2425 9132&NK=微程 AD 用户的联系地址,AG  为用户年龄,EM 为用户 MAI L,FC 为用户头像,HP 为用户网站,JB 为用户职业,P C 为用户邮编,PH 为用户联系电话,PR 为用户简介,P V  为用户所以的省,RN 为用户真实名称,SC 为用户毕 业院校,SX 为用户性别,UN 为用户 QQ 号,NK 为用 户 QQ 昵称。 7、增加 QQ 好友。  想要新增好友,就要发送 AddToList 命令给服务器,具 体命令如下:  VER=1.1&CMD=AddToList&SEQ=&UIN=&UN= UN 为我们要增加用户的 QQ 号。  服务器得到协议后如果成功则返回: VER=1.1&CMD=AddToList&SEQ=13666&UIN=4  15103947&RES=0&CD=0&UN=24259132 CD 为被加 QQ 的身份验证状态,CD 为 0 表示“允许任  何人把我列为好友”,CD 为 1 表示“需要身份证认才能 把我列为好友”,CD 为 3 表示“不允许任何人把我列为 好友”。如果 CD 为 0  那么信息回馈后,用户就直接加 为好友了, 如果 CD 为 1, 那么还要发送一次回应加为好 友的响应。

8、回应加为好友的响应。
回应加为好友响应是双方的:1、如果你发送了请求加对 方为好友,如果对方需要验证,那么必需发送回应加为  好友的响应。2、如果对方发送加为好友请求给你,那么 你可以加应加为好友的响应,一是加为好友,一是通过 验证,一是拒决加为好友。我们要向服务器发送命令:  VER=1.1&CMD=Ack_AddToList&SEQ=&UIN=&U N=&CD=&RS= CD 为响  应状态,CD 为 0 表示“通过验证” 。CD 为 1 表示“拒决 加为对方为好友” CD 为 2 表示 。 “为请求对方加为好友” 。 RS  为你要请求的理由. 服务器得到协议后如果成功则返回: VER=1.1&CMD=Ack_AddToList&SEQ=1130&UI  N=415103947&RES=0&

9、删除好友。 删除好友其实很容易,向服务器发送 DelFromList 命令 则可以删除用户:  VER=1.1&CMD=DelFromList&SEQ=&UIN=&UN = UN 为要删除用户的 QQ 号。  服务器得到协议后如果成功则返回: VER=1.1&CMD=DelFromList&SEQ=24514&UIN  =415103947&RES=0&

10、改变用户当前状态。 可以把 QQ 设置为在线,隐身等状态,我们可以发送 Ch ange_Stat  给服务器以改变当前状态,具体命令如下: VER=1.1&CMD=Change_Stat&SEQ=&UIN=&ST =
ST  为要改变的状态,10 为上线,20 为离线,30 为忙 碌。 服务器得到协议后如果成功则返回:  VER=1.1&CMD=Change_Stat&SEQ=17512&UIN =415103947&RES=0&

11、退出登录 要退出登录,要向服务器发送命令 Logout,具体命令如 下: VER=1.1&CMD=Logout&SEQ=&UIN=  服务器得到协议后如果成功则返回: VER=1.1&CMD=LOGOUT&SEQ=15803&UIN=41  5103947&RES=0

12、获得好友 QQ 的消息 如果要接收好友的消息, 要向服务器发送命令 GetMsgE x,具体命令如下:  VER=1.1&CMD=GetMsgEx&SEQ=&UIN= 服务器得到协议后如果成功则返回:  VER=1.1&CMD=GETMSGEX&SEQ=56661&UIN=  29501213&RES=0&MN=3&MT=99,9,9,&UN=24  259132,24259132,24259132,&MG=30 ,asdfasd fasdfasdf ,asdfasdfasdf ,& MT  表示消息类型,99 表示系统消息,9 表示用户消息。 UN 表示消息发送来源用户,MG 表示发送的消息,MG 消息可以表示某些特定的系统含意, 譬如: MT 为  99, 当 MG 为 30, 为 24259132 则表示用户 4259132 现 UN 在处于忙碌状态,可根据此消息进行好友列表的刷新, 提高效率。

13、向好友 QQ 发送消息
要发送消息给好友,要向服务器发送命令 CLTMSG 命 令,具体命令如下:  VER=1.1&CMD=CLTMSG&SEQ=&UIN=&UN=&M G= UN 为消息发送给的用户 QQ 号码, MG  为发送给该用户 的消息。 服务器得到协议后如果成功则返回: VER=1.1&CMD=CLTMSG&SEQ=15  803&UIN=415103947&RES=0 好了,以上就是 QQ 基于 HTTP 的一个不完全的协议分  析,利用以上协议您就可以实现很多东西,如:QQ 机器 人,QQ 广告系统,即时通讯的整合工具等等 QQ 协议网络协议--请求部份
//登录  VER=1.0&CMD=Login&SEQ=&UIN=&PS=&M5=  1&LC=9326B87B234E7235 //获取消息 VER=1.0&CMD=GetMsgEx&SEQ=&UIN=  //发送消息 VER=1.0&CMD=CLTMSG&SEQ=&UIN=&UN=&M G= //朋友列表  VER=1.0&CMD=List&SEQ=&UIN=&TN=160&UN =0 //获取好友状态  VER=1.0&CMD=Query_Stat&SEQ=&UIN=&TN= 50&UN=0
//获取好友信息  VER=1.0&CMD=GetInfo&SEQ=&UIN=&LV=2&U N= //增加好友  VER=1.0&CMD=AddToList&SEQ=&UIN=&UN= //回应对方请求加你为好友的响应  VER=1.0&CMD=Ack_AddToList&SEQ=&UIN=&U N=&CD=&RS= //删除好友  VER=1.0&CMD=DelFromList&SEQ=&UIN=&UN = //搜索好友  VER=1.0&CMD=Finger&SEQ=&UIN=&AG=&SX =&PV= //改变自己状态,ST  的代码应该和获取好友状态代码一 致 VER=1.0&CMD=Change_Stat&SEQ=&UIN=&ST = //退出登录  VER=1.0&CMD=Logout&SEQ=&UIN=

时间: 2024-10-11 13:49:23

QQ API 接口的相关文章

总结的一些微信API接口

本文给大家介绍的是个人总结的一些微信API接口,包括微信支付.微信红包.微信卡券.微信小店等,十分的全面,有需要的小伙伴可以参考下. 1. [代码]index.php <?php include_once 'lib.inc.php';   $wcObj = new WeChat("YOUKUIYUAN"); $wcObj->wcValid(); 2. [代码]微信入口类 <?php /**  * Description of wechat  *  * @author

微信红包API接口(PHP)

发布时间:2015年2月25日 / 分类:WEB开发,PHP / 74,825 / 241 ℃ 根据微信高级红包接口,开发PHP版本的API接口,现在进行主要代码分析. 红包接口调用请求代码,所有请求参数为必填参数与文档对应: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 class Wxapi {     private $a

(微信API接口开发) 使用HttpWebRequest进行请求时发生错误:基础连接已关闭,发送时发生错误处理

最近调试原来的微信模拟登陆时发生了"基础连接已关闭,发送时发生错误"的错误提示,原来都是好好的,只是很久没用了. 出错代码如下: ? 1 2 3 4 5 6 7 HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN");///cgi-bin/loginpage?

聊聊 PHP 与手机 APP 开发(API 接口开发)

对于新手开发api接口的一探讨 一.先简单回答两个问题: 1.PHP 可以开发客户端?答:不可以,因为PHP是脚本语言,是负责完成 B/S架构 或 C/S架构 的S部分,即:服务端的开发.(别去纠结 GTK.WinBinder) 2.为什么选择 PHP 作为开发服务端的首选?答:跨平台(可以运行在UNIX.LINUX.WINDOWS.Mac OS下).低消耗(PHP消耗相当少的系统资源).运行效率高(相对而言).MySQL的完美搭档,本身是免费开源的,...... 二.如何使用 PHP 开发 A

微信小程序+OLAMI(欧拉蜜)自然语言API接口制作智能查询工具--快递、聊天、日历等

微信小程序最近比较热门,再加上自然语义理解也越来越被人关注,于是我想赶赶潮流,做一个小程序试试.想来想去快递查询应该是一种比较普遍的需求. 如果你也在通过自然语言接口做点什么,希望我的这篇博客能帮到你.我建了一个QQ群656580961,感兴趣的朋友可以加入互通有无.或者你也可以直接下载代码试一试. 用微信扫描下面的二维码可以直接测试小程序 也可以通过关注下面的公众号,点解工具使用小程序 ----------------功能介绍: 我的小程序名字叫"智能生活宝"------------

快递鸟物流查询API接口对接案例

下面是以快递鸟提供的开发者接口进行展开,如有错误,请指正并及时修改. 首先,申请一个快递鸟的账号: 然后进入http://www.kdniao.com/reg界面点击免费申请,免费申请的接口每天接口的请求次数都是没有限制的,超过3000次/每天需接入订阅推送接口. 按照申请流程一步步做完后,即可对接. 注册信息必须填写正确,如果有误可能导致接口无法正常使用.   使用 案例分为3个 使用的是Chrome的postman插件进行Api测试调用 使用JAVA环境进行快递查询 使用.net环境进行快递

几种常用的医院地图API接口地址—百度地图

几种常用的医院地图API接口地址,医疗网站上经常使用的来院路线地图,调用第三方平台提供的地图接口,下面是医疗模板库为大家收集整理的几种常用的地图API接口. 1.百度地图: 网址:http://api.map.baidu.com/lbsapi/creatmap/index.html 2.搜狗地图: 网址:http://map.sogou.com/mark/?app=card 3.图吧: 网址:http://union.mapbar.com/onlineTagging.jsp 4.腾讯地图: 网址

Web API接口设计经验总结

在Web API接口的开发过程中,我们可能会碰到各种各样的问题,我在前面两篇随笔<Web API应用架构在Winform混合框架中的应用(1)>.<Web API应用架构在Winform混合框架中的应用(2)--自定义异常结果的处理>也进行了总的介绍,在经过我的大量模块实践并成功运行后,总结了这篇随笔,希望对大家有所帮助. 1.在接口定义中确定MVC的GET或者POST方式 由于我们整个Web API平台是基于MVC的基础上进行的API开发,因此整个Web API的接口,在定义的时

移动共享开发(六)授权API接口和分享API接口

新浪微博.腾讯微博.豆瓣.人人网.QQ在执行分享前需要先进行授权操作, 其他平台可以直接调用分享API接口. 授权接口 ( doOauthVerify ) 授权接口以新浪为例,添加下面的代码: 注意在授权前先检查是否已经授权过,重复授权有可能引起错误 OauthHelper.isAuthenticated(mContext,SHARE_MEDIA.SINA) 确保未授权,则先调用下面的代码 mController.doOauthVerify(mContext, SHARE_MEDIA.SINA,