你好,我是博主
宁在春
,一起学习吧!!!写这篇文章的原因,主要是因为最近在写毕业设计,用到了小程序,这中间曲曲折折,一言难尽啊。毕业设计真的让人麻脑阔😂。唉
最近在持续更新,每天推送完代码,遇到的问题都记下来,希望对大家也能有所帮助。
在网上找了很多很多,看了不下几十篇,说实话,有些给出了核心代码,添上一个微信官方的那张流程图就结束了,会的人一下就懂了。但是说实话,真的不适合入门学者,浪费很多时间都不一定能解决问题,将代码复制完不是少这就是少那,或者就是不齐,不知道看到这篇文章的你有没有遇到过这样的问题。
所以我自己将踩坑的经历写下来了,希望能够帮助到大家,开源进步,交流进步,一起学习!!!
挺多小伙伴遇到过这个问题,如果大家对文章内容存有疑惑或者实现不了这个小demo亦或者文章中有什么错误,可以直接评论、留言或可以直接发问题到邮箱:nzc_wyh@163.com
希望能够帮助到大家(当然,如果我可以做到的话 🦮)
看到都会尽快回复大家,谢谢大家,一起努力
一、微信小程序官方登录流程图
个人理解
:
- 调用wx.login() 获取
code
,这个code的作用是实现微信临时登录的url
中的一个非常重要的参数。
* 微信授权的url="[api.weixin.qq.com/sns/jscode2…](https://api.weixin.qq.com/sns/jscode2session?appid=%7B0%7D&secret=%7B1%7D&js_code=%7B2%7D&grant_type=authorization_code)"
* `js_code`所用到的值就是 获取到的code。
- 把获取到的
code
传给我们自己的SpringBoot
后端,由我们后端向微信接口服务发送请求。
*
1 | java复制代码String url = "https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code"; |
* `appid`:应用ID,`secret`:应用密钥,`js_code`:前台传给我们的`code`
* `secret`获取方式:
1. 进入[微信公众平台](https://mp.weixin.qq.com/)
2. 左侧菜单选择【开发管理】
3. 右侧tab选择【开发设置】
4. AppSecret栏右侧点击重置会弹出一个二维码,需要开发者扫描二维码才可以重置AppSecret。出现AppSecret后点击复制,并保存你的AppSecret。
5. 没保存就只能重新生成了。
- 后端发送请求后获取到的返回信息:
1 | cmd复制代码{"session_key":"G59Evf\/Em54X6WsFsrpA1g==","openid":"o2ttv5L2yufc4-VoSPhTyUnToY60"} |
- 按照官方文档所讲:自定义登录态与
openid和session_key
关联,有很多方式可以实现的,如:
* 第一种方式:我们可以将`openid和session_key`存进redis中,前端来访问的时候带上就能够访问了。
* 第二种方式:利用`jwt`方式生成`Token`返回给前端,让前端下次请求时能够带上,就能允许他们访问了。
- 前端将
token
存入storage
- 前端在
wx.request()
发起业务请求携带自定义登录态,后端进行请求头的检查就可以了。 - 后端返回业务数据
上述就是官方的方式,但是在现在的时代,数据是非常重要的,不可能说不将用户数据持久化的,所以这个流程会稍稍多一些操作的。
二、个人实现登录流程图
三、小程序端
先说一下,这里只是测试的Demo,是分开测试的。
我本地没有微信的编程坏境是拿小伙伴的测试的。
2.1、调用wx.login()
1 | javascript复制代码wx.login({ |
就是这样的一个字符串:
我们将这个返回的code
,先保存起来,稍后我们在后端测试中会用上的。
2.2、调用getUserInfo()
1 | html复制代码<button open-type="getUserInfo" bindgetuserinfo="userInfoHandler"> Click me <tton> |
1 | javascript复制代码// 微信授权 |
打印出来是这样的一些数据。
我们需要保存的是
encrytedData
:包括敏感数据在内的完整用户信息的加密数据(即可以通过反解密,获取出用户数据),详见 用户数据的签名验证和加解密iv
:加密算法的初始向量,详见 用户数据的签名验证和加解密
至此,我们需要在前台获取的数据,已经结束了,接下来就用我们获取到的数据一起来看后端吧!!!
四、SpringBoot后端
为了将代码精简,我这边只是把获取到的数据输出出来,并未真实的保存到数据中。业务操作用注释在文中展示。
项目结构:
3.1、相关jar
创建一个SpringBoot项目,或者maven项目都可以。
1 | xml复制代码 <parent> |
3.2、yml配置文件
1 | yml复制代码server: |
3.3、公共类
就是一常量
1 | java复制代码public class RedisKey { |
1 | java复制代码/** |
1 | java复制代码 |
1 | java复制代码package com.crush.mybatisplus.config; |
3.4、Controller
1 | java复制代码import com.crush.weixin.commons.Result; |
3.5、service层
1 | java复制代码public interface IWeixinService extends IService<Weixin> { |
1 | java复制代码import cn.hutool.core.lang.UUID; |
2121年11月27号:应该是微信接口更新了,在此处通过解密获取到的信息中,并不包含openId啦,得自己去拿到才可以。
牵扯到用户信息解密的方法,想要了解,可以去微信官方文档中进行了解,我对此没有深入。
1 | java复制代码import cn.hutool.core.codec.Base64; |
最后写个启动类就可以开始测试了。
1 | java复制代码@SpringBootApplication |
五、测试
写完后端,接下来,可以利用我们之前收集的那些小程序中获取到的数据啦。
1、先发送第一个请求:
code
:就是之前我们获取到的数据。
1 | http复制代码http://localhost:8081/weixin/sessionId/{code} |
会返回一个sessionId
回来,在第二个请求中需要携带。
2、再发送第二个请求
1 | http复制代码http://localhost:8081/weixin/authLogin |
请求方式:post
data
:json格式数据
1 | json复制代码{ |
请求成功是下面这样的。
我们把我们需要的存储到数据库持久化即可啦。
六、自言自语
这只是一个小demo,在使用中大都会结合security
安全框架和Jwt
一起使用,周末吧,周末比较有空,有空就会更新出来。
你好,我是博主
宁在春
,有问题可以留言评论或者私信我,大家一起交流学习!不过都看到这里啦,点个赞吧👩💻
源码
:
补充
:
如果拿github
查看项目的话,可以在google
安装一个扩展程序。看代码会更加的方便
安装之后,在github
上查看项目,会在左侧多一个下面这样的目录结构。比较方便
今天的文章就到了这里啦,下次再见!!!
本文转载自: 掘金