设为首页 收藏本站
查看: 1315|回复: 0

[经验分享] 关于微信的jsapi_ticket的获取方法;

[复制链接]

尚未签到

发表于 2017-2-25 10:25:49 | 显示全部楼层 |阅读模式
  对于一个从前端转到后端的开发人员来说,这个玩意儿开始的时候是有点郁闷;不过明白原理之后就简单了,
  获取jsapi_ticket;必须先获取access_token;
  微信开发文档说access_token的有效时间是7200秒(两小时);
  但没有说过期后怎么办,这里的access_token容易和网页授权的access_token搞混;
  后者有刷新地址,前者没有,那怎么办呢,听好了,过期后重新获取;
  一般做网站开发,必须把access_token和jsapi_ticket存到服务器,并且根据过期时间定期更新,这个后期再说;
  现在主要实验,获取jsapi_ticket,并生成前端页面需要注入的数据,从而使前端页面使用js-sdk的权限;
  这里有一个容易忽视的小tips,微信前面要求设置js安全域名时,填入的是域名而不是utl;
  nodejs为前端页面提供jsapi_ticket的代码实现如下;
  从第43行开始;



1 var express = require('express');
2 var cookieParser = require('cookie-parser');
3 var bodyParser = require('body-parser');
4 var OAuth = require('wechat-oauth');
5 var request = require('request');
6 var sha1 = require('sha1');
7 var path = require('path');
8 var app = express();
9 app.use(bodyParser.json());
10 app.use(bodyParser.urlencoded({ extended: false }));
11 app.use(cookieParser());
12 app.use(express.static('public'));
13 var port = 18080;
14 var appid = 'wx75340481908402a8';
15 var appsecret = '2b6ee0cbeec0114eb539e68ba356329b';
16
17 //首先拼接url
18 var  url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx75340481908402a8&redirect_uri=http%3a%2f%2fwechatapp1.duapp.com%2fcallback&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"
19 app.get('/test',function(req,res){
20     res.redirect(url);
21 });
22 //四步请求打法;
23 //第一步:获得code;
24 app.get('/callback',function(req,res){
25     var code  = req.query.code;
26     var url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' + appid + '&secret=' + appsecret + '&code=' + code + '&grant_type=authorization_code';
27     //第二步:获得token
28     request.get(url,function(err,response,body) {
29         var json = JSON.parse(body);
30         var refreshUrl = 'https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=' + appid + '&grant_type=refresh_token&refresh_token=' + json.refresh_token;
31         //第三步:获得refreshtoken和openId;
32         request.get(refreshUrl,function (err,response,refresh) {
33             var json = JSON.parse(refresh);
34             var infoUrl = 'https://api.weixin.qq.com/sns/userinfo?access_token=' + json.access_token + '&openid=' + json.openid + '&lang=zh_CN';
35             //第四步:通过上一步刷新得来的refresh和openId请求用户信息;
36             request.get(infoUrl,function(err,response,info) {
37                 var info = JSON.parse(info);
38                 res.send(info);
39             });
40         });
41     });
42 });
43 //1、设置api接口,使前端通过ajax可以获取jsapi-sdk;
44 app.get('/wechat/ticket',function (req, res) {
45     var page = req.query.page;
46     var t = {};
47     var url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='+appid+'&secret='+appsecret;
48     //2、获取access_token;
49     request.get(url,function(err, response, body) {
50         var token = JSON.parse(body);
51         var ticketUrl = 'https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=' + token.access_token + '&type=jsapi';
52         //3、获取ticket并且生成随机字符串,时间戳,签名
53         request.get(ticketUrl, function(err, response, ticket) {
54             var data = JSON.parse(ticket);
55             var timestamp = parseInt(new Date().getTime() / 1000);
56             t.ticket = data.ticket;
57             t.noncestr = sha1(new Date());
58             t.timestamp = timestamp;
59             var string = 'jsapi_ticket=' + t.ticket + '&noncestr=' + t.noncestr + '&timestamp=' + timestamp + '&url=' + page;
60             t.signature = sha1(string);
61             res.json(t);
62         });
63     });
64 });
65
66
67
68 app.listen(port);

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-346929-1-1.html 上篇帖子: ZIPKIN 下篇帖子: Node.js包(JXcore)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表