sign.js 1.0 KB

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