本文实例为大家分享了nodeJS微信分享的具体代码,供大家参考,具体内容如下
一、接入微信JSSDK
直接引用或者下载本地都行
二、JS请求node后台签名、随机数、时间戳之类的
调用的所有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之类的不知道是不是我环境的问题,我不能用最后只能自己写了四、nodeJS后台代码直接上整体代码
[javascript] view plain copy
var url = require('url');
var request = require('request');
var sha1 = require('sha1');
[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
- @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,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,url: url
};
var string = _this.rawString(ret);
var shaObjs = sha1(string);
return shaObjs;
};
}
module.exports = wxShare;