分享給每個想統治宇宙的Jser。node
前言:作外包遇到最多的就是基於微信的H5頁面。作這種頁面js-sdk引入是必須的。萬惡的TX把這個東西作到了綁定域名,要計算驗證才能使用。我苦逼的小小jser又如何去慢慢一步步摸索過來的呢。聽我慢慢訴說。express
首先你的申請一個測試者帳號,點我大跳轉門--> 傳送門npm
第一項「測試號信息」有你的app ID和appsercet。先不要管他。數組
第二項的接口配置和信息,這裏填寫的URL,就是你的服務器IP:http:// +IP地址。
Token就是你和微信約定好的一個字符串,你喜歡填寫什麼就填寫什麼。隨意填寫的一個字符串。後面解析請求的時候用到(這一步先填寫好,不能按提交那麼快)安全
第三項:JS接口安全域名。這個是萬惡的根源,填上你本身的域名。最好就是根域名,這樣的話,在這個根之下的域名的頁面都能用到。服務器
下面的幾項和此次的無關,不說了,跳回去咱們的sublime編輯代碼去。微信
回到咱們的代碼去,服務器後臺用node+express的,首先咱們要處理上面沒有確認的一個配置信息。當咱們填好URL+Token以後點擊提交的話,微信會向你的服務器發送信息,你要解析一遍以後返回正確的信息,這一步的配置才能成功。
因此咱們就在router裏面加一個get的處理
//來自微信的信息
router.get('/',function(req,res,next){});
//不是來自微信的信息
router.get('/', function(req, res, next) {app
res.render('index', {title:'hello !'});
});測試
這時候get過來的信息有四個:ui
signature: 微信加密簽名,signature結合了開發者填寫的token參數和請求中
timestamp參數、nonce參數。
timestamp:時間戳
nonce: 隨機數
echostr:隨機字符串
整個驗證過程簡單來講就是這麼一個過程:
經過檢驗signature對請求進行校驗: 若確認這次GET請求來自微信服務器,請原樣返回>echostr參數內容,則接入生效,成爲開發者成功, 不然接入失敗。
加密/校驗流程以下:
1.將token(服務器內定義)、timestamp、nonce三個參數進行字典序排序
2.將三個參數字符串拼接成一個字符串進行sha1加密
3.開發者得到加密後的字符串可與signature對比,標識該請求來源於微信
好了,前面說了那麼多廢話,如今開始進行代碼,show your 本事 in code
預熱工做:由於裏面用sha1加密,使用crypto模塊是個不錯的選擇
npm install crypto --save
來到router裏面,咱們引入這個模塊
var crypto = require('crypto');
而後開始處理信息了
var TOKEN = 'sanyuelanv'; /*來自微信的信息*/ router.get('/',function(req,res,next){ var query = req.query; /*取出四個值*/ var signature = query.signature; var echostr = query.echostr; var timestamp = query['timestamp']; var nonce = query.nonce; /*拼成數組,字典排序,再拼接*/ var tmpArr = [TOKEN,timestamp,nonce]; tmpArr.sort(); var tmpStr = tmpArr[0] + tmpArr[1] + tmpArr[2]; /*進行加密*/ var shasum = crypto.createHash('sha1'); shasum.update(tmpStr); var shaResult = shasum.digest('hex'); //來自微信的請求,就返回echostr if (shaResult == signature){res.send(echostr);} else{next();} });
這一段代碼下來,咱們提交到服務器以後,reload一下,再回到微信測試者賬號的頁面,把前面配置的確認肯定就提交上去,這是就OK了!下一篇文章再寫JSSDK驗證吧!