关于微信公众平台网页授权获取用户基本信息的博文,网上已经有不少了,但是用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)


官方接口说明传送门