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

前言:微信小程序的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、代码效果图:

      

时间: 2024-10-13 08:58:20

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

微信OAuth2网页授权获取用户信息

文档:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html !!! 微信跟用户没有关系类接口采用了OAUTH2 [客户端模式(Client Credentials Grant)],而跟用户有关系的接口,采用OAuth2.0服务端[授权码模式(Authorization Code)]来获得用户的openid:另外需要注意的一点就是需要在开发者中心页配置授权回调域名,域名必须与设置的域名在同一个域下. 网页授权ac

微信开发第5章 通过accesstoken获取用户基本信息并修改用户备注

在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称.头像.性别.所在城市.语言和关注时间. 请注意,如果开发者有在多个公众号,或在公众号.移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求. UnionID机制说明: 开

Java微信公众平台开发(十六)--微信网页授权(OAuth2.0授权)获取用户基本信息

转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静下心来坚持一开始的选择,继续我们的微信系列文章的后续更新,也希望在自己有时间的时候能把更多的内容呈现给大家,前面一系列的文章讲述了很多微信开发相关的基础知识点 [微信系列文章],那么从这一篇开始将讲述微信较深一层次或者说在产品应用中时刻会用到的一些技术点,那么下面就让我们进入正题吧,这一篇我要讲述的

关于微信小程序拒绝授权后,重新授权并获取用户信息

最近公司做了一些有关微信小程序的项目,涉及到授权获取用户基本信息,但是在拒绝授权之后就不会再出现授权窗口: 看网上也有很多人遇到了同样的问题,所以记录下来我的处理方法,供大家和自己学习和记录: 当调用小程序 wx.getUserInfo(OBJECT) 获取用户基本信息时,需要用户进行授权操作,如果用户点击了拒绝,则再次调用该方法就不会出现对应的授权窗口,很是让人困惑: 找了许久,最后让我发现了它:------> wx.openSetting(OBJECT),下面让我们认识一下: wx.open

小程序中首次获取位置权限失败后,主动引导用户授权方案

最近做的"湖北垃圾治理"小程序 在初次进入监督举报页面后,会使用  wx.getLocation 调起用户的位置授权, 如果点击允许,则能在地图上显示当前定位:但是当用户点击取消后,就无法正常使用地图定位功能. 并且小程序会记录用户的这个授权设置,除了删除小程序再重新进入,否则位置权限就一直无法获得,地图一直无法定位. 因此我们需要主动引导用户给予位置权限.以下是代码: onLoad() { wx.getLocation({ type: "wgs84", succe

微信 oauth授权 获取用户的信息

应用场景 (1)点击菜单直接链接跳转,这样直接跳是获取不到用户的openid的,需要用到这个 (2)获取用户的一些基本信息,头像,呢称,需要用到这个 准备 需要在公众号里面配置一个应用域名,不配置这个的话,跳转后就是空白页面 步骤 (一) //$callback="一个回调的网址比如http://www.baidu.com/auth.php"; $param ['redirect_uri'] = $callback . '&getOpenId=1';//&getOpen

微信网页开发之获取用户unionID的两种方法--基于微信的多点登录用户识别

假设网站A有以下功能需求:1,pc端微信扫码登录:2,微信浏览器中的静默登录功能需求,这两种需求就需要用到用户的unionID,这样才能在多个登录点(终端)识别用户.那么这两种需求下用户的unionID该如何获取呢? 1,先看pc端的解决方案 以snsapi_login为scope发起网页授权,先拿网站应用的appid和secret用授权接口获取"网页授权access_token",再利用"网页授权access_token"通过"拉取用户信息的api接口&

微信开放批量获取用户基本信息接口,你还在一个个获取用户基本信息吗,是时候change了

在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称.头像.性别.所在城市.语言和关注时间. 请注意,如果开发者有在多个公众号,或在公众号.移动应用之间统一用户帐号的需求,需要前往微信开放平台(open.weixin.qq.com)绑定公众号后,才可利用UnionID机制来满足上述需求. UnionID机制说明: 开

微信公众号开发简单的网页授权登陆获取用户基本信息

由于业务需要,近期在做微信公众号开发,其中一个模块是微信用户点击个人中心访问可以得到次微信用户的头像昵称国家省份等基本信息. 但由于业务需求,这块功能暂时用不上了,但这功能的实现毕竟是自己花费几天时间搞出来的,觉得以后会用的上,暂且记录一下实现过程. 首先:获取用户信息的过程属于微信网页授权登陆,再做这一块之前请先阅读微信开发文档以熟悉基本的开发过程: https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842 微信开发文档