关于微信公众平台网页授权获取用户基本信息的博文,网上已经有不少了,但是用nodejs开发的和nodejs开发公众平台的文章还是寥寥无几,今天就给大家介绍下nodejs获取用户基本信息的接口。
具体而言,网页授权流程分为四步:
1. 引导用户进入授权页面同意授权,获取code
2. 通过code换取网页授权access_token(与基础支持中的access_token不同)
3. 如果需要,开发者可以刷新网页授权access_token,避免过期
4. 通过网页授权access_token和openid获取用户基本信息
其实这四步之前还有一步就是在微信公众平台的后台设置域名,域名不用带http://,此域名下的子域名同样获得鉴权。如:www.baidu.com,或者像IP:Port。
然后我们来讲第一步,进入授权页面,我在这一步上就费解了好久,这个借口不同于自定义菜单,直接一个post借口就能解决。这个授权页面是个什么url呢,这个url又该放在哪呢?
首先这个授权页面是在菜单点击链接中或者图文信息的链接中,然后这个url格式如下:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxb857569c7c85fe56&redirect_uri=http://121.40.*.*/getUserInfo?action=viewtest&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect
https://open.weixin.qq.com/connect/oauth2/authorize是微信官方的接口,根据我们的参数,它给我们重定向到我们传递的地址参数redirect_uri,并带回code。
然后,我们来看第二步根据code换取网页授权access_token,和第四步根据access_token和openid获取用户基本信息。其实我们code是在http://121.40.*.*/getUserInfo中作为参数获取的,那么我们可以直接在getUserInfo的action中获取code参数,继而继续调用接口获取access_token和openid,最后获取用户基本信息。
想清此中关节,我们来看一下代码:
router.get(‘/getUserInfo‘, function(req, res) { var code = req.param("code"); console.log(code); var AppId = config.huaheng.AppId; var AppSecret = config.huaheng.AppSecret; var openidUrl = ‘https://api.weixin.qq.com/sns/oauth2/access_token?appid=‘ + AppId + ‘&secret=‘ + AppSecret + ‘&code=‘+code + ‘&grant_type=authorization_code‘; nodegrass.get(openidUrl,function(data,status,headers){ var access_token_info = JSON.parse(data); var access_token = access_token_info.access_token; var openid = access_token_info.openid; var getUserInfo = ‘https://api.weixin.qq.com/sns/userinfo?access_token=‘ + access_token + ‘&openid=‘ + openid + ‘&lang=zh_CN‘; nodegrass.get(getUserInfo,function(data,status,headers){ console.log(data); res.render(‘userinfo‘, JSON.parse(data)); },‘utf8‘).on(‘error‘, function(e) { console.log("Got error: " + e.message); }); },‘utf8‘).on(‘error‘, function(e) { console.log("Got error: " + e.message); }); });
这里我访问http请求用的是nodegrass模块,之前我尝试了https和needle,但是由于中文乱码都有问题,最后找到了nodegrass。获取到userinfo后将用户基本信息返回到userinfo的jade模板页面中。
下面看一下jade模板:
block content div.am-g.am-g-fixed.blog-g-fixed div.col-md-8.blog-main form.am-form h3.am-article-title a #{nickname} p.about-color #{nickname} if sex==1 p.about-color 男 else if sex==0 p.about-color 女 p.about-color #{country}-#{province}-#{city} img.headimg(src=headimgurl)
本文出自 “雪飘七月” 博客,请务必保留此出处http://xuepiaoqiyue.blog.51cto.com/4391594/1564031