微信小程序-获取用户信息

阅读次数: 45,956

  • A+
所属分类:建站

 

当小程序需要登录操作时都需要获取用户的唯一标识openid,sessionKey,这将是判断当前用户是否登录的标识。

具体流程

一、首先我们需要判断小程序是否授权
1、我们可以利用wx.getUserInfo判断用户是否授权,通过授权就获取用户信息,否则显示引导授权页,引导用户授权,然后用bindgetuserinfo来判断用户点击了取消授权还是通过授权。当用户取消授权,继续弹出引导页,直到通过授权为止,通过授权,关闭引导页,用户可以正常使用小程序。
二、通过授权后,调用base.js
1、判断用户是否存在---存在(停止执行)--不存在(继续执行)
2、调用wx.login接口获取code,利用code传给后台获取openid,sessionKey,利用openid+用户信息组合为一个对象传给后台,后台插入完成返回所有信息,将后台返回的所有信息写入缓存,以便后续其他页面调用。
同时调用获取用户信息接口,获取到用户信息。
// -------------------------------------------------用户授权处理-----------------------------
---------------------------------------------------------------wxml部分---------

如果需要在哪个页面需要就引用

<include src="/template/getUserInfo.wxml" />
----------------------------------------写在公共部分---getUserInfo.wxml-----------
<!-- 自定义授权弹框 -->
<view class='getUserInfo' style='display:{{mou_box}}'>
<viewclass='getUserInfo_max'>
<viewclass='getUserInfo_title'>
获取微信授权信息
</view>
<viewclass='getUserInfo_text'>
微信登录需要您的用户信息,立即前往设置!
</view>
<viewclass='getUserInfo_botton'>
<buttonclass='getUserInfo_botton_two'open-type="getUserInfo"lang="zh_CN"bindgetuserinfo="onGotUserInfo">去设置</button>
</view>
</view>
</view>
微信小程序-获取用户信息
---------------------------------------------写在公共部分---getUserInfo.wxml-----------
-------------------------------模态框css(公共)-------------自己可调整----------
.shujuyuan{
width:100%;
text-align:center;
font-size:0.8rem;
padding:20rpx0;
}
.getUserInfo{
width:100%;
margin:0auto;
height:100%;
position:absolute;
top:0;
z-index:99999;
background:rgba(0,0,0,.4);
}
.getUserInfo_max{
width:250px;
height:auto;
overflow:hidden;
background:#fff;
margin:30%auto;
border-radius:10rpx;
}
.getUserInfo_title{
width:100%;
text-align:center;
font-size:16px;
height:40px;
line-height:40px;
color:#666;
border-bottom:1pxsolid#eee;
}
.max_body_k{
width:100%;
height:100%;
overflow:hidden;
}
.getUserInfo_text{
font-size:14px;
color:#666;
width:90%;
padding:10px5%;
border-bottom:1pxsolid#eee;
text-indent:22px;
}
.getUserInfo_botton{
width:100%;
height:50px;
}
.getUserInfo_botton_two{
color:#008200;
background:0;
}
.getUserInfo_botton_two::after{
border:none;
}
---------------------------------------------------------------------
微信小程序-获取用户信息微信小程序-获取用户信息
------------------------------------------------------------------js部分----------
//判断用户是否授权
user_off: function(){
var that = this;
// 查看是否授权
wx.getUserInfo({
success: function (res) {
console.log(res);
that.setData({
body_height: 'auto', //开放滚动条
mou_box: 'none' //模态框不显示
});
//用户授权成功
var Base = require('../../utils/base.js'); //引用js
user_info = Base.is_user_obj('');//调用获取用户信息is_user_obj方法
}, fail: function (res) {
console.log(res);
that.setData({
body_height: '100vh',//禁止下滑
mou_box: 'bolck' //模态框显示
});
}
});
},
//监听用户是否允许授权--点击取消--或者确定-
onGotUserInfo: function(e){
var that = this;
console.log(e.detail.userInfo)
if (e.detail.userInfo) {
//用户按了允许授权按钮
console.log("用户按了允许授权按钮");
//用户授权成功
var Base = require('../../utils/base.js'); //引用js
user_info = Base.is_user_obj('');//调用获取用户信息is_user_obj方法
that.setData({
body_height: 'auto',
mou_box: 'none'
});
} else {
//用户按了拒绝按钮
console.log("用户按了拒绝按钮");
//授权失败显示引导授权模态框
that.setData({
body_height: '100vh',
mou_box: 'bolck'
});
}
},
------------------------------------------------------------------js部分----------
// -------------------------------------------------/用户授权处理-----------------------------
-------------------------------------------------------------------------base.js------
// 判断 用户对象 是否存在
// 如果存在 返回 true 程序往下走
// 如果不存在 通过 新的方法 获取 用信息 并存入 本地缓存 locatstrage
//参数: u:域名 i: 自己的openid, c: 当前的城市, o: 父级的code
var user_info_off = 0; //开关
var userInfo =''; //全局定义用户信息变量
function is_user_obj(p){
var user_obj = '';
user_obj = wx.getStorageSync('user_obj');
user_obj = user_obj ? user_obj : false;
// console.log(user_obj);
if (user_obj) {
console.log('用户对象存在');
console.log(user_obj);
console.log(p);
return user_obj;
} else {
console.log("用户对象不存在");
get_user_info(p);
// 获取用户信息
return user_obj;
}
}
// 获取每个页面的URL 参数
// console.log('bbb');
//封装的函数
//插入openid
// var openid=0; //自己的openid
// kount(); //获取openid
//新增用户
// i 微信 openid
// o 用户父级 ID
// wx_user_info 用户微信所有信息
function openidt(i, o, wx_user_info){
console.log('我是加载后的', userInfo)
console.log(wx_user_info)
var openid = i;
if (openid != '') {
setTimeout(function () {
// console.log(5555);
console.log(openid);
wx.request({
url: 'https://www.wh2013.net/xcy/home/Column/user',
data: {
openid: openid,
city: '惠州',
nickName: userInfo.nickName, //昵称
gender: userInfo.gender, //性别
avatarUrl: userInfo.avatarUrl,// 头像
pcode: o
},
method: "POST",
header: {
"Content-Type": "application/x-www-form-urlencoded"
},
success: function (res) {
console.log(res);
wx.setStorageSync('user_obj', res.data.data);
console.log(wx.getStorageSync('user_obj'));
},
fail: function () {
console.log('error1')
}
})
}, 1000)
} else {
setTimeout(function () {
console.log(666);
}, 1000)
}
}
//获取用户信息接口
function user_inif(){
//调用登录接口
console.log("进入");
wx.getUserInfo({
success: function (res) {
console.log(res);
userInfo = res.userInfo;
user_info_off = 1;
},
fail:function(data){
console.log(data);
}
})
}
//获取用户信息接口
function get_user_info(pid) {
console.log(pid);
// if(onoff){
// return false;
// }
// console.log(onoff);
wx.login({
success: function (res) {
console.log(res.code);//(1)如果登录成功打印code值
if (res.code) {
//发起网络请求 获取OPENID
// 通过 code 获取 用户信息 如果没有用户 则返回 openid 再通过 openid 和 本地的 其他用户信息 生成新的用户 并插入用户表
wx.request({
url: 'https://www.wh2013.net/xcy/home/column/openid',
data: {
code: res.code //将code值传入php中
// is_have_pid: that.globalData.is_have_pid
},
success: function (result) {
console.log(result);
// onoff = true;
// console.log(result.data.code);
if(result.data.code == 200){
// console.log(pid);
// var wx_user_info = user_inif(); // 用户微信的所有信息
// openidt(result.data.data.openid, pid, wx_user_info); //插入新用户
// 直接把用户信息存入 本地缓存
wx.setStorageSync('user_obj', result.data.data);
} else if (result.data.code == 100){
// 通过下一个接口 生成新的用户
console.log(user_info_off);
user_inif(); // 用户微信的所有信息
//获取用户信息为异步请求,获取用户信息有延迟。
//延时判断user_info_off是否为0,0:没有获取到userInfo,1:获取到userInfo
//当user_info_off=0,循环每100毫秒判断一次,直至获取到userInfo,获取到userInfo后改user_info_off=1.
//当user_info_off=1,继续执行插入新用户操作
var Time = setInterval(function(){
if (user_info_off == 0){
console.log('定');
// return false;
}else{
console.log('定时器');
console.log(userInfo);
openidt(result.data.data.openid, pid, userInfo); //插入新用户
clearInterval(Time);
}
},100)
}else{
console.log('网络出错,请联系管理员')
}
}
})
} else {
conso1e.log('获取用户登录态失败!' + res.errM3g)
}
}
})
// console.log(openid);
}
//转化成小程序模板语言 这一步非常重要 不然无法正确调用
module.exports = {
// 获取用户信息
get_user_info:get_user_info,
user_inif: user_inif,
openidt:openidt,
is_user_obj: is_user_obj
}

-------------------------------------------base.js-------------------------------------------

微信小程序-获取用户信息
---------写的有点乱,后续有时间会整理,如果你有好的方法也可以交流----------------
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: