nodejs mysql 工具类_基于nodejs的微信工具类——小封装

varhttp=require("https");

varparse= require('url').parse;

varconfig= require('../conf/config.js').config();

variconv= require('iconv-lite');

varr=require('./r.js');

varcrypto= require('crypto');

functionget(url,callback){

varinfo=parse(url);

varoptions= {

hostname: info.hostname,

port: info.port,

path: info.path,

method: 'GET'};

varreq= http.request(options, function(res) {

res.on('data', function(chunk) {

// console.log('BODY: ' + chunk);callback(null,chunk);//返回结果});

});

req.on('error', function(e) {

console.log('problem with request: '+ e.message);

callback(e,null);

});

req.end();

}

//网页授权后提交页面到微信接口,此时需要拿到用户的微信一些信息,用于插入操作functiongetWeiXinUser(req,param,callback){

//得到access_tokenvarurl="https://api.weixin.qq.com/sns/oauth2/access_token?appid="+config.weixin.appid+"&secret="+config.weixin.secret+"&code="+param.code+"&grant_type=authorization_code";

get(url,function(err,res){

if(err){

console.error(err);

callback(err,null);

}

//只返回结果varjson= JSON.parse(iconv.decode(res, 'UTF-8'));

if(json.openid&&r.loadFromCache(json.openid)){

varuser=r.loadFromCache(json.openid).data;//data才是user里面的内容callback(null,user);//如果数据中有}else{

if(json.access_token) {

验证access_token是否有效varinvalidAT= "https://api.weixin.qq.com/sns/auth?access_token="+ json.access_token + "&openid="+ json.openid;

get(invalidAT, function(err, resAcc) {

varaccResult= JSON.parse(iconv.decode(resAcc));

if(accResult.errcode != 0) {

//此时access_token有效,重新刷新access_token,再传入数据当中varurl= "https://api.weixin.qq.com/sns/oauth2/refresh_token?appid="+ config.weixin.appid+ "&grant_type=refresh_token&refresh_token=REFRESH_TOKEN";

get(url, function(errR, resR) {

varnewResult= JSON.parse(iconv.decode(resR));

if(newResult.errcode == undefined) {

getUserInfo(newResult, function(err, user) {

callback(err, user);

});

} else{

callback(err, null);

}

})

} else{

if(json.errcode == undefined) {//报错时直接退出,不进入查询userInfo的页面getUserInfo(json, function(err, user) {

callback(err, user);

});

} else{

callback(err, null);

}

}

});

}else{

callback(err,null);//授权code处已失败}

}

});

}

//得到用户信息functiongetUserInfo(param,callback){

varurlInfo= "https://api.weixin.qq.com/sns/userinfo?lang=zh_CN&access_token="+ param.access_token + "&openid="+ param.openid;

get(urlInfo, function(err, response) {

varuser= JSON.parse(iconv.decode(response, 'UTF-8'));

r.writeToCache(user.openid,user,config.weixin.sessionTime);//openid==>user cachecallback(null, user);

});

}

functiongetInfoForJsSDK(req,callback){//在微信中打开页面形式是否可以调用对应的jsjdkvaracToUrl='https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='+config.weixin.appid+'&secret='+config.weixin.secret;

get(acToUrl,function(err,res){

varacToObj=JSON.parse(iconv.decode(res,"UTF-8"));

varaccessToken=acToObj.access_token;

varticketUrl="https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type=jsapi";//get(ticketUrl,function(err,resTick){

varticketObj=JSON.parse(iconv.decode(resTick,"UTF-8"));

varticket=ticketObj.ticket;

callback(err,sign(ticket,"http://"+req.headers.host+req.url));//得到签名});

});

}

varcreateNonceStr= function() {

returnMath.random().toString(36).substr(2, 15);

};

varcreateTimestamp= function() {

returnparseInt(newDate().getTime() / 1000) + '';

};

varraw= function(args) {

varkeys= Object.keys(args);

keys= keys.sort()

varnewArgs= {};

keys.forEach(function(key) {

newArgs[key.toLowerCase()] = args[key];

});

varstring= '';

for(varkinnewArgs) {

string+= '&'+ k+ '='+ newArgs[k];

}

string= string.substr(1);

returnstring;

};

varsign= function(jsapi_ticket, url) {

varret= {

jsapi_ticket: jsapi_ticket,

nonceStr: createNonceStr(),

timestamp: createTimestamp(),

url: url

};

varstring= raw(ret);

jsSHA= require('jssha');

shaObj= newjsSHA(string, 'TEXT');

ret.signature= shaObj.getHash('SHA-1', 'HEX');

ret.appid=config.weixin.appid;

ret.secret=config.weixin.secret;

returnret;

};

//exports.get=get;exports.getWeiXinUser=function(req,param){

return function(callback) {

getWeiXinUser(req,param,callback);

};

};

exports.getInfoForJsSDK=function(req){

return function(callback){

getInfoForJsSDK(req,callback);//得到签名}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值