【微信小程序】用户首次进入小程序拒绝授权,如何再次调用授权页面,获取用户信息userInfo

时间:2017-09-01 18:19:27   收藏:0   阅读:1285

前言:微信小程序的app.js里面,最少有2个接口,一个wx.login;一个是wx.getUserInfo; 前者得到腾讯给我们的微信用户唯一的code,通过code获取openid,这个不需要用户授权,我们肯定能得到;

          但是,后者是需要用户授权,我们才能通过腾讯得到用户的其他信息,比如nickname、avatarUrl、encryptedData、iv等,如果你只需要openid,下面的代码你可以不用看了,下面重点讲解如何

          多次调用wx.getUserInfo或者app.getUserInfo接口获取用户的nickname、avatarUrl等信息。

1、我们知道,微信用户首次进入小程序,会进行授权请求,有的用户可能会选择拒绝授权,那么我们调用的wx.getUserInfo接口返回fail;

可能展示型功能并不影响(如信息展示页),交互型功能肯定是影响的(如下单、支付、注册等)

2、如何再次调用wx.getUserInfo或者app.getUserInfo接口去获取用户的nickName、avatarUrl、等其他重要信息呢(这里不包括openid的,你可以在wx.login通过code获取openid,这里不讲获取获得code,自行百度)

3、比如说,我们可以在小程序>个人中心页面,用户点击【我】的时候,在onload或者onReady时候,调用下面这个方法,执行:再次确认是否授权->用户授权->获取userInfo(包含:nickname、avatarUrl等)->自定义操作(比如注册、或者 将获得的用户nickname和avatarUrl 现实在页面上)->其他操作 

4、方法代码:其中【私人订制】这里是自己进行php后台注册的一个过程,你们根据自己需求进行开发

var loginStatus = true;//默认授权成功
var getPromission = function (that) {
  if (!loginStatus) {
    wx.openSetting({
      success: function (data) {
        if (data) {
          if (data.authSetting["scope.userInfo"] == true) {
            loginStatus = true;
            wx.getUserInfo({
              withCredentials: false,
              success: function (data) {
                console.info 

("2成功获取用户返回数据");
                console.info 

(data.userInfo);
              },
              fail: function () {
                console.info 

("2授权失败返回数据");
              }              });
          }
        } 
      },
      fail: function () {
        console.info 

("设置失败返回数据");
      }        });
  } else {
    wx.login({
      success: function (res) {
        if (res.code) {
                    wx.getUserInfo({
            withCredentials: false,
            success: function (data) {
              console.info 

("1成功获取用户返回数据");
              console.info 

(data.userInfo);
            },
            fail: function () {
              console.info 

("1授权失败返回数据");
              loginStatus = false;
              // 显示提示弹窗
              wx.showModal({
                title: ‘温馨提示‘,
                content: ‘您确定不授权[西厢房乡居生活]小程序吗?部分功能可能会收到影响‘,
                success: function (res) {
                  if (res.confirm) {
                    console.log(‘用户点击确定‘)
                  } else if (res.cancel) {
                    wx.openSetting({
                      success: function (data) {
                        if (data) {
                          if (data.authSetting["scope.userInfo"] == true) {
                            loginStatus = true;
                            wx.getUserInfo({
                              withCredentials: false,
                              success: function (data) {
                                console.info 

("3成功获取用户返回数据");
                                console.info 

(data.userInfo);
                                //更新数据
                                that.setData({
                                  userInfo: data.userInfo,
                                  "openid": wx.getStorageSync(‘openid‘)
                                })
        // --------- 4、发起后台注册请求(私人定制) ------------------
                                wx.request({
                                  url: ‘https://m.******.com/index.php/Home/Xiaoxxf/register 

‘,
                                  data: {
                                    ‘nickName‘: data.userInfo.nickName,
                                    ‘openid‘: wx.getStorageSync(‘openid‘)
                                  },
                                  header: {
                                    "Content-Type": "application/x-www-form-urlencoded"
                                  },
                                  method: ‘POST‘,
                                  dataType: ‘JSON‘,
                                  success: function (res) {
                                    console.log(res.data);
                                  },
                                  fail: function (res) {
                                  },
                                  complete: function (res) {
                                  },
                                })

                app.globalData.userInfo = that.data.userInfo;  //用户所有信息放在globalData
                wx.setStorageSync(‘userInfo‘, that.data.userInfo.userInfo);//存储userInfo 

                              },
                              fail: function () {
                                console.info 

("3授权失败返回数据");
                              }                               });
                          }
                        }
                      },
                      fail: function () {
                        console.info 

("设置失败返回数据");
                      }                       });
                  }
                }
              });
            }             });
        }
      },
      fail: function () {
        console.info 

("登录失败返回数据");
      } });
  }
}

5、使用Demo:小程序JS

var app = getApp()

var loginStatus = true
var getPromisson = function(){

   //---   上面的方法体   ---- 

}

Page({
  onLoad: function () {
    var that = this

    //调用应用实例的方法获取全局数据,如果用户首次拒绝,那么这里的数据就是null
    app.getUserInfo(function (userInfo) {
      console.log(userInfo);
      //更新数据
      that.setData({
        userInfo: userInfo,//如果首次进入拒绝授权,那么这里==null,不要加引号‘‘
        "openid":wx.getStorageSync(‘openid‘)
      })
    })
    if(that.data.userInfo==null){
      getPromission(that);
    }

}

})

 

6、代码效果图:

技术分享   技术分享   技术分享 

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!