微信网页版 守护进程
一、index_f5ac071.js
中的API
:
二、我们的应用使用了API
中的12个:(下图列出了9个)
登录 Login
jslogin
login
守护进程 Daemon
webwxnewloginpage
webwxinit
webwxstatusnotify
webwxgetcontact
webwxbatchgetcontact
synccheck
webwxsync
还有发送消息的3个API
webwxsendmsg
webwxuploadmedia
webwxsendmsgimg
三、Daemon 流程
本节就不详细分析源码了,在后面章节写api
代码时,如果有需要再具体问题具体分析。
有兴趣的同学请自行分析。有问题或者有更好的方法请给我留言交流,共同进步。
synccheck: 循环(重点)
在上面的资源列表图中可以看到(注意看最下面三行),和上节登录流程中的 login
一样,浏览器每间隔25秒左右就请求一次 synccheck
如果它的返回值不是 window.synccheck={retcode:"0",selector:"0"}
就会触发 webwxsync
来修改 SyncKey
, 做为下一次向微信服务器请求的凭据
window.synccheck.retcode
可能会有的值为:
-
'1100'
: 登出微信(可能) -
'1101'
: 其他设备登录web微信(可能) -
'1102'
: (暂时不知道)
这些情况导致 window.synccheck.selector
不为 '0'
:
webwxgetcontact
webwxbatchgetcontact
webwxsendmsg
webwxsendmsgimg
- (不全,还有其它待补充)
伪代码
- something.js
// 待办事项队列 先进先出 push shift
let todoList = []
const methods = {
webwxgetcontact () {},
webwxbatchgetcontact () {},
webwxsendmsg () {},
webwxsendmsgimg () {}
}
module.exports = {
do () {
if (todoList.length > 0) {
const { method } = todoList.shift()
methods[method]()
}
},
add (method) {
todoList.push({ method })
}
}
- daemon.js
const something = require('./something.js')
const init = () => {
webwxnewloginpage()
webwxinit()
}
const daemon = {
start () {
// 初始化
init ()
// 通知手机
webwxstatusnotify()
something.add('webwxgetcontact')
while (true) {
// 循环请求 synccheck
const checked = synccheck()
if (!checked) {
// 如果需要就调用 webwxsync
webwxsync()
}
something.do()
}
}
}
- 如果要发送文本消息就调用
something.add('webwxsendmsg')
- 如果要发送图片消息就调用
something.add('webwxsendmsgimg')
Daemon流程图
上一节 Electron开发实战之14-webwxapi-02
目录
下一节 Electron开发实战之16-eslint and jest