利用公众平台模拟登录发送微信消息给指定用户
海南中立科技 | 2018-01-26 23:54:31 | 阅读:41400
看到微信公众平台,开始有点兴奋,能做个机器人玩玩,随后用Node.js写了一个,觉得其实这没什么意思,很快就觉得腻了,于是有了做发送微信接口的想法。首先要做的我们就要模拟公众平台的登陆。对于微信的这些lib,当然不能直接写在routes里面,那要怎么办呢?没错,就要封装起来,方便复用。你可以打开控制台看到公众平台的登录请求,还有所需的参数,其中密码它是用它本身的md5进行加密的,那么我们需要做的只是将它copy过来放在一个helpers/wx/md5.js文件里就可以直接用了,以下是微信公众平台解析后格式化的js提交代码:submit:function(){if(!n())return;vare=d.getVal();t.post("/cgi-bin/login?lang=zh_CN",{username:e.account,pwd1:t.md5(e.password.substr(0,15)),pwd2:t.md5(e.password),imgcode:f.data("isHide")?"":e.verify,register:e.isRegister,f:"json"},复制代码我们要建立一个login的方法:request=require'superagent'require__basename+'/helpers/wx/md5'config=require__basename+'/config/config'module.exports=login:(fn)->wx_usr=config.wx.userwx_pwd=md5config.wx.pwd.substr(0,16)request.post('http://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN').type('form').send(username:wx_usrpwd:wx_pwdimgcode:''f:'json'register:0).end(res)->//在这里你已经成功获取cookie了复制代码但是经过分析我想你会发现,这里的cookie其实并非你想要的cookie,因为它包含一些没用的信息Path=,我们设置cookie的时候,事实上是不能用直接设置这样的cookie,应该是一个cookie里面不应该有其他的东西,而分号后面的path应该将它去掉,这里是返回的结果:["mp_user=xxxxxx;Path=/","mp_sid=NlJ2Tm5hb1NXRGxOU3V1MzF2a25tSFVWRHhTNkhwek1nMXlEOVZzMnZMUG1lZ29nSkdENGt3WlgwUjBJZnhydndYNkZSd0ZsaHRHdEozSHBIa3QwT3FWTmdXc3RxVFhYUDBCR3dnWkxIRWVvRlZObG15UC83SzU1aEZPZWpocU8=;Path=/"]复制代码以下是完整的login代码:login:(fn)->wx_usr=config.wx.userwx_pwd=md5config.wx.pwdrequest.post('http://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN').type('form').send(username:wx_usrpwd1:wx_pwdpwd2:wx_pwdimgcode:''f:'json').end(res)->cookie=''forrsinres.header['set-cookie']cookie+=rs.replace(/Path=\//g,'')fnnull,cookie复制代码在这里,我们已经完成登录的操作了,接下来,我们要做的是进行发送,在发送的时候,要把这个cookie设置在请求的地址中,接下来的代码比较简单:sender:(options,fn)->msg=options.msgfakeid=options.fakeidunlessmsgfnerror:'missingmsg'returnunlessfakeidfnerror:'missingfakeid'returnpsotParams=type:1content:msgerror:falsetofakeid:fakeidajax:1request.post('http://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response&lang=zh_CN').type('form').send(psotParams).set('Cookie',options.cookie).end(res)->fnnull,JSON.parseres.text复制代码这里,我们已经能完全发送了,因为返回的结果是一个json,所要最好先JSON.parse一下,里面的成功判断大家可以加上,返回的接口有个叫ret的参数,0为发送成功。{ret:"0",msg:"ok"}复制代码