首先我們要獲取這個發(fā)送微信人的信息,當你用控制臺查看微信的接口你會發(fā)現(xiàn),要有一個Fakeid,那么我們首要要獲取Fakeid,其他就好辦了.首先 我們先獲取登錄人的這個fakeid,防止后面還會用的.看了一下微信公眾平臺的所有api接口,,沒有發(fā)現(xiàn),那么我們只能去它的用戶頁面去拿,代碼如 下:
- 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
- //在拿到的結果里,實際上是一個頁面的所有數(shù)據(jù),那么我們只能用正則去匹配到所需的fakeid數(shù)據(jù),下面是完整的代碼:
- 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
到了這一步,其實還沒有成功,因為我們還沒有拿到發(fā)送人的fakeid,不然怎么發(fā)微信消息給好友呢?于是,我們要去微信公眾平臺的用戶管理頁面拿到你所有的好友的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已經(jīng)是用戶管理頁面的html代碼了,但是并不會出來,一番查找后,發(fā)現(xiàn)是因為它里面的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
在這里,大家已經(jīng)能拿到所有好友的fakeid了,但是不能用jsdom或者cheerio去拿,因為是整個頁面加載后才出現(xiàn)好友的html的,至于解決 方法我是用phantom.js解決的,具體代碼我就不貼了,因為要涉及到安裝什么的.因為研究微信公眾平臺時間也就幾天,如果有更好的方法獲取好友的 fakeid請在下面留言.
到這一步,在這里已經(jīng)拿到了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: "星標組"
- }
- ]
- }
當然群發(fā)的話也挺簡單的,我已經(jīng)做好了就不發(fā)了,大家可以貼出自己的代碼,互相討論下。
微信發(fā)送到這里已經(jīng)講完,大家有更好的玩法也歡迎分享。
【編輯推薦】