var sha1 = require('sha1') var createNonceStr = function () { return Math.random().toString(36).substr(2, 15); }; var createTimestamp = function () { return parseInt(new Date().getTime() / 1000) + ''; }; var raw = function (args) { var keys = Object.keys(args); keys = keys.sort() var newArgs = {}; keys.forEach(function (key) { newArgs[key.toLowerCase()] = args[key]; }); var string = ''; for (var k in newArgs) { string += '&' + k + '=' + newArgs[k]; } string = string.substr(1); return string; }; /** * @synopsis 签名算法 * * @param jsapi_ticket 用于签名的 jsapi_ticket * @param url 用于签名的 url ,注意必须动态获取,不能 hardcode * * @returns */ var sign = function (jsapi_ticket, url) { var ret = { jsapi_ticket: jsapi_ticket, noncestr: createNonceStr(), timestamp: createTimestamp(), url: url //**注意这个url巨坑,例如在浏览器输入http://xx.com/,那么这里的url就必须一致少一个符号都不行,如果是http://xx.com/#/aa,那么就取值http://xx.com/, }; // var string = raw(ret); // jsSHA = require('jssha'); // shaObj = new jsSHA(string, 'TEXT'); // ret.signature = shaObj.getHash('SHA-1', 'HEX'); ret.signature = sha1('jsapi_ticket=' + ret.jsapi_ticket + '&noncestr=' + ret.noncestr + '×tamp=' + ret.timestamp + '&url=' + ret.url) return ret; }; module.exports = sign;