uniapp+thinkphp5实现微信登录
前言
之前做了微信登录,所以总结一下微信授权登录并获取用户信息这个功能的开发流程。
配置
1.首先得在微信公众平台申请一下微信小程序账号并获取到小程序的AppID和AppSecret
https://mp.weixin.qq.com/cgi-bin/loginpage?url=%2Fwxamp%2Fwacodepage%2Fgetcodepage%3Ftoken%3D418035161%26lang%3Dzh_CN

2.申请认证,企业认证300/年,个人好像是30/年,得认证,不然没有微信登录的权限。
3.配置前端uniapp的项目,在主目录下找到manifest.json文件->微信小程序配置->将你的小程序的AppID填写上去

到此基本配置就已经完毕。
登录流程
1.在实现登录之前,首先得了解登录的流程,这是微信登录的时序图

2.具体步骤为:
①小程序 wx.checkSession 校验登陆态,success :接口调用成功,session_key未过期;fail :接口调用失败,session_key已过期;
②因为微信公众平台发布了《关于小程序收集用户手机号行为的规范》中提到部分开发者在处理用户手机号过程中,存在不规范收集行为,影响了用户的正常使用体验,所以平台在向用户申请获取手机号时应明确向用户说明收集的必要原因,并提供用户隐私协议由用户主动同意;所以登录通过需通过@getphonenumber获取用户的encryptedData、iv,再通过wx.login获取用户的授权临时票据code参数;
③.服务端接收到参数后随即通过请求Appid + appSecret + code 到微信方服务器 https://api.weixin.qq.com/sns/jscode2session 获取 session_key & openid;
④.获取到openid&&session_key后随机根据getphonenumber获取到的encryptedData、iv对用户的手机号码进行解密;
流程实现(后端)(PHP)
public function login()
{
$code = input('code');
$encryptedData = input('mobileEncryptedData');
$iv = input('mobileIv');
if ($code) {
$appID = 'wxa***************'; //微信公众平台->小程序AppID
$appSecret = '****************';//微信公众平台->小程序AppSecret
// 使用 code 换取 session_key 和 openid
$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$appID}&secret={$appSecret}&js_code={$code}&grant_type=authorization_code";
$result = file_get_contents($url);
$data = json_decode($result, true);
// 获取用户openid&&session_key成功
if(isset($data['openid'])){
// 解密用户手机信息
$aesKey=base64_decode($data['session_key']);
$aesIV=base64_decode($iv);
$aesCipher=base64_decode($encryptedData);
$result2=openssl_decrypt( $aesCipher, "AES-128-CBC", $aesKey, 1, $aesIV);
// 用户电话号码 $userPhone['phoneNumber']
$userPhone=json_decode( $result2, true);
$phone=$userPhone['phoneNumber'];
$business=$this->BusinessModel->where('mobile',$phone)->find();
if($business){
// 已注册
}else{
// 未注册
}
}else{
$this->result([],'0','登录失败!','json');
}
} else {
return "缺少 code 参数";
}
}
流程实现(前端)(Vue)(uniapp)
//html
<button class="wx_login" open-type="getPhoneNumber" @getphonenumber="getPhoneNumber">
手机号快捷登录
</button>
//js
getPhoneNumber(e) {
wx.login({
success: (res) => {
this.userInfo.code = res.code
this.userInfo.mobileEncryptedData = e.detail.encryptedData
this.userInfo.mobileIv = e.detail.iv
this.login()
},
fail() {
this.m_Toast('获取code失败')
}
})
}
login() {
this.$api.user.wx_login(this.userInfo).then(res => {
if (res.code == 1) {
uni.setStorageSync('userInfo', res.data);
uni.showToast({
title: res.msg,
icon: 'success',
duration: 1000
})
//其他处理
} else {
uni.showToast({
title: res.msg,
icon: 'error',
duration: 1500
})
}
})
}
uniapp+thinkphp5实现微信登录的更多相关文章
- 使用 UniApp 实现小程序的微信登录
微信登录思路: 在main.js 中封装公共函数,用于判断用户是否登录 在main.js 中分定义全局变量,用于存储接口地址 如果没有登录.则跳转至登录页面 进入登录页面 通过 wx.login 获取 ...
- uni-app第三方登陆-微信
结合上文全局登陆校验,实现微信授权登录官方手册地址: https://uniapp.dcloud.io/api/plugins/login?id=getuserinfo 一.书写两个界面 login. ...
- 小程序和ThinkPHP5结合实现登录状态(含代码)
本篇文章给大家带来的内容是关于小程序和ThinkPHP5结合实现登录状态(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 微信小程序中,一般会涉及三种登录方式: 1. 使用微 ...
- 混合应用 微信登录授权 微信登录认证失败 ios PGWXAPI错误-1 code:-100 / 安卓 message:invalid appsecret innerCode:40125
最近项目需要做微信登录,于是利用HTML5+ API Reference的OAuth模块管理客户端的用户登录授权验证功能,允许应用访问第三方平台的资源.(链接:https://www.dcloud.i ...
- APP微信登录 服务器处理代码
采用框架THINKPHP5 需要客户端传的参数有 udid openid nickname avatar_path /* * @param 第三方微信登录 * @param openid udid ...
- mui APP 微信登录授权
一.在微信平台上申请appid.appsecret. 二.app --> manifest.json-->SDK配置(填写申请好的appid和appsecret) 三.在登录页,点击微信登 ...
- uniapp发布到微信小程序整改摘要
uniapp作为跨端的利器,可同时发布到安卓.ios.微信小程序.支付宝小程序.百度小程序.头条小程序.QQ小程序等8个平台. 如果是轻量级的应用,不涉及太多功能的话,或许可以直接打包移植,但涉及前后 ...
- 公众号H5页面接入微信登录流程
公众号H5页面接入微信登录流程 源码地址 https://gitee.com/szxio/h5_weixin 起步 首先创建一个项目,我们采用uni-app来作为我们的前端框架 环境安装 全局安装vu ...
- 网站实现微信登录之回调函数中登录逻辑的处理--基于yii2开发的描述
上一篇文章网站实现微信登录之嵌入二维码中描述了如何在自己的登录页面内嵌入登录二维码,今天的这篇文章主要是描述下在扫码成功之后微信重定向回网站后登录逻辑的处理,其实也就是验证身份信息,授权用户登录的逻辑 ...
- 网站实现微信登录之嵌入二维码——基于yii2开发的描述
之前写了一篇yii2获取登录前的页面url地址的文章,然后发现自己对于网站实现微信扫码登录功能的实现不是很熟悉,所以,我会写2-3篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...
随机推荐
- .NET Emit 入门教程:第七部分:实战项目1:将 DbDataReader 转实体
前言: 经过前面几个部分学习,相信学过的同学已经能够掌握 .NET Emit 这种中间语言,并能使得它来编写一些应用,以提高程序的性能. 随着 IL 指令篇的结束,本系列也已经接近尾声,在这接近结束的 ...
- SAP UI5 官方教程学习记录
最近有闲跟着官方的Get Started教程学习了UI5,记录一下自己学习中遇到的几个问题. 本文链接:https://www.cnblogs.com/hhelibeb/p/17835722.html ...
- 如何实现surging 多语言混合微服务异构
1. 背景 作为微服务体系, 应该是不限语言的, 不管是.net.java, 都可以是一个微服务. 可以使用JAVA或者.NET 去实现业务模块,通过统一的消息模型进行传输调用因客户技术栈以多语言,多 ...
- Mac Docker 挂载数据卷失败
问题描述: docker: Error response from daemon: Mounts denied: The path /srv/docker/bind is not shared fro ...
- gitignore文件不生效的问题解决
如何添加 git的忽略文件 .gitignore 在使用git过程中,我们可能有些文件不需要上传上去,比如一些缓存文件,生成的图片,运行环境的一些配置等等,这时就需要用到.gitignore忽略掉这些 ...
- 网络拓扑—DHCP服务配置
目录 DHCP服务搭建 相关配置细节前提 安装DHCP服务 DHCP服务搭建 相关配置细节前提 系统:Windows Server 2003 IP网段:10.0.0.0/24 三台机子: 普通PC机 ...
- 用 C 语言开发一门编程语言 — 交互式解释器
目录 文章目录 目录 前言 环境 编译型 vs 解释型 实现交互式解释器 使用 GNU Readline 函数库 前言 通过开发一门类 Lisp 的编程语言来理解编程语言的设计思想,本实践来自著名的& ...
- PyQt5自定义信号
一.简介 在 PyQt5 中,自定义信号是一个常见的任务,通常用于在对象之间传递信息或触发特定行为.自定义信号需要继承自 QtCore.pyqtSignal 并定义其参数类型. 二.操作步骤 1.导入 ...
- echarts(数据可视化图表)
echarts饼图详细 echarts下载 https://echarts.apache.org/zh/index.html echarts官网 http://www.isqqw.com/#/hom ...
- Vue cli之项目目录结构
src 主开发目录,要开发的单文件组件全部在这个目录下的components目录下 static 静态资源目录,所有的css,js文件放在这个文件夹 dist 项目打包发布文件夹,最后要上线单文件项目 ...