JS-SDK 要点
微信测试号; 扫码登录;无需认证(只是名称统一为微信测试号)
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login签名验证
获取token
function getToken(config, cb) {
var tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appId=' + config.appId + '&secret=' + config.appSecret;
request.get(tokenUrl, function(error, response, body) {
if (error) {
cb('getToken error', error);
}
else {
try {
var token = JSON.parse(body).access_token;
cb(null, token);
}
catch (e) {
cb('getToken error', e);
}
}
});
}
获取ticket
function getNewTicket(token, cb) {
request.get('https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + token + '&type=jsapi', function(error, res, body) {
if (error) {
cb('getNewTicket error', error);
}
else {
try {
var ticket = JSON.parse(body).ticket;
cb(null, ticket);
}
catch (e) {
cb('getNewTicket error', e);
}
}
});
}
生成JS-SDK权限验证的签名了
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 + '&noncestr='+ noncestr+'×tamp=' + timestamp + '&url=' + u;
console.log(str);
var signature = crypto.createHash('sha1').update(str).digest('hex');
cb(null, {
appId: config.appId,
timestamp: timestamp,
nonceStr: noncestr,
signature: signature
});
踩过的坑
- 官方提供的 微信 JS 接口签名校验工具http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign中有一句话
对于没有只有域名没有 path 的 URL ,浏览器会自动加上 / 作为 path,如打开 http://qq.com 则获取到的 URL 为 http://qq.com/)
我很2的在所有URL最后加入/
(┬_┬); timesTamp
为parseInt(new Date().getTime() / 1000) + '';
- JS接口安全域名配置中,是配置域名+端口,不是网址!!
所以416973.dowei8.com:21119/tt
类似的网址只能配置为dowei8.com:21119
- 微信有缓存…. 有时是缓存问题………
完整代码
下载地址:
http://git.oschina.net/xinshangshangxin/node_JS-SDK_signature
映射外网/上传服务器
npm install
安装依赖包
node index.js
运行主程序
配置 JS接口安全域名
微信访问
参考文档
文章若有纰漏请大家补充指正,谢谢~~