首先我们要获取这个发送微信人的信息,当你用控制台查看微信的接口你会发现,要有一个Fakeid,那么我们首要要获取Fakeid,其他就好办了.首先 我们先获取登录人的这个fakeid,防止后面还会用的.看了一下微信公众平台的所有api接口,,没有发现,那么我们只能去它的用户页面去拿,代码如 下:
- getFakeId: (options, fn) ->
- request
- .get('http://mp.weixin.qq.com/cgi-bin/userinfopage?t=wxm-setting&lang=zh_CN#')
- .set('Cookie', options.cookie)
- .end (res) ->
- //这里是你的fakeid
- //在拿到的结果里,实际上是一个页面的所有数据,那么我们只能用正则去匹配到所需的fakeid数据,下面是完整的代码:
- getFakeId: (options, fn) ->
- request
- .get('http://mp.weixin.qq.com/cgi-bin/userinfopage?t=wxm-setting&lang=zh_CN#')
- .set('Cookie', options.cookie)
- .end (res) ->
- fakeid = res.text.match(/FakeID : "(\d+)"/)[1]
- fn null, fakeid
到了这一步,其实还没有成功,因为我们还没有拿到发送人的fakeid,不然怎么发微信消息给好友呢?于是,我们要去微信公众平台的用户管理页面拿到你所有的好友的fakeid,代码如下:
- getFriendPage: (req, fn) ->
- @login (err, cookie)->
- request
- .get('http://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&lang=zh_CN&pagesize=&pageidx=0&type=0&groupid=0')
- .set('Cookie', cookie)
- .end (res) ->
- //在这里res.text已经是用户管理页面的html代码了,但是并不会出来,一番查找后,发现是因为它里面的js在我们这里用是有跨域的问题的,知道问题就好办了,查找html它里面设置了document.domain:`document.domain = document.location.hostname.match(/[^\.]+\.com/)[0];`结果在控制台的输出是qq.com,看到这里,就证明我的判断是没有错误的.正则替换掉里面的hostname就ok了.完整代码如下:
- getFriendPage: (req, fn) ->
- @login (err, cookie)->
- request
- .get('http://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&lang=zh_CN&pagesize=&pageidx=0&type=0&groupid=0')
- .set('Cookie', cookie)
- .end (res) ->
- rs = res.text.replace(/document.location.hostname.match.*\[0\]/g, '"'+req.host+'"')
- fn null, res.text
在这里,大家已经能拿到所有好友的fakeid了,但是不能用jsdom或者cheerio去拿,因为是整个页面加载后才出现好友的html的,至于解决 方法我是用phantom.js解决的,具体代码我就不贴了,因为要涉及到安装什么的.因为研究微信公众平台时间也就几天,如果有更好的方法获取好友的 fakeid请在下面留言.
到这一步,在这里已经拿到了fakeid了,我们可以去拿到这个微信好友的相关信息,在微信公众平台中,找到了如下接口,以下是代码:
- getInfo: (fakeid, fn) ->
- @login (err, cookie) ->
- request
- .post(’http://mp.weixin.qq.com/cgi-bin/getcontactinfo?t=ajax-getcontactinfo&fakeid=‘+fakeid)
- .type('form')
- .set('Cookie', cookie)
- .end (res) ->
- fn null, JSON.parse res.text
调用代码打印以下结果:
- {
- FakeId: "xxxx",
- NickName: "岳蒙",
- ReMarkName: "",
- Username: "xxxx",
- Signature: "",
- Country: "中国",
- Province: "江西",
- City: "南昌",
- Sex: "1",
- GroupID: "0",
- Groups: [
- {
- GroupId: "0",
- GroupName: "未分组"
- },
- {
- GroupId: "1",
- GroupName: "黑名单"
- },
- {
- GroupId: "2",
- GroupName: "星标组"
- }
- ]
- }
当然群发的话也挺简单的,我已经做好了就不发了,大家可以贴出自己的代码,互相讨论下。
微信发送到这里已经讲完,大家有更好的玩法也欢迎分享。