Node.js发送微信 获取fakeID

移动开发
上一章已经讲过如何用node.js发送微信消息了,,这一章为大家深入一点研究微信公众平台的机制。

首先我们要获取这个发送微信人的信息,当你用控制台查看微信的接口你会发现,要有一个Fakeid,那么我们首要要获取Fakeid,其他就好办了.首先 我们先获取登录人的这个fakeid,防止后面还会用的.看了一下微信公众平台的所有api接口,,没有发现,那么我们只能去它的用户页面去拿,代码如 下:

  1. getFakeId: (options, fn) -> 
  2.     request 
  3.       .get('http://mp.weixin.qq.com/cgi-bin/userinfopage?t=wxm-setting&lang=zh_CN#'
  4.       .set('Cookie', options.cookie) 
  5.       .end (res) -> 
  6.          //这里是你的fakeid 
  7.  //在拿到的结果里,实际上是一个页面的所有数据,那么我们只能用正则去匹配到所需的fakeid数据,下面是完整的代码: 
  8. getFakeId: (options, fn) -> 
  9.     request 
  10.       .get('http://mp.weixin.qq.com/cgi-bin/userinfopage?t=wxm-setting&lang=zh_CN#'
  11.       .set('Cookie', options.cookie) 
  12.       .end (res) -> 
  13.         fakeid = res.text.match(/FakeID : "(\d+)"/)[1] 
  14.         fn null, fakeid 

到了这一步,其实还没有成功,因为我们还没有拿到发送人的fakeid,不然怎么发微信消息给好友呢?于是,我们要去微信公众平台的用户管理页面拿到你所有的好友的fakeid,代码如下:

  1. getFriendPage: (req, fn) -> 
  2.     @login (err, cookie)-> 
  3.       request 
  4.         .get('http://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&lang=zh_CN&pagesize=&pageidx=0&type=0&groupid=0'
  5.         .set('Cookie', cookie) 
  6.         .end (res) -> 
  7.        //在这里res.text已经是用户管理页面的html代码了,但是并不会出来,一番查找后,发现是因为它里面的js在我们这里用是有跨域的问题的,知道问题就好办了,查找html它里面设置了document.domain:`document.domain = document.location.hostname.match(/[^\.]+\.com/)[0];`结果在控制台的输出是qq.com,看到这里,就证明我的判断是没有错误的.正则替换掉里面的hostname就ok了.完整代码如下: 
  8. getFriendPage: (req, fn) -> 
  9.     @login (err, cookie)-> 
  10.       request 
  11.         .get('http://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&lang=zh_CN&pagesize=&pageidx=0&type=0&groupid=0'
  12.         .set('Cookie', cookie) 
  13.         .end (res) -> 
  14.           rs = res.text.replace(/document.location.hostname.match.*\[0\]/g, '"'+req.host+'"'
  15.           fn null, res.text 

在这里,大家已经能拿到所有好友的fakeid了,但是不能用jsdom或者cheerio去拿,因为是整个页面加载后才出现好友的html的,至于解决 方法我是用phantom.js解决的,具体代码我就不贴了,因为要涉及到安装什么的.因为研究微信公众平台时间也就几天,如果有更好的方法获取好友的 fakeid请在下面留言.

到这一步,在这里已经拿到了fakeid了,我们可以去拿到这个微信好友的相关信息,在微信公众平台中,找到了如下接口,以下是代码:

  1. getInfo: (fakeid, fn) -> 
  2.     @login (err, cookie) -> 
  3.       request 
  4.         .post(’http://mp.weixin.qq.com/cgi-bin/getcontactinfo?t=ajax-getcontactinfo&fakeid=‘+fakeid) 
  5.         .type('form'
  6.         .set('Cookie', cookie) 
  7.         .end (res) -> 
  8.           fn null, JSON.parse res.text 

调用代码打印以下结果:

  1. FakeId: "xxxx"
  2. NickName: "岳蒙"
  3. ReMarkName: ""
  4. Username: "xxxx"
  5. Signature: ""
  6. Country: "中国"
  7. Province: "江西"
  8. City: "南昌"
  9. Sex: "1"
  10. GroupID: "0"
  11. Groups: [ 
  12. GroupId: "0"
  13. GroupName: "未分组" 
  14. }, 
  15. GroupId: "1"
  16. GroupName: "黑名单" 
  17. }, 
  18. GroupId: "2"
  19. GroupName: "星标组" 

当然群发的话也挺简单的,我已经做好了就不发了,大家可以贴出自己的代码,互相讨论下。

微信发送到这里已经讲完,大家有更好的玩法也欢迎分享。

责任编辑:徐川 来源: net
相关推荐

2021-12-25 22:29:57

Node.js 微任务处理事件循环

2013-11-01 09:34:56

Node.js技术

2015-03-10 10:59:18

Node.js开发指南基础介绍

2013-04-12 01:22:02

2011-11-01 10:30:36

Node.js

2011-09-02 14:47:48

Node

2011-09-08 13:46:14

node.js

2011-09-09 14:23:13

Node.js

2012-10-24 14:56:30

IBMdw

2011-11-10 08:55:00

Node.js

2020-05-29 15:33:28

Node.js框架JavaScript

2015-06-23 15:27:53

HproseNode.js

2012-02-03 09:25:39

Node.js

2021-07-09 00:24:10

No.jsNode.js原理

2024-07-08 08:53:52

2020-10-26 08:34:13

Node.jsCORS前端

2021-02-01 15:42:45

Node.jsSQL应用程序

2021-04-06 10:15:29

Node.jsHooks前端

2022-08-28 16:30:34

Node.jsDocker指令

2014-03-07 13:43:32

Node.jsNode
点赞
收藏

51CTO技术栈公众号