>  기사  >  위챗 애플릿  >  WeChat 프로토콜에 대한 자세한 설명

WeChat 프로토콜에 대한 자세한 설명

Y2J
Y2J원래의
2017-05-06 10:27:2616773검색

WeChat 웹 프로토콜 분석(WeChat 웹 버전 wx2.qq.com)

1. 홈페이지를 열고 임의의 uuid를 할당합니다.
2. uuid를 기반으로 QR 코드 이미지를 가져옵니다.
3. WeChat 클라이언트가 사진을 스캔하고 클라이언트에서 로그인을 확인합니다.
4. 브라우저는 로그인에 성공하면 로그인 인터페이스를 호출합니다.
이 때 연락처 목록을 가져오고 메시지를 보낼 수 있습니다. . 그런 다음 계속해서 동기화 인터페이스를 호출합니다.
6. 동기화 인터페이스가 반환되면 새 메시지를 받은 후 계속해서 동기화 인터페이스를 호출할 수 있습니다.

소스 코드 주소: github.com/biezhi/wechat-robot

실행 과정

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

WebWechat API

1. UUID 가져오기(방법 참조) getUUID)

API UUID 가져오기
url https://login.weixin.qq.com/jslogin
메서드 GET
데이터 URL 인코딩
매개변수 appid : wx782c26e4c19acffb
API 获取 UUID
url https://login.weixin.qq.com/jslogin
method GET
data URL Encode
params appid : wx782c26e4c19acffb 
fun : new 
lang: zh_CN 
_ : 时间戳
재미 : 새로운

lang: zh_CN _ : 타임스탬프

반환 데이터(

String

):
API 显示二维码
url login.weixin.qq.com/qrcode/{uuid}
method POST
params t : webwx 076402276aae5dbec7f672f8f4e5cc81 _ : 时间戳
window.QRLogin.code = 200; window.QRLogin.uuid = "xxx"

2. QR 코드 표시(showQrCode 메소드 참조)

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

3. 로그인 대기(waitForLogin 메소드 참조) ) WeChat 확인 로그인은 다음과 같습니다.

Strong> : 1: 스캔되지 않음 0 : 스캔됨

uuid : uuid 획득 _ : 타임스탬프

반환 데이터(문자열):
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";
API QR 코드를 스캔하여 로그인
url login.weixin.qq.com/cgi-bin/mmwebwx-bin/login
메서드 GET
매개변수
API webwxnewloginpage
url wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
method GET
params ticket : xxx 
uuid : xxx 
lang : zh_CN 
scan : xxx 
fun : new
4.

쿠키를 받으려면 로그인하세요(로그인 방법 참조)

API webwxnewloginpage
url wx2.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage
방법 GET
매개변수 티켓 : xxx uuid : xxx

lang : zh_CN skey 스캔 : xxx wxsid재미 : 신규

wxuin 반환 데이터(pass_ticketXML):

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

이 단계에서는
API webwxinit
url 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, 
     } 
}
, , , 5를 가져옵니다. (wxInit 메소드 참조) tr>
API webwxinit
url wx2.qq.com/cgi-bin/mmwebwx-bin/webwxinit
방법 td> POST
데이터 JSON
헤더 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
}

这一步中获取 SyncKeyUser 后面的消息监听用。

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

API webwxstatusnotify
url 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": ""
    },
    ...
}

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

API webwxgetcontact
url 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
}

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

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

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

API webwxsync
url 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):

{
    &#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,
    ...
}

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

API webwxsendmsg
url 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": ""
    },
    ...
}

更多资料:
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. 阿狸子订单系统源码下载

위 내용은 WeChat 프로토콜에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.