若是想在微信公众号上让用户体验更多的功能,而不单单是让公众号像机器人同样收发有限的信息,你就要成为微信平台开发者,自主开发web app。php
成为微信平台开发者的第一步,是配置一台web服务器。
第二步,是配置相关的参数,经过微信的开发者验证,而且把你的服务器地址告知微信服务器。这里单讲第二步。html
详细的配置步骤写在这里:微信公众平台开发者文档-接入指南node
我我的提炼一下这个过程的话,就是微信服务器生成了一系列随机字符,放在url的query里,而后根据你写的服务器地址,发送request。而你的服务器在收到了request以后,分别取出query的各项参数,按照他的规则拼接啦,哈希变化,而后再返回(response)一个值给微信服务器。微信服务器收到以后,若是等于服务器自己设定的那个值,就经过验证。python
后端语言有不少,php,python,node,还有windows平台的,咱们这里用node。web
下面是node源码,注意,该源码不是我原创,而是csdn博客-NoGrief的博客 的代码调试修改而来。ubuntu
var http = require("http"); var url = require("url"); var crypto = require("crypto"); function sha1(str){ var md5sum = crypto.createHash("sha1"); md5sum.update(str); str = md5sum.digest("hex"); return str; } function validateToken(req,res){ var query = url.parse(req.url,true).query; //console.log("*** URL:" + req.url); //console.log(query); var signature = query.signature; var echostr = query.echostr; var timestamp = query['timestamp']; var nonce = query.nonce; var oriArray = new Array(); oriArray[0] = nonce; oriArray[1] = timestamp; oriArray[2] = "*********";//这里是你在微信开发者中心页面里填的token,而不是**** oriArray.sort(); var original = oriArray.join(''); console.log("Original str : " + original); console.log("Signature : " + signature ); var scyptoString = sha1(original); if(signature == scyptoString){ res.end(echostr); console.log("Confirm and send echo back"); }else { res.end("false"); console.log("Failed!"); } } var webSvr = http.createServer(validateToken); webSvr.listen(8000,function(){ console.log("Start validate"); });
上面代码保存为tokenValidate.js或者任何你喜欢的名字。windows
你也许会问,为啥监听的是8000端口而不是80端口?
由于ubuntu下使用80端口很麻烦并且有安全问题,因此我上网查了资料,把8000端口的监听也改在80端口,这样一来,8000端口的信息会自动转到80端口去。
这是资料:StackOverFlow-Best practices when running Node.js with port 80(Ubuntu/Lincode)后端
而后在微信开发者中内心点提交,就能够了。安全