微信协议详解

互联网 17-5-6

微信web协议分析(微信网页版 wx2.qq.com)

1.打开首页,分配一个随机uuid,2.根据该uuid获取二维码图片。3.微信客户端扫描该图片,在客户端确认登录。4.浏览器不停的调用一个接口,如果返回登录成功,则调用登录接口5.此时可以获取联系人列表,可以发送消息。然后不断调用同步接口。6.如果同步接口有返回,则可以获取新消息,然后继续调用同步接口。

源码地址:github.com/biezhi/wechat-robot

执行流程

       +--------------+     +---------------+   +---------------+         |              |     |               |   |               |         |   Get UUID   |     |  Get Contact  |   | Status Notify |         |              |     |               |   |               |         +-------+------+     +-------^-------+   +-------^-------+                 |                    |                   |                 |                    +-------+  +--------+                 |                            |  |         +-------v------+               +-----+--+------+      +--------------+         |              |               |               |      |              |         |  Get QRCode  |               |  Weixin Init  +------>  Sync Check  <----+         |              |               |               |      |              |    |         +-------+------+               +-------^-------+      +-------+------+    |                 |                              |                      |           |                 |                              |                      +-----------+                 |                              |                      |         +-------v------+               +-------+--------+     +-------v-------+         |              | Confirm Login |                |     |               |  +------>    Login     +---------------> New Login Page |     |  Weixin Sync  |  |      |              |               |                |     |               |  |      +------+-------+               +----------------+     +---------------+  |             |  |QRCode Scaned|  +-------------+

WebWechat API

1. 获取UUID(参考方法 getUUID)

API获取 UUID
urlhttps://login.weixin.qq.com/jslogin
methodGET
dataURL Encode
paramsappid : wx782c26e4c19acffb fun : new lang: zh_CN _ : 时间戳

返回数据(String):

window.QRLogin.code = 200; window.QRLogin.uuid = "xxx"

2. 显示二维码(参考方法 showQrCode)

API显示二维码
urllogin.weixin.qq.com/qrcode/{uuid}
methodPOST
paramst : webwx <br/> _ : 时间戳
API二维码扫描登录
urllogin.weixin.qq.com/cgi-bin/mmwebwx-bin/login
methodGET
paramstip : 1:未扫描 0:已扫描 uuid : 获取到的uuid _ : 时间戳

返回数据(String):

window.code=xxx;    xxx:    408 登陆超时    201 扫描成功    200 确认登录    当返回200时,还会有  window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=xxx&uuid=xxx&lang=xxx&scan=xxx";

4. 登录获取Cookie(参考方法 login)

APIwebwxnewloginpage
urlwx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
methodGET
paramsticket : xxx uuid : xxx lang : zh_CN scan : xxx fun : new

返回数据(XML):

<error>      <ret>0</ret>      <message>OK</message>      <skey>xxx</skey>      <wxsid>xxx</wxsid>      <wxuin>xxx</wxuin>      <pass_ticket>xxx</pass_ticket>      <isgrayscale>1</isgrayscale></error>

在这一步获取xml中的 skey, wxsid, wxuin, pass_ticket

5. 微信初始化(参考方法 wxInit)

APIwebwxinit
urlwx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit
methodPOST
dataJSON
headerContent-Type: application/json; charset=UTF-8
params{ BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx, } }

返回数据(JSON):

{      "BaseResponse": {          "Ret": 0,          "ErrMsg": ""      },      "Count": 11,      "ContactList": [...],      "SyncKey": {          "Count": 4,          "List": [              {                  "Key": 1,                  "Val": 635705559              },              ...          ]      },      "User": {          "Uin": xxx,          "UserName": xxx,          "NickName": xxx,          "HeadImgUrl": xxx,          "RemarkName": "",          "PYInitial": "",          "PYQuanPin": "",          "RemarkPYInitial": "",          "RemarkPYQuanPin": "",          "HideInputBarFlag": 0,          "StarFriend": 0,          "Sex": 1,          "Signature": "Apt-get install B",          "AppAccountFlag": 0,          "VerifyFlag": 0,          "ContactFlag": 0,          "WebWxPluginSwitch": 0,          "HeadImgFlag": 1,          "SnsFlag": 17      },      "ChatSet": xxx,      "SKey": xxx,      "ClientVersion": 369297683,      "SystemTime": 1453124908,      "GrayScale": 1,      "InviteStartCount": 40,      "MPSubscribeMsgCount": 2,      "MPSubscribeMsgList": [...],      "ClickReportInterval": 600000  }

这一步中获取 SyncKey, User 后面的消息监听用。

6. 开启微信状态通知(参考方法 wxStatusNotify)

APIwebwxstatusnotify
urlwx2.qq.com/cgi-bin/mmwebwx-bin/webwxstatusnotify
methodPOST
dataJSON
headerContent-Type: application/json; charset=UTF-8
params{ BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, Code: 3, FromUserName: 自己的ID, ToUserName: 自己的ID, ClientMsgId: 时间戳 }

返回数据(JSON):

{      "BaseResponse": {          "Ret": 0,          "ErrMsg": ""      },      ...  }

7. 获取联系人列表(参考方法 getContact)

APIwebwxgetcontact
urlwx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact
methodPOST
dataJSON
headerContentType: application/json; charset=UTF-8
params{ BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx, } }

返回数据(JSON):

{      "BaseResponse": {          "Ret": 0,          "ErrMsg": ""      },      "MemberCount": 334,      "MemberList": [          {              "Uin": 0,              "UserName": xxx,              "NickName": "Urinx",              "HeadImgUrl": xxx,              "ContactFlag": 3,              "MemberCount": 0,              "MemberList": [],              "RemarkName": "",              "HideInputBarFlag": 0,              "Sex": 0,              "Signature": "我是二蛋",              "VerifyFlag": 8,              "OwnerUin": 0,              "PYInitial": "URINX",              "PYQuanPin": "Urinx",              "RemarkPYInitial": "",              "RemarkPYQuanPin": "",              "StarFriend": 0,              "AppAccountFlag": 0,              "Statues": 0,              "AttrStatus": 0,              "Province": "",              "City": "",              "Alias": "Urinxs",              "SnsFlag": 0,              "UniFriend": 0,              "DisplayName": "",              "ChatRoomId": 0,              "KeyWord": "gh_",              "EncryChatRoomId": ""          },          ...      ],      "Seq": 0  }

8.消息检查(参考方法 syncCheck)

APIsynccheck
urlwebpush2.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck
methodGET
dataJSON
headerContentType: application/json; charset=UTF-8
params{ BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx, } }

返回数据(String):

window.synccheck={retcode:"xxx",selector:"xxx"}    retcode:      0 正常      1100 失败/登出微信  selector:      0 正常      2 新的消息      7 进入/离开聊天界面

9. 获取最新消息(参考方法 webwxsync)

APIwebwxsync
urlwx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=xxx&skey=xxx&pass_ticket=xxx
methodPOST
dataJSON
headerContentType: application/json; charset=UTF-8
params{ BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, SyncKey: xxx, rr: 时间戳取反 }

返回数据(JSON):

{      'BaseResponse': {'ErrMsg': '', 'Ret': 0},      'SyncKey': {          'Count': 7,          'List': [              {'Val': 636214192, 'Key': 1},              ...          ]      },      'ContinueFlag': 0,      'AddMsgCount': 1,      'AddMsgList': [          {              'FromUserName': '',              'PlayLength': 0,              'RecommendInfo': {...},              'Content': "",               'StatusNotifyUserName': '',              'StatusNotifyCode': 5,              'Status': 3,              'VoiceLength': 0,              'ToUserName': '',              'ForwardFlag': 0,              'AppMsgType': 0,              'AppInfo': {'Type': 0, 'AppID': ''},              'Url': '',              'ImgStatus': 1,              'MsgType': 51,              'ImgHeight': 0,              'MediaId': '',               'FileName': '',              'FileSize': '',              ...          },          ...      ],      'ModChatRoomMemberCount': 0,      'ModContactList': [],      'DelContactList': [],      'ModChatRoomMemberList': [],      'DelContactCount': 0,      ...  }

10. 发送消息(参考方法 webwxsendmsg)

APIwebwxsendmsg
urlwx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?pass_ticket=xxx
methodPOST
dataJSON
headerContentType: application/json; charset=UTF-8
params{ BaseRequest: { Uin: xxx, Sid: xxx, Skey: xxx, DeviceID: xxx }, Msg: { Type: 1 文字消息, Content: 要发送的消息, FromUserName: 自己的ID, ToUserName: 好友的ID, LocalID: 与clientMsgId相同, ClientMsgId: 时间戳左移4位随后补上4位随机数 } }

返回数据(JSON):

{      "BaseResponse": {          "Ret": 0,          "ErrMsg": ""      },      ...  }

更多资料:github.com/xiangzhai/qwxgithub.com/Urinx/WeixinBotwww.07net01.com/2016/01/1201188.htmlwww.cnblogs.com/xiaozhi_5638/p/4923811.html

【相关推荐】

1. 微信公众号源码下载

2. 阿狸子订单系统源码下载

以上就是微信协议详解的详细内容,更多内容请关注技术你好其它相关文章!

来源链接:
免责声明:
1.资讯内容不构成投资建议,投资者应独立决策并自行承担风险
2.本文版权归属原作所有,仅代表作者本人观点,不代表本站的观点或立场
上一篇:php获取远程图片并下载保存到本地的方法分析 下一篇:微信获取地理位置的图文详解

相关资讯