Node.js發(fā)送微信 獲取fakeID
首先我們要獲取這個(gè)發(fā)送微信人的信息,當(dāng)你用控制臺(tái)查看微信的接口你會(huì)發(fā)現(xiàn),要有一個(gè)Fakeid,那么我們首要要獲取Fakeid,其他就好辦了.首先 我們先獲取登錄人的這個(gè)fakeid,防止后面還會(huì)用的.看了一下微信公眾平臺(tái)的所有api接口,,沒(méi)有發(fā)現(xiàn),那么我們只能去它的用戶(hù)頁(yè)面去拿,代碼如 下:
- 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
- //在拿到的結(jié)果里,實(shí)際上是一個(gè)頁(yè)面的所有數(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
到了這一步,其實(shí)還沒(méi)有成功,因?yàn)槲覀冞€沒(méi)有拿到發(fā)送人的fakeid,不然怎么發(fā)微信消息給好友呢?于是,我們要去微信公眾平臺(tái)的用戶(hù)管理頁(yè)面拿到你所有的好友的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)是用戶(hù)管理頁(yè)面的html代碼了,但是并不會(huì)出來(lái),一番查找后,發(fā)現(xiàn)是因?yàn)樗锩娴膉s在我們這里用是有跨域的問(wèn)題的,知道問(wèn)題就好辦了,查找html它里面設(shè)置了document.domain:`document.domain = document.location.hostname.match(/[^\.]+\.com/)[0];`結(jié)果在控制臺(tái)的輸出是qq.com,看到這里,就證明我的判斷是沒(méi)有錯(cuò)誤的.正則替換掉里面的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去拿,因?yàn)槭钦麄€(gè)頁(yè)面加載后才出現(xiàn)好友的html的,至于解決 方法我是用phantom.js解決的,具體代碼我就不貼了,因?yàn)橐婕暗桨惭b什么的.因?yàn)檠芯课⑿殴娖脚_(tái)時(shí)間也就幾天,如果有更好的方法獲取好友的 fakeid請(qǐng)?jiān)谙旅媪粞?
到這一步,在這里已經(jīng)拿到了fakeid了,我們可以去拿到這個(gè)微信好友的相關(guān)信息,在微信公眾平臺(tái)中,找到了如下接口,以下是代碼:
- 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
調(diào)用代碼打印以下結(jié)果:
- {
- FakeId: "xxxx",
- NickName: "岳蒙",
- ReMarkName: "",
- Username: "xxxx",
- Signature: "",
- Country: "中國(guó)",
- Province: "江西",
- City: "南昌",
- Sex: "1",
- GroupID: "0",
- Groups: [
- {
- GroupId: "0",
- GroupName: "未分組"
- },
- {
- GroupId: "1",
- GroupName: "黑名單"
- },
- {
- GroupId: "2",
- GroupName: "星標(biāo)組"
- }
- ]
- }
當(dāng)然群發(fā)的話(huà)也挺簡(jiǎn)單的,我已經(jīng)做好了就不發(fā)了,大家可以貼出自己的代碼,互相討論下。
微信發(fā)送到這里已經(jīng)講完,大家有更好的玩法也歡迎分享。