主要模块

  • 获取UUID

  • 根据UUID获取二维码

  • 显示二维码

  • 扫码登陆

  • 初始化微信信息

  • 获取通讯录

  • 发送信息

  • 同步信息

  • 获取自动回复内容

源码地址

https://github.com/qianlnk/gobot

网页版微信API

获取UUID

接口地址
https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&fun=new&lang=zhCN&={Timestamp}
方法
GET
结果
window.QRLogin.code = 200; window.QRLogin.uuid = “xxx”;
实现
参考GetUUID方法

获取二维码

接口地址
https://login.weixin.qq.com/qrcode/{UUID}?t=webwx&_={Timestamp}

方法
GET
实现
参考GenQrcode方法

将二维码输出到终端
https://github.com/qianlnk/qrcode

登录

接口地址
https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?tip={1,0}&uuid=(UUID}&_={Timestamp}
tip: 1 未扫码 0 已扫码

方法
GET
结果

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“;
通过正则获取后面需要的URL,后面统一用BASE_URL表示。

BASE_URL = https://wx.qq.com

实现
参考Login方法

跳转
获取用户的登录信息

Skey string xml:"skey"
Wxsid string xml:"wxsid"
Wxuin string xml:"wxuin"
PassTicket string xml:"pass_ticket"

微信初始化

接口地址
BASE_URL/webwxinit?pass_ticket={PassTicket}&skey={Skey}&r={Timestamp}
方法
POST
结果

  1. type InitResult struct {
  2. BaseResponse BaseResponse `json:"BaseResponse"`
  3. Count int `json:"Count"`
  4. ContactList []Contact `json:"ContactList"`
  5. SyncKey SyncKey `json:"SyncKey"`
  6. User User `json:"User"`
  7. ChatSet string `json:"ChatSet"`
  8. SKey string `json:"SKey"`
  9. ClientVersion int `json:"ClientVersion"`
  10. SystemTime int `json:"SystemTime"`
  11. GrayScale int `json:"GrayScale"`
  12. InviteStartCount int `json:"InviteStartCount"`
  13. MPSubscribeMsgCount int `json:"MPSubscribeMsgCount"`
  14. MPSubscribeMsgList []MPSubscribeMsg `json:"MPSubscribeMsgList"`
  15. ClickReportInterval int `json:"ClickReportInterval"`
  16. }

实现
参考Init方法

状态通知

接口地址
BASE_URL/webwxstatusnotify?lang=zh_CN&pass_ticket={PassTicket}
参数

  1. params := make(map[string]interface{})
  2. params["BaseRequest"] = w.baseRequest
  3. params["Code"] = 3
  4. params["FromUserName"] = w.user.UserName
  5. params["ToUserName"] = w.user.UserName
  6. params["ClientMsgId"] = int(time.Now().Unix())

方法
POST
实现
参考StatusNotify方法

获取通讯录

接口地址
BASE_URL/webwxgetcontact?sid={Wxsid}&skey={Skey}&pass_ticket={PassTicket}

参数

  1. params := make(map[string]interface{})
  2. params["BaseRequest"] = w.baseRequest

方法
POST
实现
参考GetContact方法

同步信息

接口地址
https://host/cgi-bin/mmwebwx-bin/synccheck

Host

  1. Hosts = []string{
  2. "webpush.wx.qq.com",
  3. "webpush2.wx.qq.com",
  4. "webpush.wechat.com",
  5. "webpush1.wechat.com",
  6. "webpush2.wechat.com",
  7. "webpush1.wechatapp.com",
  8. }

参数

  1. v := url.Values{}
  2. v.Add("r", w.timestamp())
  3. v.Add("sid", w.loginRes.Wxsid)
  4. v.Add("uin", w.loginRes.Wxuin)
  5. v.Add("skey", w.loginRes.Skey)
  6. v.Add("deviceid", w.deviceID)
  7. v.Add("synckey", w.strSyncKey())
  8. v.Add("_", w.timestamp())

方法
GET

结果
window.synccheck={retcode:”xxx”,selector:”xxx”}

retcode:
0 正常
1100 手机上退出网页版微信
1101在其他地方登录网页版微信
selector:
0 正常
2 新的消息
7 进入/离开聊天界面

实现
参考SyncCheck方法
当selector=2时读取新的信息
接口地址
BASE_URL/webwxsync?sid={Wxsid}&skey={Skey}&pass_ticket={PassTicket}
参数

  1. params := make(map[string]interface{})
  2. params["BaseRequest"] = w.baseRequest
  3. params["SyncKey"] = w.syncKey
  4. params["rr"] = ^int(time.Now().Unix())

方法
POST
注意
修改synckey,重要

  1. if msg.BaseResponse.Ret == 0 {
  2. w.syncKey = msg.SyncKey
  3. }

实现
参考WxSync方法

发送信息

接口地址
BASE_URL/webwxsendmsg?pass_ticket={PassTicket}

参数

  1. params := make(map[string]interface{})
  2. params["BaseRequest"] = w.baseRequest
  3. msg := make(map[string]interface{})
  4. msg["Type"] = 1
  5. msg["Content"] = message
  6. msg["FromUserName"] = w.user.UserName
  7. msg["ToUserName"] = to
  8. msg["LocalID"] = clientMsgID
  9. msg["ClientMsgId"] = clientMsgID
  10. params["Msg"] = msg

方法
POST
实现
参考SendMessage方法

图灵API

获取自动回复内容。

接口地址
http://www.tuling123.com/openapi/api

去图灵官网注册并获取key
http://www.tuling123.com

参数

  1. params := make(map[string]interface{})
  2. params["userid"] = uid
  3. params["key"] = w.cfg.Tuling.Keys[w.user.NickName].Key
  4. params["info"] = msg

方法
POST

结果
Code int json:"code"
Text string json:"text" //100000
URL string json:"url" //200000
List interface{} json:"list" //302000 []News 308000 []Menu

实现
参考getReply方法


golang 实现微信聊天机器人 - 图1