sign.js 1.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import jsSHA from './sha.js'
  2. const createNonceStr = function() {
  3. return Math.random().toString(36).substr(2, 15);
  4. };
  5. const createTimestamp = function() {
  6. return parseInt(new Date().getTime() / 1000) + '';
  7. };
  8. const raw = function(args) {
  9. let keys = Object.keys(args);
  10. keys = keys.sort()
  11. let newArgs = {};
  12. keys.forEach(function(key) {
  13. newArgs[key.toLowerCase()] = args[key];
  14. });
  15. let string = '';
  16. for (let k in newArgs) {
  17. string += '&' + k + '=' + newArgs[k];
  18. }
  19. string = string.substr(1);
  20. return string;
  21. };
  22. /**
  23. * @synopsis 签名算法
  24. *
  25. * @param jsapi_ticket 用于签名的 jsapi_ticket
  26. * @param url 用于签名的 url ,注意必须动态获取,不能 hardcode
  27. *
  28. * @returns
  29. */
  30. const sign = function(jsapi_ticket, url) {
  31. let ret = {
  32. jsapi_ticket: jsapi_ticket,
  33. nonceStr: createNonceStr(),
  34. timestamp: createTimestamp(),
  35. url: url
  36. };
  37. let string = raw(ret);
  38. let shaObj = new jsSHA(string, 'TEXT');
  39. ret.signature = shaObj.getHash('SHA-1', 'HEX');
  40. return ret;
  41. };
  42. module.exports = sign;