zoukankan      html  css  js  c++  java
  • WX Robot

    https://github.com/TonyChen56/WeChatRobot

    https://blog.csdn.net/github_33226586/article/details/50717089

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

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

    window.QRLogin.code = 200; window.QRLogin.uuid = "xxx"
    1
    2. 显示二维码(参考方法 showQrCode)
    API 显示二维码
    url https://login.weixin.qq.com/qrcode/{uuid}
    method POST
    params t : webwx
    _ : 时间戳


    3. 等待登录(参考方法 waitForLogin)这里是微信确认登录
    API 二维码扫描登录
    url https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login
    method GET
    params tip : 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";
    1
    2
    3
    4
    5
    6
    7
    8
    9
    4. 登录获取Cookie(参考方法 login)
    API webwxnewloginpage
    url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
    method GET
    params ticket : 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>
    1
    2
    3
    4
    5
    6
    7
    8
    9
    在这一步获取xml中的 skey, wxsid, wxuin, pass_ticket

    5. 微信初始化(参考方法 wxInit)
    API webwxinit
    url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit
    method POST
    data JSON
    header Content-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
    }
    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
    这一步中获取 SyncKey, User 后面的消息监听用。

    6. 开启微信状态通知(参考方法 wxStatusNotify)
    API webwxstatusnotify
    url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxstatusnotify
    method POST
    data JSON
    header Content-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": ""
    },
    ...
    }
    1
    2
    3
    4
    5
    6
    7
    7. 获取联系人列表(参考方法 getContact)
    API webwxgetcontact
    url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact
    method POST
    data JSON
    header ContentType: 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
    }
    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
    8.消息检查(参考方法 syncCheck)
    API synccheck
    url https://webpush2.weixin.qq.com/cgi-bin/mmwebwx-bin/synccheck
    method GET
    data JSON
    header ContentType: 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 进入/离开聊天界面
    1
    2
    3
    4
    5
    6
    7
    8
    9
    9. 获取最新消息(参考方法 webwxsync)
    API webwxsync
    url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsync?sid=xxx&skey=xxx&pass_ticket=xxx
    method POST
    data JSON
    header ContentType: 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,
    ...
    }
    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
    10. 发送消息(参考方法 webwxsendmsg)
    API webwxsendmsg
    url https://wx2.qq.com/cgi-bin/mmwebwx-bin/webwxsendmsg?pass_ticket=xxx
    method POST
    data JSON
    header ContentType: 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": ""
    },
    ...
    }
    1
    2
    3
    4
    5
    6
    7
    更多资料:
    https://github.com/xiangzhai/qwx
    https://github.com/Urinx/WeixinBot
    http://www.07net01.com/2016/01/1201188.html
    http://www.cnblogs.com/xiaozhi_5638/p/4923811.html

    点赞 4
    收藏
    分享

    ————————————————
    版权声明:本文为CSDN博主「王爵的csdn」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/github_33226586/article/details/50717089

  • 相关阅读:
    Struts2+Spring3+Mybatis3开发环境搭建
    spring+struts2+mybatis
    【LeetCode】Populating Next Right Pointers in Each Node
    【LeetCode】Remove Duplicates from Sorted Array
    【LeetCode】Remove Duplicates from Sorted Array II
    【LeetCode】Binary Tree Inorder Traversal
    【LeetCode】Merge Two Sorted Lists
    【LeetCode】Reverse Integer
    【LeetCode】Same Tree
    【LeetCode】Maximum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/lhxsoft/p/12105391.html
Copyright © 2011-2022 走看看