Rumah > applet WeChat > pembangunan WeChat > 微信协议详解

微信协议详解

Y2J
Lepaskan: 2017-05-06 10:27:26
asal
17040 orang telah melayarinya

微信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|

+-------------+

Salin selepas log masuk

WebWechat API

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

API 获取 UUID
url https://login.weixin.qq.com/jslogin
method GET
data URL Encode
params appid : wx782c26e4c19acffb 
fun : new 
lang: zh_CN 
_ : 时间戳

返回数据(String):

1

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

Salin selepas log masuk

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

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


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";

Salin selepas log masuk

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>

Salin selepas log masuk

在这一步获取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

}

Salin selepas log masuk

这一步中获取 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": ""

    },

    ...

}

Salin selepas log masuk

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

}

Salin selepas log masuk

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 进入/离开聊天界面

Salin selepas log masuk

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

{

    &#39;BaseResponse&#39;: {&#39;ErrMsg&#39;: &#39;&#39;, &#39;Ret&#39;: 0},

    &#39;SyncKey&#39;: {

        &#39;Count&#39;: 7,

        &#39;List&#39;: [

            {&#39;Val&#39;: 636214192, &#39;Key&#39;: 1},

            ...

        ]

    },

    &#39;ContinueFlag&#39;: 0,

    &#39;AddMsgCount&#39;: 1,

    &#39;AddMsgList&#39;: [

        {

            &#39;FromUserName&#39;: &#39;&#39;,

            &#39;PlayLength&#39;: 0,

            &#39;RecommendInfo&#39;: {...},

            &#39;Content&#39;: "",

            &#39;StatusNotifyUserName&#39;: &#39;&#39;,

            &#39;StatusNotifyCode&#39;: 5,

            &#39;Status&#39;: 3,

            &#39;VoiceLength&#39;: 0,

            &#39;ToUserName&#39;: &#39;&#39;,

            &#39;ForwardFlag&#39;: 0,

            &#39;AppMsgType&#39;: 0,

            &#39;AppInfo&#39;: {&#39;Type&#39;: 0, &#39;AppID&#39;: &#39;&#39;},

            &#39;Url&#39;: &#39;&#39;,

            &#39;ImgStatus&#39;: 1,

            &#39;MsgType&#39;: 51,

            &#39;ImgHeight&#39;: 0,

            &#39;MediaId&#39;: &#39;&#39;,

            &#39;FileName&#39;: &#39;&#39;,

            &#39;FileSize&#39;: &#39;&#39;,

            ...

        },

        ...

    ],

    &#39;ModChatRoomMemberCount&#39;: 0,

    &#39;ModContactList&#39;: [],

    &#39;DelContactList&#39;: [],

    &#39;ModChatRoomMemberList&#39;: [],

    &#39;DelContactCount&#39;: 0,

    ...

}

Salin selepas log masuk

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": ""

    },

    ...

}

Salin selepas log masuk

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

【相关推荐】

1. 微信公众号源码下载

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

Atas ialah kandungan terperinci 微信协议详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan