目录

一,获取用户昵称和头像

登录过程

二,登录-小程序

三,后台

小程序服器配置


一,获取用户昵称和头像

登录过程

小程序登录

小程序可以通过微信官方提供的登录能力方便地获取微信提供的用户身份标识,快速建立小程序内的用户体系。

  • 说明

    • 调用 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 只能通过小程序端的登录来操作;

wx.checkSession

检查登录态是否过期

wx.login

调用接口获取登录凭证(code)

wx.request

请求自己小程序服器,并且携带了code,userInfo信息

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);}})

将userInfo,token数据保存到本地

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')},

如果使用util.request函数,每次请求都会携带'X-OA-Token': wx.getStorageSync('token');而服器已经保存了所有的token,所以服器通过token区分每个客户端

emoji

mysql的utf8编码的一个字符最多3个字节,但是一个emoji表情为4个字节,所以utf8不支持存储emoji表情。但是utf8的超集utf8mb4一个字符最多能有4字节,所以能支持emoji表情的存储。

Linux系统中MySQL的配置文件为my.cnf。

Winows中的配置文件为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

三,后台

小程序服器配置

导入微信小程序SDK

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

application.yml

oa:wx:app-id: wxf23b28b5e4ea4d6aapp-secret: 212621faa31cdf0691367ea45b2b6041msgDataFormat: JSON

WxProperties

封装oa.wx的数据

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

WxConfig

注册WxMaService

@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);}

响应给客户端数据有:token userInfo

小程序后台数据交互-个人中心相关推荐

  1. 微信小程序后台数据交互与wxs文件的介绍与使用

    准备后台 后台源代码分享 .. .. ssm-oa.rar - 蓝奏云 前端测试代码分享 oa-mini.rar - 蓝奏云 前端发送请求封装 Promise Promise 是异步编程的一种解决方案 ...

  2. Java后台与微信小程序的数据交互

    想把自己写的一个小项目转成微信小程序,主要是因为小程序比较火,而且自己想学一下小程序的东西,所以抱着初学者的心态开始了这个痛苦的旅程.看过小程序的一点视频,个人感觉和HTML,css,js差不多,甚至 ...

  3. 微信小程序之数据交互

    学习视频: https://www.bilibili.com/video/BV1Gv411g7j6?p=88&spm_id_from=pageDriver 数据交互(首页) 把图片.视频资源放 ...

  4. 微信小程序--服务器数据交互

    通过收集用户填写的表单信息提交给服务器.在窗口显示中能够看到提交的信息. 小程序: 服务器窗口: 代码结构: 编写app.json设置index页面-->编写index.json设置导航栏的标题 ...

  5. 通过asp.netWebService给微信小程序传递数据

    通过webservice服务方法同微信小程序进行数据交互: 1.微信接收数据并展示: 后台:asp部分: 新建webService服务 WebService1.asmx 在webService1.as ...

  6. 实现小程序与SSM后台数据交互

    实现小程序与SSM后台数据交互 项目源码 文章目录 实现小程序与SSM后台数据交互 项目源码 1.controller 2.小程序js 实现效果 1.controller @RequestMappin ...

  7. 微信小程序数据库交互 php,微信小程序wx.request实现后台数据交互功能分析

    本文主要介绍微信小程序wx.request实现后台数据交互功能,分析微信小程序wx.request在后台数据交互过程中遇到的问题与相关的解决方法,需要的朋友可以参考下 记录微信小程序wx.reques ...

  8. 微信小程序——微信小程序后台自定义分析,数据准确性分析

    序 由于公司小程序产品大多为信息流产品,所以对小程序图文的数据准确性,精细度有较高的需求,以便编辑人员通过对数据的分析,可以针对性的编写图文,提高爆文数量. 问题描述 公司自己是有一个统计平台,对小程 ...

  9. --@angularJS--自定义服务与后台数据交互小实例

    1.myService.html: <!DOCTYPE HTML> <html ng-app="app"> <head>     <tit ...

最新文章

  1. 树、森林与二叉树的转换
  2. 极米亮相CES展 首推3000元内1080p无屏电视
  3. ◎◎identity ,ident_current() ,scope_identity的区别
  4. python基础知识第四篇(元组)
  5. Android Studio引入.so文件的正确姿势 以及调用.so 文件时报错has text relocations 解决
  6. Android keystore/Keymaster的代码导读
  7. Ibatis学习总结1--ibatis简介和SQL Maps
  8. 大道至简第一章阅读笔记
  9. QQ vs 360的战争之我见
  10. mysql 做回归模型_GitHub - themycode/intelligent-test-platform: intelligent-test-platform
  11. java面试题2014_Java生态系统– 2014年我的5大亮点
  12. qq浏览器网页版_QQ邮箱回应部分用户登录异常:系后台服务波动,问题已解决...
  13. Java笔记9:构造方法,内部类
  14. toLocaleTimeString()方法在IE和谷歌浏览器上 根据本地时间格式,把 Date 对象的时间部分(不含日期)转换为“时间字符串”存在区别...
  15. 九宫格c语言实验报告,9X9,九宫格测试,C编程。
  16. 安卓系统原生定位不可用修改
  17. GitHub:新浪微博爬虫,用Python采集新浪微博数据
  18. linux复制特定类型文件,Linux复制指定目录及子目录下特定类型的文件
  19. 操作系统的主要功能(3)
  20. 什么是应用宝统一链接服务器,腾讯只悄悄地在手Q中整合应用宝,就开始逆天了...

热门文章

  1. 涉密学位论文不得在联网的计算机上撰写,华南理工大学涉密学位论文管理暂行规定.doc...
  2. ubuntu双系统时间同步_解决Windows与Ubuntu双系统时间同步问题
  3. mac迅雷如何批量下载页面全部链接(无需插件,只需三步)
  4. 域策略怎么分发计算机软件,AD域中如何布置软件自动分发
  5. Python3爬取国家统计局官网2019年全国所有城市(2020年更新)
  6. P2471 [SCOI2007]降雨量(线段树)
  7. 关于参加大学生数学竞赛的一点感悟与体会
  8. C++的静态成员变量和静态成员函数
  9. 体积光 GodRay
  10. 【Android 逆向】函数拦截 ( 使用 cache_flush 系统函数刷新 CPU 高速缓存 | 刷新 CPU 高速缓存弊端 | 函数拦截推荐时机 )