视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
使用nodeJS如何实现微信分享
2020-11-27 19:36:28 责编:小OO
文档


这篇文章主要为大家详细介绍了nodeJS微信分享的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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

一、接入微信JSSDK

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

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

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

三、nodeJS express 路由

/** 
 * 分享 
 */ 
router.post('/activityWxShaer', function(req, res, next) { 
 let hrefURL = req.body.urlhref; 
 wxShare.prototype.accessToken(hrefURL, function(data) { 
 res.json(data); 
 }); 
});

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

/** 
 * 签名 
 * @param {*} url 
 */ 
 sign(url) { 
 let _this = this; 
 var ret = { 
 jsapi_ticket: configEnd.ticket, 
 nonceStr: configEnd.nonceStr, 
 timestamp: configEnd.timestamp, 
 url: url 
 }; 
 var string = _this.rawString(ret); 
 var shaObjs = sha1(string); 
 return shaObjs; 
 }; 

四、nodeJS后台代码直接上整体代码
[javascript] view plain copy
var url = require('url'); 
var request = require('request'); 
var sha1 = require('sha1'); 
 
let config = { 
 appID: "",// 微信公众号ID 
 appSecret: "" //微信公众号里有 
 }, 
 configEnd = { 
 appID: '', 
 access_token: '', 
 ticket: '', 
 timestamp: '', // 必填,生成签名的时间戳 
 nonceStr: '', // 必填,生成签名的随机串 
 signature: '', // 必填,签名,见附录1 
 }; 
 
/** 
 * 微信分享 
 */ 
class wxShare { 
 /** 
 * 请求获取access_token 方法入口 
 * @param {* URL链接} hrefURL 
 * @param {* 回调请求方法} callback 
 */ 
 accessToken(hrefURL, callback) { // 获取access_token 
 let _this = this; 
 var tokenUrl = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' + config.appID + '&secret=' + config.appSecret; 
 request(tokenUrl, function(error, response, body) { 
 if (response.statusCode && response.statusCode === 200) { 
 body = JSON.parse(body); 
 configEnd.access_token = body.access_token; 
 _this.upJsapiTicket(hrefURL, body.access_token, callback) 
 } 
 }); 
 }; 
 /** 
 * 获取<span style="font-family:Arial;">Jsapi_Ticket</span> 
 * @param {* URL链接} hrefURL 
 * @param {* token} access_Ttoken 
 * @param {* 回调请求方法} callback 
 */ 
 upJsapiTicket(hrefURL, access_Ttoken, callback) { // Jsapi_ticket 
 let _this = this; 
 var ticketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + access_Ttoken + '&type=jsapi'; 
 request(ticketUrl, function(err, response, content) { 
 content = JSON.parse(content); 
 if (content.errcode == 0) { 
 configEnd.ticket = content.ticket; // ticket 
 configEnd.timestamp = _this.createTimestamp(); // 时间戳 
 configEnd.nonceStr = _this.createNonceStr(); // 随机数 
 configEnd.signature = _this.sign(hrefURL); // 签名 
 callback && callback(configEnd); // 回调前端JS方法 
 } 
 }) 
 }; 
 /** 
 * 随机字符串 
 */ 
 createNonceStr() { 
 return Math.random().toString(36).substr(2, 15); 
 }; 
 /** 
 * 时间戳 
 */ 
 createTimestamp() { 
 return parseInt(new Date().getTime() / 1000).toString(); 
 }; 
 /** 
 * 拼接字符串 
 * @param {*} args 
 */ 
 rawString(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; 
 }; 
 /** 
 * 签名 
 * @param {*} url 
 */ 
 sign(url) { 
 let _this = this; 
 var ret = { 
 jsapi_ticket: configEnd.ticket, 
 nonceStr: configEnd.nonceStr, 
 timestamp: configEnd.timestamp, 
 url: url 
 }; 
 var string = _this.rawString(ret); 
 var shaObjs = sha1(string); 
 return shaObjs; 
 }; 
 
} 
module.exports = wxShare;

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

上面是我整理给大家的,希望今后会对大家有帮助。

相关文章:

在nodejs中如何实现websocket通信功能

在js中如何实现绑定点击事件(详细教程)

通过Vue如何实现SSR(详细教程)

下载本文
显示全文
专题