小程序之后台交互--个人中心

article/2025/8/29 17:52:36

目录

  • 一、微信登录流程简介
  • 二、微信用户信息获取
    • 1、index.js
    • 2、index.wxml
  • 三、微信登录流程代码详解
    • 1、后台准备
      • ①导入微信小程序SDK
      • ②application.yml
      • ③WxProperties
      • ④WxConfig
      • ⑤WxAuthController
    • 1、登录-小程序
      • ①login.js
      • ②user.js
      • ③util.js
  • 四、emoji的存储
    • 1、修改配置文件my.ini
    • 2、重启mysql服务
    • 3、多账号测试
    • 4、总结

一、微信登录流程简介

小程序登录
在这里插入图片描述

  • 说明

    • 调用 wx.login() 获取 临时登录凭证code ,并回传到开发者服务器。
    • 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、 用户在微信开放平台帐号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台帐号) 和 会话密钥 session_key
    • 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份。
  • 注意事项

    1. 会话密钥 session_key 是对用户数据进行 加密签名 的密钥。为了应用自身的数据安全,开发者服务器不应该把会话密钥下发到小程序,也不应该对外提供这个密钥
    2. 临时登录凭证 code 只能使用一次
  • appId 作用说明

    • appid 是微信账号的唯一标识,这个是固定不变的;
      如果了解微信公众号开发的就需要注意一下,小程序的appid 和 公众号的appid 是不一致的
  • session_key 功能说明
    微信客户端通过wx.getUserInfo()获取用户的信息
    后台有时候也需要获取微信客户端的用户信息,因此,就需要利用session_key这个秘钥来从微信平台中获取
    官方文档原文
    签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过 wx.login 登录流程获取会话密钥 session_key 并保存在服务器。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端等服务器外的环境。
    在这里插入图片描述

  1. 执行wx.login 登录获取小程序端的code
  2. 服务端根据code去微信端获取session_key并且缓存;同时生成access_token 保存在小程序端,维持登录状态;
  3. 小程序端请求服务端用户数据时,先wx.checkSession,有效就通过access_token 确定用户,找到session_key;无效就执行wx.login重新登录重新生成access_token,服务端重新获取session_key;
  4. 小程序端长时间不使用,服务端的session_key会失效,无法再用session_key去微信端获取数据,需要小程序端重新执行登录操作; 服务端要获取session_key 只能通过小程序端的登录来操作;

二、微信用户信息获取

1、index.js

// pages/index/index.js
Page({data: {userInfo: {},canIUseGetUserProfile: false,},onLoad() {// if (wx.getUserProfile) {//   this.setData({//     canIUseGetUserProfile: true//   })// }},getUserProfile(e) {console.log('getUserProfile')// 推荐使用 wx.getUserProfile 获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗wx.getUserProfile({desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写success: (res) => {console.log(res);this.setData({userInfo: res.userInfo,hasUserInfo: true})}})},wxLogin: function(e) {debuggerconsole.log('wxLogin')console.log(e.detail.userInfo);this.setData({userInfo: e.detail.userInfo})if (e.detail.userInfo == undefined) {app.globalData.hasLogin = false;util.showErrorToast('微信登录失败');return;}},/*** 生命周期函数--监听页面初次渲染完成*/onReady() {},/*** 生命周期函数--监听页面显示*/onShow() {},/*** 生命周期函数--监听页面隐藏*/onHide() {},/*** 生命周期函数--监听页面卸载*/onUnload() {},/*** 页面相关事件处理函数--监听用户下拉动作*/onPullDownRefresh() {},/*** 页面上拉触底事件的处理函数*/onReachBottom() {},/*** 用户点击右上角分享*/onShareAppMessage() {}
})

2、index.wxml

<!--pages/index/index.wxml-->
<view><button wx:if="{{canIUseGetUserProfile}}" type="primary" class="wx-login-btn" bindtap="getUserProfile">微信直接登录1</button><button wx:else open-type="getUserInfo" type="primary" class="wx-login-btn" bindgetuserinfo="wxLogin">微信直接登录2</button><image mode="scaleToFill" src="{{userInfo.avatarUrl}}" /><text>昵称:{{userInfo.nickName}}</text>
</view>

在这里插入图片描述

三、微信登录流程代码详解

1、后台准备

①导入微信小程序SDK

<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-miniapp</artifactId><version>3.3.0</version>
</dependency>

②application.yml

oa:wx:app-id: wx137a566651c72ea1app-secret: 3ef580544ab1ece997cac95db6a9d0b7msgDataFormat: JSON

③WxProperties

@Data
@Configuration
@ConfigurationProperties(prefix = "oa.wx")
public class WxProperties {/*** 设置微信小程序的appId*/private String appId;/*** 设置微信小程序的Secret*/private String appSecret;/*** 消息数据格式*/private String msgDataFormat;}

④WxConfig

@Configuration
public class WxConfig {@Autowiredprivate WxProperties properties;@Beanpublic WxMaConfig wxMaConfig() {WxMaInMemoryConfig config = new WxMaInMemoryConfig();config.setAppid(properties.getAppId());config.setSecret(properties.getAppSecret());config.setMsgDataFormat(properties.getMsgDataFormat());return config;}@Beanpublic WxMaService wxMaService(WxMaConfig maConfig) {WxMaService service = new WxMaServiceImpl();service.setWxMaConfig(maConfig);return service;}}

⑤WxAuthController

@RequestMapping("/wx/auth")
public class WxAuthController {@Autowiredprivate WxMaService wxService;@PostMapping("login_by_weixin")public Object loginByWeixin(@RequestBody WxLoginInfo wxLoginInfo, HttpServletRequest request) {//客户端需携带code与userInfo信息String code = wxLoginInfo.getCode();UserInfo userInfo = wxLoginInfo.getUserInfo();if (code == null || userInfo == null) {return ResponseUtil.badArgument();}//调用微信sdk获取openId及sessionKeyString sessionKey = null;String openId = null;try {WxMaJscode2SessionResult result = this.wxService.getUserService().getSessionInfo(code);sessionKey = result.getSessionKey();//session idopenId = result.getOpenid();//用户唯一标识 OpenID} catch (Exception e) {e.printStackTrace();}if (sessionKey == null || openId == null) {log.error("微信登录,调用官方接口失败:{}", code);return ResponseUtil.fail();}else{log.info("openId={},sessionKey={}",openId,sessionKey);}//根据openId查询wx_user表//如果不存在,初始化wx_user,并保存到数据库中//如果存在,更新最后登录时间//....// tokenUserToken userToken = null;try {userToken = UserTokenManager.generateToken(user.getId());} catch (Exception e) {log.error("微信登录失败,生成token失败:{}", user.getId());e.printStackTrace();return ResponseUtil.fail();}userToken.setSessionKey(sessionKey);log.info("SessionKey={}",UserTokenManager.getSessionKey(user.getId()));Map<Object, Object> result = new HashMap<Object, Object>();result.put("token", userToken.getToken());result.put("tokenExpire", userToken.getExpireTime().toString());result.put("userInfo", userInfo);//....log.info("【请求结束】微信登录,响应结果:{}", JSONObject.toJSONString(result));return ResponseUtil.ok(result);}

1、登录-小程序

①login.js

user.loginByWeixin(res.userInfo).then(res => {app.globalData.hasLogin = true;wx.navigateBack({delta: 1})
})

②user.js

function loginByWeixin(userInfo) {return new Promise(function(resolve, reject) {return login().then((res) => {//登录远程服务器util.request(api.AuthLoginByWeixin, {code: res.code,userInfo: userInfo}, 'POST').then(res => {if (res.errno === 0) {//存储用户信息wx.setStorageSync('userInfo', res.data.userInfo);wx.setStorageSync('token', res.data.token);resolve(res);} else {reject(res);}})

③util.js

function request(url, data = {}, method = "GET") {return new Promise(function (resolve, reject) {wx.request({url: url,data: data,method: method,timeout:6000,header: {'Content-Type': 'application/json','X-OA-Token': wx.getStorageSync('token')},

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、emoji的存储

mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。
Linux系统中MySQL的配置文件为my.cnf。
Winows中的配置文件为my.ini。

1、修改配置文件my.ini

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\\tools\\mysql-5.7.23-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\\tools\\mysql-5.7.23-winx64\\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

在这里插入图片描述

2、重启mysql服务

在这里插入图片描述

3、多账号测试

在这里插入图片描述
在这里插入图片描述

4、总结

注意:记得一定要修改配置文件字符集编码,否则在多账号测试时一定会登录失败且后台的控制台一定会报错


http://chatgpt.dhexx.cn/article/0EN752J5.shtml

相关文章

(小程序)后台交互--个人中心

目录 一、微信登录流程简介 二、微信用户获取用户昵称头像和昵称 ① wx.getUserProfile ——> 获取头像 三、微信登录流程代码详解 1.bindgetuserinfo——>把小程序端搭建起来 ① oa-mini 2.登录-小程序 ① wx.checkSession ② wx.login ③ wx.request 3.后台…

动态规划法和策略迭代在扫地机器人中确定状态值和动作值函数的策略评估(python实现 附源码 超详细)

觉得有帮助或需要源码请点赞关注收藏后评论区留言或私信博主要 在强化学习中&#xff0c;动态规划法主要用于求解有模型的MDP问题&#xff0c;尽管在现实任务中难以获得完备的环境模型&#xff0c;且动态规划法需要消耗大量的计算资源&#xff0c;但是作为强化学习的基础&#…

扫地机器人市场:米家、科沃斯激烈肉搏

配图来自Canva 一个干净、整洁的家&#xff0c;在给全家人营造一个舒适的生活空间的同时&#xff0c;也能给全家人带来好的心情以及和睦的家庭氛围&#xff0c;但要一直保持家的整洁&#xff0c;并不是一件轻松的事。 尤其是作为上班族&#xff0c;常常在繁忙的一天工作之后&…

扫地机器人的喋血江湖

2025年全球和中国扫地机器人市场规模&#xff0c;将分别达到130亿美元和50亿美元&#xff08;瑞银预测数据&#xff09;。而眼下&#xff0c;扫地机器人在国内市场渗透率仅4%-6%&#xff0c;远低于美国的13%。 这是资本狂热追逐扫地机器人行业的一个重要原因。 即便行业里已经有…

日语900句(衣食住行)PDF下载地址|百度云盘免费分享

有人说&#xff0c;金字塔的魅力就在于它完美的建筑结构&#xff0c;有坚实深厚的基础&#xff0c;才造就了塔尖的辉煌。 学好日语也是同样的道理&#xff0c;坚实的语言基础很多时候来源于大量的输入&#xff0c;量变达到质变&#xff0c;这种语言便能脱口而出&#xff0c;语感…

基于YoloV4的车辆检测跟踪系统(跟踪准确率大于99%)

1.结果展示 系统采用YoloV4检测车辆目标&#xff0c;对有效车辆检测框进行跟踪匹配&#xff0c;检测结果示意图如下&#xff1a; 检测结果视频为&#xff1a;基于YoloV4的车辆检测跟踪系统_哔哩哔哩_bilibili 2.系统工作流程 工作流程图如下&#xff1a; 检测跟踪系统性能&am…

跟踪自主车辆软件平台

跟踪自主车辆软件平台 Tracking autonomous vehicle software platforms 全世界——包括影音产业和媒体——都承认&#xff0c;通往4级和5级自动驾驶汽车的道路仍然漫长而曲折。 多家领先的汽车原始设备制造商和技术供应商推迟了自主汽车的上市&#xff0c;这是充分的证据&a…

【carsim+simulink 联合仿真——车辆轨迹MPC跟踪】

学习北理工的无人驾驶车辆模型预测控制第2版第四章&#xff0c;使用的仿真软件为Carsim8和MatlabR2019a联合仿真&#xff0c;使用MPC控制思想对车辆进行轨迹跟踪控制&#xff0c;并给出仿真结果。 mpc控制器函数&#xff1a;s-function function [sys,x0,str,ts] MY_MPCContr…

智能车辆路径跟踪控制:纯跟踪控制与Stanley控制算法,其他线相关算法

智能车辆路径跟踪控制&#xff1a;纯跟踪控制与Stanley控制算法&#xff0c;其他线相关算法 主要是MATLAB程序&#xff0c;可以根据需要的路径进行跟踪 ID:6920649147612984

LoRaWAN模块在车辆跟踪定位中的应用

目前 GPS已经在资产的管理中得到了越来越多的运用&#xff0c;如车辆跟踪、车队跟踪、资产监控等&#xff1b;人员跟踪&#xff0c;宠物跟踪&#xff0c;等等。在所有追踪装置中&#xff0c;最重要的是它的电池期望和监视距离。鉴于 LoRaWAN的功率消耗很小&#xff0c;而且能在…

无人驾驶车辆轨迹跟踪控制文献分享(1)

文献题目&#xff1a;Modelling and Control Strategies in Path Tracking Control for Autonomous Ground Vehicles: A Review of State of the Art and Challenges 作者&#xff1a;Noor Hafizah Amer Hairi Zamzuri Khisbullah Hudha Zulkiffli Abdul Kadir 论文类型&am…

无人驾驶之车辆检测与跟踪

整个项目源码&#xff1a;GitHub 整个项目数据集&#xff1a;车辆数据集、无车辆数据集 引言 本次分享主要介绍&#xff0c;如何对道路上的汽车进行识别与跟踪。这里我们实现一个简单的demo。后续我们还会对前面的代码及功能进行重构&#xff0c;从而进一步丰富我们的功能。 …

自动驾驶路径跟踪控制——车辆动力学建模基本概念

文章目录 1. 位姿自由度2. TDOFandCDOF3.运动学与动力学4. 运动控制问题描述5. 运动学建模6. 机器人位姿7. 跟踪误差8. 控制律设计声明 1. 位姿自由度 位姿自由度——系统在空间中的位姿描述所需变量的个数。任何一个没有受约束的物体&#xff0c;在空间均具有6个独立的运动&am…

车辆、行人跟踪一网打尽,超轻量、多类别、小目标跟踪系统开源了!

在琳琅满目的视觉应用中&#xff0c;对车辆、行人、飞行器等快速移动的物体进行实时跟踪及分析&#xff0c;可以说是突破安防、自动驾驶、智慧城市等炙手可热行业的利器~ 但要实现又快又准的持续跟踪&#xff0c;往往面临被检目标多、相互遮挡、图像扭曲变形、背景杂乱、视角差…

车辆轨迹跟踪算法---几何跟踪算法

车辆轨迹跟踪算法 车辆轨迹跟踪算法 车辆轨迹跟踪&#xff0c;目前的主流方法分为两类&#xff1a;基于几何追踪的方法和基于模型预测的方法&#xff1b; 几何追踪方法–pure-pursuit (纯跟踪)算法 阿克曼几何的简化版 – 车辆单轨模型&#xff08;自行车模型&#xff09;采…

MPC车辆轨迹跟踪----理论推导

MPC控制简介 众所周知&#xff0c;控制算法中&#xff0c;PID的应用占据了90&#xff05;&#xff0c;而另外10&#xff05;就是这次的主角MPC控制算法。 MPC控制算法全称模型预测控制&#xff0c;它相对比PID有着多输入&#xff0c;多输出以及更加平稳的特点。并且最重要的是…

车辆检测和跟踪技术的研究与实现

一、引言 车辆的持续跟踪对于肇事车辆的追捕以及减少交通事故具有重要意义。随着计算机技术的快速发展&#xff0c;推动着视频图像的智能化应用。当前对于视频图像的研究热点之一&#xff0c;就包括运动目标跟踪。当前对于运动目标的研究主要集中在单个摄像头的跟踪&#xff0…

自动驾驶:车道线检测、车速检测、实时通行跟踪、基于视频的车辆跟踪及流量统计

日萌社 人工智能AI&#xff1a;Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战&#xff08;不定时更新&#xff09; CNN&#xff1a;RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN 自动驾驶&…

yolo-车辆测距+前车碰撞预警(追尾预警)+车辆检测识别+车辆跟踪测速(原创算法-毕业设计)

目录 前言一、环境配置二、车辆检测、实时跟踪测速算法及代码解读1、主函数各参数含义2、算法实现3、核心代码4、效果展示 二、跟车距离测量算法及代码解读1、主函数各参数含义2、算法实现3、效果展示 三、前车碰撞预警&#xff08;追尾预警&#xff09;算法及代码解读1、算法实…

车辆跟踪技术概述zt

摘 要 基于视频的车辆检测器近年来在智能交通系统(ITS)中得到了越来越广泛的应用。本文介绍了近年来提出的一些主要的基于视频的车辆检测与跟踪技术&#xff0c;并对这些技术进行了分类。同时分析比较了各种方法的优缺点。最后&#xff0c;说明了这一领域仍然存在的问题和对可能…