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篇的文章来描述下一个站点如何实现微信扫码登录的功能,来复习下微信扫码登 ...
随机推荐
- PHP游戏线下线上陪玩平台APP小程序H5源码开发多少钱?可用于家政,陪诊,陪伴服务等
做陪玩app项目,不少创业者们都比较头疼该如何去选择软件系统!目前软件市场上,陪玩app平台的软件系统五花八门,价位也是参差不齐.创业者们都比较纠结是定制开发,还是选择开元源码二次开 发? 前两天成都 ...
- go-zero modd开发配置
目录 go-zero modd开发配置 modd配置 项目打包编排文件 nginx配置文件 各服务中的配置里要写上如下配置 go-zero modd开发配置 modd配置 modd.conf #use ...
- Linux下的目录
FHS 因为利用Linux来开发产品或distributions的社群/公司与个人实在太多了, 如果每个人都用自己的想法来配置文件放置的目录,那么将可能造成很多管理上的困扰. 你能想象,你进入一个企业 ...
- FE宝典
前端学科面试宝典 蔡威 [电子邮件地址] HTML5.CSS3..................................................................... ...
- pageoffice6 在线编辑 word 文件时禁止拷贝到外部
有些特殊情况下,希望用户可以在线编辑Word文档,也允许用户拷贝本地电脑或网络上的资料到Word文档中进行编辑,但是不希望用户把在线Word文档中的内容另存到本地或选择并拷贝出去,此时只是禁用另存.禁 ...
- 防患未然 | AIRIOT城市管廊智能运维解决方案
城市管廊构建复杂,管道内部传感器和附属设备居多,且近年来事故频发,地下空间属性人员进出管理不便,紧急情况应急调度措施有限.传统人工管理模式,运营成本高,且管理水平和质量也无法得到有利保障.因此在管 ...
- selenium 滚动截图参考
Selenium本身并不直接支持滚动截图,但是你可以通过编程方式实现滚动截图.下面是一个Python的例子,使用Selenium和PIL库实现滚动截图: from selenium import we ...
- kubernets之带有limit的资源
一 pod中容器的limits属性的作用 1.1 创建一个带有资源limits的pod apiVersion: v1 kind: Pod metadata: name: limited-pod s ...
- Python爬图片
1 import requests 2 from lxml import etree 3 4 header = { 5 "user-agent": "Mozilla/5. ...
- 一分钟部署prometheus&grafana全方面监控SpringBoot项目
0x01 创建目录 找一个你喜欢的地方,创建项目根目录 example: [root@demo-78 ~]# mkdir /data/prometheus 0x02 创建配置文件 进入到项目根目录: ...