微信小程序的登录,需要获取到用户的唯一标识OpenId,这里只涉及到后端代码,所以前提是前端申请了一个小程序并且有了appid和secret。
文章目录
一、微信小程序登录流程
二、代码实现
1.引入相关依赖
2.代码实现
实际项目经验分享
一、微信小程序登录流程
先上官方开发文档连接
小程序登录 | 微信开发文档
上面就是微信的官方开发文档,在获取openid之前,需要小程序端调用官方提供的接口wx.login()去获取code(临时登入凭证),通过自己的后端请求,把code传给到服务端(自己的后端),服务端根据 小程序的appid+secret+js_code+grant_type去调用微信提供好的接口,获取到session_key和openid,openId就是用户在这个小程序中的唯一标识,拿到OpenId后,我们就能进行相关操作,处理好后返回数据给小程序端。
二、代码实现
1.引入相关依赖
由于项目中需要使用到微信的第三方接口的调用,以及对返回json数据的解析,在这我强烈推荐由国人生产的HuTool工具包,里面有许多方便的接口,比如第三方接口的调用,Json数据的解析与转换,随机数字的生成;可以提高效率。
<!--hutool具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.4.0</version>
</dependency>
2.代码实现
代码如下:
代码中需要用到的参数要根据自己申请的小程序中的参数对应文章来源:https://www.toymoban.com/news/detail-531961.html
package com.lyj.ylwechat.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.AlgorithmParameters;
import java.security.Security;
import java.util.Arrays;
import java.util.HashMap;
public class WeChatUtil {
public static JSONObject getSessionKeyOrOpenId(String code) {
//微信小程序官方接口
String requestUrl = "https://api.weixin.qq.com/sns/jscode2session";
//接口所需参数
HashMap<String, Object> requestUrlParam = new HashMap<>();
//小程序appId
requestUrlParam.put("appid", "wx08613a542bab");
//小程序secret
requestUrlParam.put("secret", "5f929f8894a2f7d58ef5d0ef1d6");
//小程序端返回的code
requestUrlParam.put("js_code", code);
//默认参数,固定写死即可
requestUrlParam.put("grant_type", "authorization_code");
//发送post请求读取调用微信接口获取openid用户唯一标识
String result = HttpUtil.get(requestUrl, requestUrlParam);
JSONObject jsonObject = JSONUtil.parseObj(result);
String openid = jsonObject.get("openid", String.class);
return jsonObject;
}
public static JSONObject getUserInfo(String encryptedData, String sessionKey, String iv) throws Exception {
// 被加密的数据
byte[] dataByte = Base64.decode(encryptedData);
// 加密秘钥
byte[] keyByte = Base64.decode(sessionKey);
// 偏移量
byte[] ivByte = Base64.decode(iv);
try {
// 如果密钥不足16位,那么就补足. 这个if 中的内容很重要
int base = 16;
if (keyByte.length % base != 0) {
int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0);
byte[] temp = new byte[groups * base];
Arrays.fill(temp, (byte) 0);
System.arraycopy(keyByte, 0, temp, 0, keyByte.length);
keyByte = temp;
}
// 初始化
Security.addProvider(new BouncyCastleProvider());
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC");
SecretKeySpec spec = new SecretKeySpec(keyByte, "AES");
AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES");
parameters.init(new IvParameterSpec(ivByte));
// 初始化
cipher.init(Cipher.DECRYPT_MODE, spec, parameters);
byte[] resultByte = cipher.doFinal(dataByte);
if (null != resultByte && resultByte.length > 0) {
String result = new String(resultByte, "UTF-8");
return JSONUtil.parseObj(result);
}
} catch (Exception e) {
}
return null;
}
}
实际项目经验分享
上面仅仅是获取到了用户在申请小程序端中的唯一标识Openid,拿到OpenId等信息之后,可以把用户信息保存到数据库。将openid保存下来,与token(自定义登入状态)来进行关联,最后把小程序需要的数据返回给小程序端,以后就通过token来维护用户登入状态。文章来源地址https://www.toymoban.com/news/detail-531961.html
到了这里,关于微信小程序登录获取用户唯一标识OpenId,(SpringBoot项目)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!