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

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

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

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

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

var app = getApp()

var loginStatus = true;//默认授权成功
var getPromission = function (that) {
if (!loginStatus) {
// 显示提示弹窗
wx.showModal({
title: '温馨提示',
content: '您确定不授权[西厢房乡居生活]小程序吗?部分功能可能会收到影响',
success: function (res) {
if (res.confirm) {
console.info("1授权失败返回数据");
wx.showToast({
title: '授权失败,您可能有部分功能无法使用',
icon: 'success',
duration: 5000
})
} 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("1成功获取用户返回数据");
that.setData({
userInfo: data.userInfo,
})
console.info(data.userInfo);
// --------- 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(0);
console.log(res.data);
},
fail: function (res) {
console.log(1);
},
complete: function (res) {
console.log(2);
},
})
app.globalData.userInfo = that.data.userInfo; //用户所有信息放在globalData
wx.setStorageSync('userInfo', that.data.userInfo);//存储userInfo

},
fail: function () {
console.info("2授权失败返回数据");
wx.showToast({
title: '授权失败,您可能有部分功能无法使用',
icon: 'success',
duration: 5000
})
} });
}
}
},
fail: function () {
console.info("设置失败返回数据");
} })
}
}
})
} else {
wx.login({
success: function (res) {
if (res.code) {
wx.getUserInfo({
withCredentials: false,
success: function (data) {
console.info("2成功获取用户返回数据");
that.setData({
userInfo: data.userInfo,
})
},
fail: function () {
console.info("3授权失败返回数据");
loginStatus = false;
// 显示提示弹窗
wx.showModal({
title: '温馨提示',
content: '您确定不授权[西厢房乡居生活]小程序吗?部分功能可能会收到影响',
success: function (res) {
if (res.confirm) {
console.info("4授权失败返回数据");
wx.showToast({
title: '授权失败,您可能有部分功能无法使用',
icon: 'success',
duration: 5000
})
} 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,
})
// --------- 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(0);
console.log(res.data);
},
fail: function (res) {
console.log(1);
},
complete: function (res) {
console.log(2);
},
})
app.globalData.userInfo = that.data.userInfo; //用户所有信息放在globalData
wx.setStorageSync('userInfo', that.data.userInfo);//存储userInfo

},
fail: function () {
console.info("5授权失败返回数据");
wx.showToast({
title: '授权失败,您可能有部分功能无法使用',
icon: 'success',
duration: 5000
})
} });
}
}
},
fail: function () {
console.info("设置失败返回数据");
} });
}
}
});
} });
}
},
fail: function () {
console.info("登录失败返回数据");
} });
}
} Page({
data: { }, onLoad: function () { },
onShow:function(){
var that = this
//调用应用实例的方法获取全局数据
app.getUserInfo(function (userInfo) {
console.log(userInfo);
if (userInfo == null) {
console.log('ccc');
getPromission(that);
} })
}
})

重点:getPromission放置的位置很重要,到底是放在onload还是onshow呢?其实看情况区分的。

Answer:1)放在onshow页面:如果你是在tarBar页面(主页面),请将getPromission放在onshow方法里面,因为进入小程序的主页面总共只加载一次onload和onReady,而onshow却每次都加载,实际环境中,我们肯定是希望未授权的用户每次进入该页面都询问一次是否授权。

                 2)放在onload页面:如果你是在内置页(各种详情页、非tarbar页),请将getPromission放在onload页面,因为每次进入详情页都会加载一次onload。

6、代码效果图:

      

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

  1. 微信测试号开发之九 微信网页授权:页面获取用户openid

    原文链接:https://blog.csdn.net/qq_37936542/article/details/78981369 一:配置接口 注意:这里填写的是域名(是一个字符串),而不是URL,因此 ...

  2. Request 获取根据页面获取用户输入判断登陆成功或者失败

    import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.serv ...

  3. Web页面获取用户控件页面中服务器控件的值

    用户控件页面后台: public string P_Name{get { return txt_P_name.Value; }set { txt_P_name.Value = value; }} We ...

  4. 微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

  5. 微信网页授权,获取微信code,获取access_tocken,获取用户信息

    微信开发中,经常有这样的需求:获得用户头像.绑定微信号给用户发信息.. 那么实现这些的前提就是授权!   1.配置安全回调域名: 在微信公众号请求用户网页授权之前,开发者需要先到公众平台官网中的“开发 ...

  6. 第八篇 :微信公众平台开发实战Java版之如何网页授权获取用户基本信息

    第一部分:微信授权获取基本信息的介绍 我们首先来看看官方的文档怎么说: 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域 ...

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

    在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的.对于不同公众号,同一用户的openid不同).公众号可通过本接口来根据Op ...

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

    文档:http://mp.weixin.qq.com/wiki/17/c0f37d5704f0b64713d5d2c37b468d75.html !!! 微信跟用户没有关系类接口采用了OAUTH2 [ ...

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

    转自:http://www.cuiyongzhi.com/post/78.html 好长时间没有写文章了,主要是最近的工作和生活上的事情比较多而且繁琐,其实到现在我依然还是感觉有些迷茫,最后还是决定静 ...

随机推荐

  1. Selenium2+python自动化57-捕获异常(NoSuchElementException)

    前言 在定位元素的时候,经常会遇到各种异常,为什么会发生这些异常,遇到异常又该如何处理呢? 本篇通过学习selenium的exceptions模块,了解异常发生的原因. selenium+python ...

  2. LaTeX快速入门-蔡炎龙

    蔡老师的这个文档只有26页,非常简短称得上是快速入门的文档了,TeX的基本入门这个文档还做不到,仅仅是一个简单的引子,让大家管中窥豹,先简单使用,然后才会更加深入进去. 文档早一个版本是用CJK排版的 ...

  3. 【BZOJ】【2219】数论之神

    中国剩余定理+原根+扩展欧几里得+BSGS 题解:http://blog.csdn.net/regina8023/article/details/44863519 新技能get√: LL Get_yu ...

  4. Flume NG 配置详解(转)

    原文链接:[转]Flume NG 配置详解 (说明,名词对应解释 源-Source,接收器-Sink,通道-Channel) 配置 设置代理 Flume代理配置存储在本地配置文件.这是一个文本文件格式 ...

  5. 解决Ubuntu下的Eclipse打开Windows编写的java代码的中文乱码

    其实所有的中文乱码 问题都是编码不同所导致的.这里要想让eclipse能正常显示出汉字,就要修改它的字符编码 步骤如下: 1 ,点击菜单栏中的Window(窗口),选择Preferences(首选项) ...

  6. Bridge 桥接模式 MD

    桥接模式 简介 将抽象部分与实现部分分离,使它们都可以独立的变化. 业务抽象角色引用业务实现角色,或者说业务抽象角色的部分实现是由业务实现角色完成的 Bridge模式基于类的最小设计原则,通过使用封装 ...

  7. SQL中以count或sum为条件的查询方式

    在开发时,我们经常会遇到以“累计(count)”或是“累加(sum)”为条件的查询.比如user_num表: id user num 1 a 3 2 a 4 3 b 5 4 b 7   例1:查询出现 ...

  8. C#汉字转拼音,可识别多音字,带声调,提供正向、逆向、双向分词算法的小程序

    用C#写了个汉字转拼音的小工具,和网上大部分工具不同,这个通过分词算法,解决了多音字的问题,并且提供声调,可开可关. 如题,用"银行 行不行 行家说了算"举例,如果转拼音却不能识别 ...

  9. Java基础(八):多态

    一.多态的理解: 多态是同一个行为具有多个不同表现形式或形态的能力. 多态就是同一个接口,使用不同的实例而执行不同操作,如图所示: 多态性是对象多种表现形式的体现:现实中,比如我们按下 F1 键这个动 ...

  10. jqGrid常用属性和方法介绍

    jqGrid API中文手册:http://blog.mn886.net/jqGrid/ 一.jqGrid属性: width:Grid的宽度,如果未设置,则宽度应为所有列宽的之和:如果设置了宽度,则每 ...