目录

1.获取用户昵称和头像

2.登录过程

3.登录-小程序

4.后台


1.获取用户昵称和头像

小程序登录https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html

登录过程:

  • 说明

    • 调用 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 传到小程序客户端等服务器外的环境。

2.登录过程

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

3.登录-小程序

4.后台

小程序服器配置

导入微信小程序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

微信小程序后台交互-个人中心06相关推荐

  1. 微信小程序--后台交互/wx.request({})方法/渲染页面方法 解析

    小程序的后台获取数据方式get/post具体函数格式如下:wx.request({}) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 ...

  2. python开发微信小程序-Django微信小程序后台开发教程的实现

    1 申请小程序,创建hello world小程序 2 添加交互框和按钮 index. wxml cal {{ result }} index.wxss /**index.wxss**/ .input ...

  3. Django微信小程序后台开发教程

    Django微信小程序后台开发教程 1 申请小程序,创建hello world小程序 2 添加交互框和按钮 3 在服务器配置hello django 4 实现计算器接口 5 配置服务器将后端与微信小程 ...

  4. 微信小程序python flask_Python Flask 搭建微信小程序后台详解

    前言: 近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序.因为是初次接触小程序,经过一番摸索和尝试,个 ...

  5. 鸿蒙与微信小程序,鸿蒙远程交互应用 vs 微信小程序远程交互应用

    原标题:鸿蒙远程交互应用 vs 微信小程序远程交互应用 鸿蒙的远程交互组件应用相对复杂,访问网络时,首先要配置网络权限,华为官方文档有问题,在此引用我老师配置的模板,见附件. 过程: 导入鸿蒙的网络请 ...

  6. 基于腾讯云服务器部署微信小程序后台服务(Python+Django)

    一 前言 微信小程序,相信大家早已熟知,它是一种无需下载安装即可使用的轻型应用,具有跨平台和接近Native App性能体验的优势.从开发模式上说,它是前后端分离的,微信小程序负责实现前端应用,后端服 ...

  7. .Net Webapi SignalR与微信小程序的交互

    .Net Webapi SignalR与微信小程序的交互 一.SignalR与Webapi 1.SignalR的安装: Signalr与跨域仅需要安装两个开源库 Microsoft.Owin.Cors ...

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

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

  9. 【delphi】开发微信小程序后台控件(一)(含源代码、演示程序、控件使用帮助)

    1. 前言 微信小程序已经非常普及,但是遗憾的是官方提供的 SDK 等没有Delphi语言的,这样使用Delphi语言开发微信小程序后台就相对比较困难,需要研究平台API,费时费力,特别是调试API很 ...

最新文章

  1. Mybatis原理分析一 从JDBC到Mybaits
  2. Spring之数据库操作
  3. Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题
  4. win7建立wifi热点
  5. VC中的#pragma指令的用法
  6. shell变量/环境变量和set/env/export用法_转
  7. Java中的堆分配参数总结《对Java的分析总结》(二)
  8. scrapy 去重策略修改
  9. 项目背景一般写什么_项目申报整体框架规划思路,提高你的书写逻辑!
  10. NYOJ题目66-分数拆分
  11. CentOS系统简介
  12. cf服务器人最多,玩家实测CF各大区在线人数排名 你的区排第几?
  13. 前端class的中括号用法
  14. python翻转课堂_翻转课堂
  15. 柴静《看见》发布会。。。
  16. sqlserver修改主键id自增
  17. mac word 2016中文输入问题解决
  18. QUIC传输协议设计
  19. 【Linux】虚拟机VMware的Ubuntu使用vi指令的方向键和backspace空格键乱码
  20. 计算机的外存与I/O设备

热门文章

  1. OMS系统是什么?主要功能和优势有哪些?
  2. sonarQube8.9使用及branch插件使用
  3. wma转换成mp3格式,wma转mp3快速完成
  4. java keytool 代码_java中Keytool的使用总结
  5. wxwidget编译安装_win7下wxwidgets开发环境配置
  6. 逆变器运用到的c语言算法,详解六种逆变电源的控制算法
  7. 七夕到了,程序员怎么过七夕
  8. cl.zk0.info/index.php,兄弟连区块链入门到精通教程btcpool矿池源码分析环境搭建
  9. BCGControlBar使用说明
  10. 30个你应该在2023年里使用的JavaScript 动画库