仅供大家参考学习

1、先说明一下官方:为优化用户体验,使用 wx.getUserInfo 接口直接弹出授权框的开发方式将逐步不再支持。

小程序与小游戏获取用户信息接口调整,请开发者注意升级。

2、使用 button 组件,并将 open-type 指定为 getUserInfo 类型,获取用户基本信息。文档

3、实现思路:写一个微信授权登录按钮让用户实现点击的功能,也就是实现了通过 button 组件去触发 getUserInof 接口。在用户进入微信小程序的时候,判断用户是否授权了,如果没有授权的话就显示授权按钮,让用户去执行授权的操作。如果已经授权了,则隐藏这个按钮,进入首页。

4、小程序源码说明

wx:if="{{is_auth == 0}}"

class='auth-btn'

open-type="getUserInfo"

lang="zh_CN"

bindgetuserinfo="onGotUserInfo">

/**index.wxss**/

.auth-btn{

width: 100%;

height: 100%;

position: fixed;

top: 0;

left: 0;

z-index: 99;

background-color: rgba(255, 255, 255, 0)

}

.auth-btn::after{

border: none;

}//index.js

var app = getApp();

Page({

data: {

is_auth: app.globalData.is_auth, //判断是否登录

},

onLoad: function (options) {

var that = this;

setTimeout(function () {

if (app.globalData.userInfo['NickName'] != 'undefined' || app.globalData.userInfo['HeadUrl'] != 'undefined') {

that.setData({

is_auth: 1,//判断是否登录

nickName: app.globalData.userInfo['NickName'],

HeadUrl: app.globalData.userInfo.HeadUrl,

});

}

}, 1000);

},

//授权用户信息

onGotUserInfo: function (e) {

//console.log(app.globalData.userInfo)

//console.log(app.globalData.is_auth)

var that = this;

if (e.detail.userInfo !== undefined) {

let info = e.detail.userInfo;

wx.request({

url: app.d.hostUrl + '/Api/Login/authlogin',

data: {

gender: info.gender,

NickName: info.nickName,

HeadUrl: info.avatarUrl,

openid: app.globalData.userInfo.openid,

save_user: 'save_user' //保存用户信息

},

header: {

'Content-Type': 'application/x-www-form-urlencoded'

},

method: 'post',

success: function (res) {

var datas = res.data

if (datas.status == 1) {

app.globalData.userInfo['id'] = datas.arr.ID;

app.globalData.userInfo['NickName'] = datas.arr.NickName;

app.globalData.userInfo['HeadUrl'] = datas.arr.HeadUrl;

app.globalData.is_auth = 1;

that.setData({

userInfos: app.globalData.userInfo,

nickName: app.globalData.userInfo.NickName,

HeadUrl: app.globalData.userInfo.HeadUrl,

is_auth: 1

});

}

},

fail: function (res) {

console.error("get case list error!");

},

complete: function () {

wx.hideLoading();

}

});

}

},

});// app.js

App({

d: {

hostUrl: 'https://xxx',

userId: 1,

},

onLaunch: function () {

//调用API从本地缓存中获取数据

var logs = wx.getStorageSync('logs') || []

logs.unshift(Date.now())

wx.setStorageSync('logs', logs);

//login

this.getUserInfo();

},

getUserInfo:function(cb){

var that = this

if(this.globalData.userInfo != 0){

typeof cb == "function" && cb(this.globalData.userInfo)

}else{

//调用登录接口

wx.login({

success(res) {

if (res.code) {

typeof cb == "function" && cb(that.globalData.userInfo);

that.getUserSessionKey(res.code);

} else {

console.log('登录失败!' + res.errMsg)

}

}

});

}

},

getUserSessionKey:function(code){

//用户的订单状态

var that = this;

wx.request({

url: that.d.hostUrl + '/Api/Login/getsessionkey',

method:'post',

data: {

code: code

},

header: {

'Content-Type':  'application/x-www-form-urlencoded'

},

success: function (res) {

//--init data

var data = res.data;

if(data.status==0){

wx.showToast({

title: data.err,

duration: 2000

});

return false;

}

that.globalData.userInfo['sessionId'] = data.session_key;

that.globalData.userInfo['openid'] = data.openid;

that.onLoginUser();

},

fail:function(e){

wx.showToast({

title: '网络异常!err:getsessionkeys',

duration: 2000

});

},

});

},

onLoginUser:function(){

var that = this;

var user = that.globalData.userInfo;

wx.request({

url: that.d.hostUrl + '/Api/Login/authlogin',

method:'post',

data: {

SessionId: user.sessionId,

gender:user.gender,

NickName: user.nickName,

HeadUrl: user.avatarUrl,

openid:user.openid

},

header: {

'Content-Type':  'application/x-www-form-urlencoded'

},

success: function (res) {

//--init data

var data = res.data.arr;

var status = res.data.status;

if(status!=1){

wx.showToast({

title: res.data.err,

duration: 3000

});

return false;

}

that.globalData.userInfo['id'] = data.ID;

that.globalData.userInfo['NickName'] = data.NickName;

that.globalData.userInfo['HeadUrl'] = data.HeadUrl;

var userId = data.ID;

if (!userId){

wx.showToast({

title: '登录失败!',

duration: 3000

});

return false;

}

that.d.userId = userId;

},

fail:function(e){

wx.showToast({

title: '网络异常!err:authlogin',

duration: 2000

});

},

});

},

globalData:{

userInfo:[],

is_auth: 0,

info:[]

},

});

5、PHP端源码//***************************

//  授权登录接口

//***************************

public function authlogin(){

$openid = $_POST['openid'];

if (!$openid) {

echo json_encode(array('status'=>0,'err'=>'授权失败!'.__LINE__));

exit();

}

$con = array();

$con['openid']=trim($openid);

$uid = M('user')->where($con)->getField('id');

if ($uid) {

$userinfo = M('user')->where('id='.intval($uid))->find();

if (intval($userinfo['del'])==1) {

echo json_encode(array('status'=>0,'err'=>'账号状态异常!'));

exit();

}

if(isset($_POST['save_user']) && $_POST['save_user'] == 'save_user') {

$data = array();

$data['id'] = $uid;

$data['name'] = $_POST['NickName'];

$data['uname'] = $_POST['NickName'];

$data['photo'] = $_POST['HeadUrl'];

$data['sex'] = $_POST['gender'];

//print_r($data);

$res = M('user')->save($data);

$userinfo = M('user')->where('id='.intval($uid))->find();

}

$err = array();

$err['ID'] = intval($uid);

$err['NickName'] = $userinfo['uname'];

$err['HeadUrl'] = $userinfo['photo'];

echo json_encode(array('status'=>1,'arr'=>$err));

exit();

}else{

$data = array();

$data['name'] = $_POST['NickName'];

$data['uname'] = $_POST['NickName'];

$data['photo'] = $_POST['HeadUrl'];

$data['sex'] = $_POST['gender'];

$data['openid'] = $openid;

$data['source'] = 'wx';

$data['addtime'] = time();

if (!$data['openid']) {

echo json_encode(array('status'=>0,'err'=>'授权失败!'.__LINE__));

exit();

}

$res = M('user')->add($data);

if ($res) {

$err = array();

$err['ID'] = intval($res);

$err['NickName'] = $data['name'];

$err['HeadUrl'] = $data['photo'];

echo json_encode(array('status'=>1,'arr'=>$err));

exit();

}else{

echo json_encode(array('status'=>0,'err'=>'授权失败!'.__LINE__));

exit();

}

}

}

//***************************

//  获取sessionkey 接口

//***************************

public function getsessionkey(){

$wx_config = C('weixin');

$appid = $wx_config['appid'];

$secret = $wx_config['secret'];

$code = trim($_POST['code']);

if (!$code) {

echo json_encode(array('status'=>0,'err'=>'非法操作!'));

exit();

}

if (!$appid || !$secret) {

echo json_encode(array('status'=>0,'err'=>'非法操作!'.__LINE__));

exit();

}

$get_token_url = 'https://api.weixin.qq.com/sns/jscode2session?appid='.$appid.'&secret='.$secret.'&js_code='.$code.'&grant_type=authorization_code';

$res = $this->httpGet($get_token_url);

echo $res;

exit();

}

private function httpGet($url) {

$curl = curl_init();

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

curl_setopt($curl, CURLOPT_TIMEOUT, 500);

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

curl_setopt($curl, CURLOPT_URL, $url);

$res = curl_exec($curl);

curl_close($curl);

return $res;

}

6、数据库表自行设计,仅供参考CREATE TABLE `lr_user` (

`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '小程序用户表',

`name` varchar(20) NOT NULL COMMENT '登陆账号',

`uname` varchar(10) DEFAULT NULL COMMENT '昵称',

`addtime` int(11) NOT NULL DEFAULT '0' COMMENT '创建日期',

`jifen` float(11,0) DEFAULT '0' COMMENT '积分',

`photo` varchar(255) DEFAULT NULL COMMENT '头像',

`tel` char(15) DEFAULT NULL COMMENT '手机',

`email` varchar(50) DEFAULT NULL COMMENT '邮箱',

`sex` tinyint(2) NOT NULL DEFAULT '0' COMMENT '性别',

`del` tinyint(2) NOT NULL DEFAULT '0' COMMENT '状态',

`openid` varchar(50) NOT NULL COMMENT '授权openid',

`pid` int(11) DEFAULT '0' COMMENT '父级ID',

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=225 DEFAULT CHARSET=utf8;

看起来代码有点多,大家可以写的简洁一点,有问题大家相互交流

(完)

小程序php mysql_PHP+TP小程序授权登陆实现相关推荐

  1. ***小程序wx.getUserInfo不能弹出授权窗口后的解决方案

    ***小程序wx.getUserInfo不能弹出授权窗口后的解决方案 参考文章: (1)***小程序wx.getUserInfo不能弹出授权窗口后的解决方案 (2)https://www.cnblog ...

  2. 关于微信小程序授权登陆之后需要在个人信息页展示信息,如微信头像,昵称这件事

    开发时使用uniapp进行开发,不过用什么开发都不重要. 在搞完微信授权登陆后,又遇到需要把用户昵称和头像展示在个人信息页的情况,在试了很多方法后,发现了便利的方法. 有想过从数据库获取数据,也想过从 ...

  3. 微信小程序前后端授权登陆

    本文目录 一.微信小程序前端 1.1 小程序前端准备 1.api封装 2.授权独立页面 二.微信小程序后端(laravel) 2.1 小程序后端准备 1.项目安装dingo/api以及jwt认证 2. ...

  4. 如何实现自有App上的小程序第三方微信授权登陆?

    对于微信小程序来说,有 OpenID 或 UnionID 作为唯一标识,微信授权登陆小程序账号是很容易实现的,但对于其他应用上的小程序来说(如支付宝.百度等),打通该登陆方式是比较麻烦的. 之前在Fi ...

  5. app微信登陆 小程序微信授权登陆

    最近在做一个项目兼容app和小程序 这里写一下这里面微信登陆的流程 这里有授权获取手机号弹窗 需用户手动点击按钮确认授权才行 <!-- 授权获取手机号弹窗 需用户手动点击按钮确认授权才行--&g ...

  6. 微信小程序隐私技术保护:HTTPSamp;授权确认

    微信隐私保护指引 [微信隐私保护指引]据微信派公众号消息,近期,微信进行了版本更新,所有进入iOS 6.5.16 .Android 6.5.14最新版本微信的用户在首次登入微信时,会收到一条必读消息& ...

  7. 微信小程序中如何获取用户手机号授权登录

    随着微信小程序的普及,许多应用程序需要用户登录才能提供更好的服务.而获取用户手机号码是验证用户身份和确保账户安全的重要步骤之一.因此,在本文中,我们将介绍如何在微信小程序中实现手机号授权登录. 步骤一 ...

  8. 微信小程序授权登陆判断+证件照换底色UI设计(第三周)

    日期 工作内容 2020年8月16日 (因涉及版权问题)图片素材重新查找 2020年8月17日 图片上传 2020年8月18日 小程序授权判断完善,小程序跳转页面新架构 2020年8月19日 证件照尺 ...

  9. java整合快手小程序(登陆,支付,结算,退款,手机号授权登陆)

    快手小程序官方文档 快手小程序官网地址 快手小程序后台配置回调域名 代码部分 KSUrlConstants(请求地址常量) 商品类目编号根据业务自行替换 package com.dfjs.consta ...

最新文章

  1. Selenium 爬虫时遇到的问题 Selenium message:session not created
  2. php 跳转qq群代码_PHP小脚本~QQ免KEY值加群
  3. python的none是什么-python中stream=None什么意思?
  4. 在Eclipse上通过插件获取github上的spring源码
  5. c++学习笔记之构造函数
  6. oracle maa全称,OracleMAA参考架构.PDF
  7. C#获取当前路径的方法集合
  8. jquery validate使用总结
  9. java时间错误_更改操作系统时间时睡眠()中的Java错误:任何解决方法?
  10. Logistic回归 python实现
  11. 代码的坏味道之一——译自《重构》
  12. sql 转html 中文乱码,SqlServer数据库中文乱码问题解决方法
  13. java框架快速使用mysql_阿里java架构师教你怎么用mysql怒怼面试官
  14. 两款JAVA大型OA自动化办公系统源码
  15. html代码大全右对齐,html特效代码大全
  16. 文科专业考计算机专业研究生,跨专业文科生考计算机研究生的经验
  17. Linux 文本三剑客之awk 木石前盟
  18. 掷骰子python代码_python模拟掷骰子
  19. 微软服务器模式表格多维,用挖掘功能实现多元回归分析
  20. 58同城字体加密解密方法

热门文章

  1. [PAL规范]SAP HANA PAL演绎推理算法Apriori编程规范APRIORIRULE
  2. jQuery对象和DOM对象的区别和转换
  3. Weblogic Session复制策略与方式
  4. Linux网络协议栈(三)——网络设备(1)
  5. mysql5.6.36源码安装_CentOS 7下rpm安装MySQL 5.6.36
  6. すぬけ君の地下鉄旅行 / Snuke's Subway Trip(AtCoder-2069)
  7. 最小花费(信息学奥赛一本通-T1344)
  8. 信息学奥赛一本通C++语言——1081:分苹果
  9. 37 MM配置-采购-采购订单-采购订单审批-编辑类
  10. python随机生成列表_python 实现快速生成连续、随机字母列表