记录使用EasyWeChat做微信小程序登陆和其他操作

ops/2025/3/3 21:21:03/
1.小程序>微信小程序登陆

关于后端:fastadmin加密生成token-CSDN博客

思路:

通过easywechat+fastadmin,

(1)== 用户端登陆(获取code) -> 请求后端接口获取session_key -> 用户端保存session_key

use EasyWeChat\Foundation\Application;
use EasyWeChat\Factory;public function getSessionKey(){$code = $this->request->post('code');$config = ['app_id' => 'wx65ae3f41d0714e10','secret' => 'e79ea0badcc0a4f1c549c55a530660cf','token' => 'easywechat','aes_key' => '......','http' => ['throw'  => true, // 状态码非 200、300 时是否抛出异常,默认为开启'timeout' => 5.0,'retry' => true, // 使用默认重试配置],];$app = Factory::miniProgram($config); // 这个是小程序的
//        $app = Factory::officialAccount($config); // 这个是公众号的// 使用 SDK 中的相关功能来获取 session_key$data = $app->auth->session($code);$this->success('获取session_key成功', $data);}

此刻就获取到了:session_key(很重要)、openid。 

注意这里的this指向。

// 前端uniapp
getSessionKey() {var that = thisuni.login({success(info) {console.log('login信息', info)var postData = {code: info.code}getApp().posturl('Wechat/getSessionKey', postData).then(res => {console.log(res)that.session_key = res.data.session_keyconsole.log('========',that.session_key)});}})}
2.小程序>微信小程序授权用户信息

用户端获取用户信息(获取 iv + encryptedData + signature + session_key )-> 请求后端接口获取token -> 用户端保存token (可以控制时间)

public function getUserInfo(){// 获取得到avatarUrl、nickName、openId,进行存储$data = $this -> app -> encryptor->decryptData($this -> post['session_key'], $this -> post['iv'], $this -> post['encryptedData']);$userModel = new HcdrspUser();$result = $userModel->where('openid', $data['openId'])->find();if($result){$this->success('获取用户信息成功', $data);}else{$userModel->openid = $data['openId'];$userModel->avatarUrl = $data['avatarUrl'];$userModel->name = $data['nickName'];// 创建时间$userModel->createtime = time();$userModel->save();$this->success('欢迎新用户', $data);}}
getuserinfo(e){console.log('getuserinfo用户信息',e);console.log('session_key信息',this.session_key);var postData = {iv: e.detail.iv,encryptedData:e.detail.encryptedData,session_key: this.session_key}getApp().posturl('Wechat/getUserInfo', postData).then(res => {console.log(res)this.avatarUrl = res.data.avatarUrlthis.nickName = res.data.avatarUrllet openId = res.data.openIduni.setStorageSync('openId',openId)});},
3. 小程序>微信小程序获取手机号

前端:

<button open-type="getPhoneNumber" @getphonenumber="onGetPhoneNumber">授权并获取手机号</button>
onGetPhoneNumber(e){if(this.nickName === ''){uni.showToast({icon:'none',title:'请先登陆'})return}console.log('getPhoneNumber用户信息',e);console.log('session_key信息',this.session_key);var postData = {iv: e.detail.iv,encryptedData:e.detail.encryptedData,session_key: this.session_key}getApp().posturl('Wechat/getPhoneNumber', postData).then(res => {console.log(res)this.phoneNumber = res.data.phoneNumber});},

后端:

/** 获取手机号*/public function getPhoneNumber(){$data = $this -> app -> encryptor->decryptData($this -> post['session_key'], $this -> post['iv'], $this -> post['encryptedData']);$userModel = new HcdrspUser();$result = $userModel->where('phone', $data['phoneNumber'])->find();if($result){$this->success('已存在手机号', $data);}else{$userModel->phone = $data['phoneNumber'];$userModel->save();$this->success('获取手机号成功', $data);}}


http://www.ppmy.cn/ops/154652.html

相关文章

基于nodejs+json+websocket+html的聊天应用

实现 html <html lang"zh-CN"><head><meta charset"UTF-8"><title>Instant Messaging</title><!-- 引入Bootstrap CSS --><link href"https://cdn.jsdelivr.net/npm/bootstrap5.3.0/dist/css/bootstrap.min.…

【BQ3568HM开发板】如何在OpenHarmony上通过校园网的上网认证

引言 前面已经对BQ3568HM开发板进行了初步测试&#xff0c;后面我要实现MQTT的工作&#xff0c;但是遇到一个问题&#xff0c;就是开发板无法通过校园网的认证操作。未认证的话会&#xff0c;学校使用的深澜软件系统会屏蔽所有除了认证用的流量。好在我们学校使用的认证系统和…

性能测试丨分布式性能监控系统 SkyWalking

软件测试领域&#xff0c;分布式系统的复杂性不断增加&#xff0c;如何保证应用程序的高可用性与高性能&#xff0c;这是每一个软件测试工程师所面临的重大挑战。幸运的是&#xff0c;现在有了一些强大的工具来帮助我们应对这些挑战&#xff0c;其中之一便是Apache SkyWalking。…

Kafka运维宝典 (四)- Kafka 常用命令介绍

Kafka运维宝典 &#xff08;四&#xff09;- Kafka 常用命令介绍 文章目录 Kafka运维宝典 &#xff08;四&#xff09;- Kafka 常用命令介绍1. Kafka Broker 管理相关命令1.1 查看 Kafka Broker 信息1.2 查看 Kafka Broker API 版本 2. Kafka 主题管理相关命令2.1 查看所有主题…

力扣hot100--2

文章目录 力扣hot100-矩阵题目&#xff1a;矩阵置零题解 题目&#xff1a;螺旋矩阵题解 题目&#xff1a;旋转图像题解 力扣hot100-矩阵 题目&#xff1a;矩阵置零 原题链接&#xff1a;矩阵置零 题解 方法&#xff1a;通过先标记需要置为 0 的位置&#xff0c;再进行修改…

20250124 Flink 增量聚合 vs 全量聚合

1. 增量聚合 vs 全量聚合 (1) 增量聚合&#xff08;ReduceFunction / AggregateFunction&#xff09; 工作方式&#xff1a; 逐步计算&#xff1a;每一条数据到达窗口时&#xff0c;立即与当前聚合结果结合&#xff0c;生成新的中间结果。 仅保存中间状态&#xff1a;内存中只…

活动回顾和预告|微软开发者社区 Code Without Barriers 上海站首场活动成功举办!

Code Without Barriers 上海活动回顾 Code Without Barriers&#xff1a;AI & DATA 深入探索人工智能与数据如何变革行业 2025年1月16日&#xff0c;微软开发者社区 Code Without Barriers &#xff08;CWB&#xff09;携手 She Rewires 她原力在大中华区的首场活动“AI &…

深入解析 C++17 中的 std::not_fn

文章目录 1. std::not_fn 的定义与目的2. 基本用法2.1 基本示例2.2 使用 Lambda 表达式2.3 与其他函数适配器的比较3. 在标准库中的应用3.1 结合标准库算法使用3.1.1 std::find_if 中的应用3.1.2 std::remove_if 中的应用3.1.3 其他标准库算法中的应用4. 高级技巧与最佳实践4.1…