1、申请测试号https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
获取免费的appID和appsecret
2、node验证服务器地址的有效性
router.get('/', function(req, res, next) { //1.获取微信服务器Get请求的参数 signature、timestamp、nonce、echostr var signature = req.query.signature,//微信加密签名 timestamp = req.query.timestamp,//时间戳 nonce = req.query.nonce,//随机数 echostr = req.query.echostr;//随机字符串 //2.将token、timestamp、nonce三个参数进行字典序排序 var array = ['helloegzh',timestamp,nonce]; array.sort(); //3.将三个参数字符串拼接成一个字符串进行sha1加密 var tempStr = array.join(''); const hashCode = crypto.createHash('sha1'); //创建加密类型 var resultCode = hashCode.update(tempStr,'utf8').digest('hex'); //对传入的字符串进行加密 //4.开发者获得加密后的字符串可与signature对比,标识该请求来源于微信 if(resultCode === signature){ res.send(echostr); }else{ res.send('mismatch'); } });
3、使用花生壳内网穿透(80端口)
4、填写url(http://xxx.xxx)和token(helloegzh)提示配置成功
5、node编写get请求获取access_token
// config.appId是测试号的appis,config.appSecret是测试号的appsecret var tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appId=' + config.appId + '&secret=' + config.appSecret;
access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存
6、JS-SDK接入
7、测试号绑定JS接口安全域名(不带http://)xxx.xxx
8、node编写get请求通过配置获得的access_token获取ticket
// token是通过配置获得的access_token var tiketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + token + '&type=jsapi';
9、ticket、随机字符串、随机时间戳、服务器地址算法签名生成
验证的签名算法:
1. 参与签名的字段包括noncestr(随机字符串), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分)(http://xxx.xxx/sdk)
2. 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,
3. 使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1。这里需要注意的是所有参数名均为小写字符。
4. 对signature 作sha1加密,字段名和字段值都采用原始值,不进行URL 转义。
function getTimesTamp() { return parseInt(new Date().getTime() / 1000) + ''; } function getNonceStr() { return Math.random().toString(36).substr(2, 15); } var timestamp = getTimesTamp(); // 随机时间 var noncestr = getNonceStr(); // 随机字符串 var str = 'jsapi_ticket=' + result.ticket + '&noncestr='+ noncestr+'×tamp=' + timestamp + '&url=' + url; var signature = crypto.createHash('sha1').update(str).digest('hex'); // crypto加密算法
10、微信 JS 接口签名校验工具
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
本文作者为gengboxb,转载请注明。