若是想在微信公衆號上讓用戶體驗更多的功能,而不單單是讓公衆號像機器人同樣收發有限的信息,你就要成爲微信平臺開發者,自主開發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)後端
而後在微信開發者中內心點提交,就能夠了。安全