Web版微信协议详解

转:http://www.php.cn/weixin-kaifa-361662.html

Java版实现源码:https://github.com/biezhi/wechat-robot
Python实现:https://github.com/Urinx/WeixinBot
C#实现:https://github.com/sherlockchou86/WeChat.NET
QT实现:https://github.com/xiangzhai/qwx
Perl实现:https://github.com/sjdy521/Mojo-Weixin
go实现: https://github.com/songtianyi/wechat-go


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

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

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

执行流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        +--------------+     +---------------+   +---------------+
        |              |     |               |   |               |
        |   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):

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

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

API显示二维码
urllogin.weixin.qq.com/qrcode/{uuid}
methodPOST
paramst : webwx <br/> _ : 时间戳


3. 等待登录(参考方法 waitForLogin)这里是微信确认登录

API二维码扫描登录
urllogin.weixin.qq.com/cgi-bin/mmwebwx-bin/login
methodGET
paramstip : 1:未扫描 0:已扫描
uuid : 获取到的uuid
_ : 时间戳

返回数据(String):

1
2
3
4
5
6
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):

1
2
3
4
5
6
7
8
< 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):

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
40
41
42
43
44
45
46
47
48
{
     "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):

1
2
3
4
5
6
7
{
     "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):

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
40
41
42
43
{
     "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):

1
2
3
4
5
6
7
8
9
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):

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
40
41
42
43
{
     '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):

1
2
3
4
5
6
7
{
     "BaseResponse" : {
         "Ret" : 0,
         "ErrMsg" : ""
     },
     ...
}

更多资料:
github.com/xiangzhai/qwx
github.com/Urinx/WeixinBot
www.07net01.com/2016/01/1201188.html
www.cnblogs.com/xiaozhi_5638/p/4923811.html

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Windows 微信协议是指在Windows操作系统上运行的微信软件所采用的通信协议微信是一款流行的即时通信软件,通过Windows 微信协议,用户可以在电脑上使用微信进行文字、语音、图片和视频等多种形式的交流。 Windows 微信协议遵循了微信的通信规则和协议,它建立了一种标准的数据传输方式,确保了用户在使用微信时的稳定性和安全性。这个协议使用了加密技术,确保了用户在使用微信时发送和接收的信息不会被未经授权的人获取。 使用Windows 微信协议,用户可以登录自己的微信账号,查看和发送消息,添加和删除好友,创建和加入群组,以及进行语音和视频通话等功能。协议还支持消息的发送和接收状态的标识,以及消息的发送时间和接收时间的展示。 除了基础的通信功能,Windows 微信协议还支持一些高级功能,比如支付功能、分享功能、定位功能等。用户可以通过微信在Windows操作系统上进行各种操作,比如通过微信支付购买商品、通过微信分享内容到朋友圈、通过微信定位功能分享自己的位置等。 总而言之,Windows 微信协议在Windows操作系统上提供了丰富的微信功能,使用户能够更加方便地进行各种形式的交流和分享。通过使用Windows 微信协议,用户可以在电脑上获得类似于手机上使用微信的体验,为用户提供了更加便捷和多样化的交流方式。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值