打开首页,分配一个随机uuid,
根据该uuid获取二维码图片。
微信客户端扫描该图片,在客户端确认登录。
调用登录接口
浏览器不停的调用一个接口,如果返回登录成功,则 此时可以获取联系人列表,可以发送消息。然后不断调用同步接口。 如果同步接口有返回,则可以获取新消息,然后继续调用同步接口。
Java版实现源码:
https://github.com/biezhi/wechat-robot 或 http://git.oschina.net/biezhi/wechat-robot
Python实现:
https://github.com/Urinx/WeixinBot
C#实现:
https://github.com/sherlockchou86/WeChat.NET
QT实现:
https://github.com/xiangzhai/qwx
liberxue
https://github.com/Liberxue/WechatYUNchart
微信多开多账号机器人 云客服系统 微商营销 系统web协议一键登录
非公众号微信机器人微信群管家 微信自动回复 微信定时发送消息 微信多账号登录
逆向是工具,是我们学习他人软件的方法,而不是用来做一些非法的事情。
-
微信网页版本协议多开
-
一键登录
-
红包数量提醒
-
wx用户识别男女签名备注,群发
-
自动发消息 定时发消息 群消息监控
-
机器人回复 ,定时回复,超时回复
-
聊天记录保存,聊天记录查看
git.oschina : http://git.oschina.net/bolanzw/WechatYUNchart
git.GitHub:https://github.com/Liberxue/WechatYUNchart
即时通讯交流:https://gitter.im/wechatliberxue/Lobby
Issues提交:https://github.com/Liberxue/WechatYUNchart/issues
协议分析:http://www.liberxue.com/%E5%BE%AE%E4%BF%A1/wechart.html
已实现功能
-
非公众号微信机器人微信群管家 微信自动回复 微信定时发送消息 微信多账号登录
-
逆向是工具,是我们学习他人软件的方法,而不是用来做一些非法的事情。
-
微信网页版本协议多开
-
一键登录
-
红包数量提醒
-
wx用户识别男女签名备注,群发
-
自动发消息 定时发消息 群消息监控
-
机器人回复 ,定时回复,超时回复
-
聊天记录保存,聊天记录查看
t
## 该项目已停止更新维护不提供Issues
### 协议分析:
http://www.liberxue.com/wechart/wechart
执行流程
sequenceDiagram
GetUUID->>GetContact: QRCode Scane
GetUUID->>GetQRCode: Login!
WebWechat API
获取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"
显示二维码(参考方法 showQrCode)
API |显示二维码
—|—
url| https://login.weixin.qq.com/qrcode/{uuid}
method| POST
params |t : webwx
_ : 时间戳
等待登录(参考方法 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";
登录获取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>
在这一步获取xml中的 skey, wxsid, wxuin, pass_ticket
微信初始化(参考方法 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
}
这一步中获取 SyncKey, User 后面的消息监听用。
开启微信状态通知(参考方法 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": ""
},
...
}
获取联系人列表(参考方法 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
消息检查(参考方法 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):
indow.synccheck={retcode:"xxx",selector:"xxx"}
retcode:
0 正常
1100 失败/登出微信
selector:
0 正常
2 新的消息
7 进入/离开聊天界面
获取最新消息(参考方法 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,
...
}
发送消息(参考方法 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": ""
},
...
}
本文由 liberxue 创作,采用 知识共享署名4.0 国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为:2016-01-15 00:00:00