分享給每一個想統治宇宙的Jser。
介面資訊配置
前言:做外包遇到最多的就是基於微信的H5頁面。做這種頁面js-sdk引入是必須的。萬惡的TX把這個東西做到了繫結域名,要計算驗證才能使用。我苦逼的小小jser又如何去慢慢一步步摸索過來的呢。聽我慢慢訴說。
-
首先你的申請一個測試者賬號,點我大跳轉門--> 傳送門
-
第一項“測試號資訊”有你的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) {res.render(`index`, {title:`hello !`});
});
這時候get過來的資訊有四個:
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驗證吧!