当前位置:Gxlcms > JavaScript > nodeJS微信分享

nodeJS微信分享

时间:2021-07-01 10:21:17 帮助过:5人阅读

本文实例为大家分享了nodeJS微信分享的具体代码,供大家参考,具体内容如下

一、接入微信JSSDK

直接引用或者下载本地都行

二、JS请求node后台签名、随机数、时间戳之类的

  1. function getWxSignature() {
  2. $.ajax({
  3. url: "/activityWxShaer",
  4. type: 'post',
  5. data: { urlhref:location.href },
  6. success: function(jsons) {
  7. var data = JSON.parse(jsons);
  8. wx.config({
  9. debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  10. appId: 'xxxxxxxxx', // 必填,公众号的唯一标识
  11. timestamp: data.timestamp, // 必填,生成签名的时间戳
  12. nonceStr: data.nonceStr, // 必填,生成签名的随机串
  13. signature: data.signature, // 必填,签名,见附录1
  14. jsApiList: [
  15. 'onMenuShareTimeline',
  16. 'onMenuShareAppMessage',
  17. 'onMenuShareQQ',
  18. 'onMenuShareWeibo',
  19. 'onMenuShareQZone'
  20. ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  21. });
  22. shareFunc();// 微信的分享接口 里面为ready
  23. }
  24. });
  25. }

三、nodeJS express 路由

  1. /**
  2. * 分享
  3. */
  4. router.post('/activityWxShaer', function(req, res, next) {
  5. let hrefURL = req.body.urlhref;
  6. wxShare.prototype.accessToken(hrefURL, function(data) {
  7. res.json(data);
  8. });
  9. });

四、nodeJS签名,微信重点签名,我是采用sha1 ,我看了好多都是用sha-1,HEX之类的不知道是不是我环境的问题,我不能用最后只能自己写了

  1. /**
  2. * 签名
  3. * @param {*} url
  4. */
  5. sign(url) {
  6. let _this = this;
  7. var ret = {
  8. jsapi_ticket: configEnd.ticket,
  9. nonceStr: configEnd.nonceStr,
  10. timestamp: configEnd.timestamp,
  11. url: url
  12. };
  13. var string = _this.rawString(ret);
  14. var shaObjs = sha1(string);
  15. return shaObjs;
  16. };
  17. 四、nodeJS后台代码直接上整体代码
  18. [javascript] view plain copy
  19. var url = require('url');
  20. var request = require('request');
  21. var sha1 = require('sha1');
  22. let config = {
  23. appID: "",// 微信公众号ID
  24. appSecret: "" //微信公众号里有
  25. },
  26. configEnd = {
  27. appID: '',
  28. access_token: '',
  29. ticket: '',
  30. timestamp: '', // 必填,生成签名的时间戳
  31. nonceStr: '', // 必填,生成签名的随机串
  32. signature: '', // 必填,签名,见附录1
  33. };
  34. /**
  35. * 微信分享
  36. */
  37. class wxShare {
  38. /**
  39. * 请求获取access_token 方法入口
  40. * @param {* URL链接} hrefURL
  41. * @param {* 回调请求方法} callback
  42. */
  43. accessToken(hrefURL, callback) { // 获取access_token
  44. let _this = this;
  45. var tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + config.appID + '&secret=' + config.appSecret;
  46. request(tokenUrl, function(error, response, body) {
  47. if (response.statusCode && response.statusCode === 200) {
  48. body = JSON.parse(body);
  49. configEnd.access_token = body.access_token;
  50. _this.upJsapiTicket(hrefURL, body.access_token, callback)
  51. }
  52. });
  53. };
  54. /**
  55. * 获取<span style="font-family:Arial;">Jsapi_Ticket</span>
  56. * @param {* URL链接} hrefURL
  57. * @param {* token} access_Ttoken
  58. * @param {* 回调请求方法} callback
  59. */
  60. upJsapiTicket(hrefURL, access_Ttoken, callback) { // Jsapi_ticket
  61. let _this = this;
  62. var ticketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + access_Ttoken + '&type=jsapi';
  63. request(ticketUrl, function(err, response, content) {
  64. content = JSON.parse(content);
  65. if (content.errcode == 0) {
  66. configEnd.ticket = content.ticket; // ticket
  67. configEnd.timestamp = _this.createTimestamp(); // 时间戳
  68. configEnd.nonceStr = _this.createNonceStr(); // 随机数
  69. configEnd.signature = _this.sign(hrefURL); // 签名
  70. callback && callback(configEnd); // 回调前端JS方法
  71. }
  72. })
  73. };
  74. /**
  75. * 随机字符串
  76. */
  77. createNonceStr() {
  78. return Math.random().toString(36).substr(2, 15);
  79. };
  80. /**
  81. * 时间戳
  82. */
  83. createTimestamp() {
  84. return parseInt(new Date().getTime() / 1000).toString();
  85. };
  86. /**
  87. * 拼接字符串
  88. * @param {*} args
  89. */
  90. rawString(args) {
  91. var keys = Object.keys(args);
  92. keys = keys.sort()
  93. var newArgs = {};
  94. keys.forEach(function(key) {
  95. newArgs[key.toLowerCase()] = args[key];
  96. });
  97. var string = '';
  98. for (var k in newArgs) {
  99. string += '&' + k + '=' + newArgs[k];
  100. }
  101. string = string.substr(1);
  102. return string;
  103. };
  104. /**
  105. * 签名
  106. * @param {*} url
  107. */
  108. sign(url) {
  109. let _this = this;
  110. var ret = {
  111. jsapi_ticket: configEnd.ticket,
  112. nonceStr: configEnd.nonceStr,
  113. timestamp: configEnd.timestamp,
  114. url: url
  115. };
  116. var string = _this.rawString(ret);
  117. var shaObjs = sha1(string);
  118. return shaObjs;
  119. };
  120. }
  121. module.exports = wxShare;

就一普通的ajax请求nodeJS后台,后台返回封装好的数据。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

人气教程排行