填写完了开发者中心中的URL后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
参数 | 描述 |
---|---|
signature | 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。 |
timestamp | 时间戳 |
nonce | 随机数 |
echostr | 随机字符串 |
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
加密/校验流程如下:
- 将token、timestamp、nonce三个参数进行字典序排序
- 将三个参数字符串拼接成一个字符串进行sha1加密
- 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
var crypto = require("crypto");
exports.wechat = function (req, res) {
var echostr, nonce, signature, timestamp;
signature = req.query.signature;
timestamp = req.query.timestamp;
nonce = req.query.nonce;
echostr = req.query.echostr;
if(check(timestamp,nonce,signature,your_token)){
return res.send(echostr);
}else{
return res.end();
}
};
function check(timestamp, nonce, signature ,token) {
var currSign, tmp;
tmp = [token, timestamp, nonce].sort().join("");
currSign = crypto.createHash("sha1").update(tmp).digest("hex");
return currSign === signature;
};
具体步骤参考微信公众平台官方开发文档
http://mp.weixin.qq.com/wiki/17/2d4265491f12608cd170a95559800f2d.html