微信小程序登录后根据code获取APP_ID和APP_SECRET与火狐信息

话不多说,直接上代码。

session_key是与用户微信客户端之间通信的密钥,获取用户信息时会用到。

调用:getSessionKeyAndOpenId方法传入code值,返回openid与session_key,

这里的:

appid: 应用唯一标识,在微信开放平台提交应用审核通过后获得

secret: 应用密钥,也是在微信开放平台获得

把下面代码复制粘贴就能直接用了。

@Service
public class WeChatLoginServiceImpl {@Autowiredprivate WeChatClient weChatClient;private static final String APP_ID = "wx2bxxxxx4c2a8";private static final String APP_SECRET = "72b0ab089db22cc3c9a8e2fxxxxxxx35a";static {Security.addProvider(new BouncyCastleProvider());}//获取微信用户信息public String getUserPortionMsg(WxUserDetails details) {String uxUserMsg = decryptData(details.getEncryptedData(), details.getSession_key(), details.getIv(), "UTF-8");return uxUserMsg;}// 用于加密与解密public static String decryptData(String data, String key, String iv, String encodingFormat) {try {byte[] dataByte = Base64.decodeBase64(data);byte[] keyByte = Base64.decodeBase64(key);byte[] ivByte = Base64.decodeBase64(iv);Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); // 修改这里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 (resultByte != null && resultByte.length > 0) {return new String(resultByte, encodingFormat);}return null;} catch (Exception e) {e.printStackTrace();throw new RuntimeException("解密失败:" + e.getMessage(), e);}}// 返回sessionKey和OpenIdpublic LoginCertificate getSessionKeyAndOpenId(String code) {String jsonResponse = weChatClient.getOpenId(APP_ID, APP_SECRET, code, "authorization_code");LoginCertificate loginCertificate;try {// 将JSON字符串解析为LoginCertificate对象loginCertificate = JSON.parseObject(jsonResponse, LoginCertificate.class);} catch (Exception e) {return null;}return loginCertificate;}
}
@Data
public class WxUserDetails {// 错误消息:如果请求成功,通常为 "getPhoneNumber:ok"private String errMsg;// 加密数据:包含敏感信息如用户的手机号码,需要使用session_key进行解密private String encryptedData;// 加密算法的初始向量:用于解密encryptedDataprivate String iv;// 用户的登录凭证(code):在用户登录时获取,用于请求session_key和openidprivate String code;// 用于解密的session_keyprivate String session_key;// 用户的openidprivate String openid;
}
@Data
public class LoginCertificate {private String openid;private String session_key;
}
@FeignClient(name = "weChatClient", url = "https://api.weixin.qq.com")
public interface WeChatClient {/*** 获取微信的openid和session_key* @param appId* @param secret* @param code* @param grantType* @return*/@GetMapping("/sns/jscode2session")String getOpenId(@RequestParam("appid") String appId,@RequestParam("secret") String secret,@RequestParam("js_code") String code,@RequestParam("grant_type") String grantType);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756449.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SSH服务

目录 一. 熟悉SSH服务 1.1 何为SSH协议 1.2 SSH服务优点 1.3 常见的SSH协议 1.4 SSH服务的功能 1.5 为何使用SSH服务 1.6 SSH服务的工作原理 1.6.1 公钥传输原理 1.6.2 ssh加密通讯原理 1.7 SSH服务的最佳应用场景 1.8 SSH服务远程登录的方式 1.8.1 方法一&#…

自动驾驶决策 - 规划 - 控制 (持续更新!!!)

总目录 Frenet与Cartesian坐标系 Apollo基础 - Frenet坐标系 车辆模型 车辆运动学和动力学模型 控制算法 PID控制器轨迹跟随实现 Pure Pursuit控制器路径跟随 路径跟踪算法Stanley 实现 c 无人驾驶LQR控制算法 c 实现 MPC自动驾驶横向控制算法实现 c 双环PID控制详细讲解 …

【DL经典回顾】激活函数大汇总(二十六)(Identity附代码和详细公式)

激活函数大汇总(二十六)(Identity附代码和详细公式) 更多激活函数见激活函数大汇总列表 一、引言 欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的…

大模型面试题最全总结,没有一道是送分题。。。

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂同学、参加社招和校招面试的同学,针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 今天分享…

3月19日做题

[NPUCTF2020]验证🐎 if (first && second && first.length second.length && first!second && md5(firstkeys[0]) md5(secondkeys[0]))用数组绕过first1&second[1] 这里正则规律过滤位(Math.) (?:Math(?:\.\w)?) : 匹配 …

串口123

1.开启时钟 把需要使用的USART和GPIO的时钟打开 2.GPIO初始化 把TX配置成复用输出,RX配置成输入 3.配置USART 直接使用一个结构体即可将所有参数配置完成 4.开关控制 如果需要仅发送的功能,就直接开启USART,初始化到此结束 如果还需要接收…

优化器算法SGD、Adam、AdamW等

文章目录 SGDSGD with momentumSGD with Nesterov AccelerationAdaGradRMSpropAdaDeltaAdamAdamW参考资料 假设有: 待优化的目标函数为 f ( w ) f(w) f(w),使用优化算法来最小化目标函数 f ( w ) : a r g m i n w f ( w ) f(w):argmin_wf(w) f(w):argmin…

获取指定路径下,所有指定后缀文件列表

要获取指定路径下所有指定后缀的文件列表,你可以使用Python的os和glob模块。下面是一个简单的示例,展示了如何获取指定路径下所有.txt后缀的文件列表: import os import globdef get_files_with_extension(directory, extension):"&quo…

vivado 布线、路线_设计

路由 Vivado路由器对放置的设计执行路由,并对路由设计,以解决保留时间冲突。Vivado路由器从放置的设计开始,并尝试路由所有网络。它可以从已放置的未布线、部分布线或完全布线的设计。对于部分路由的设计,Vivado路由器使用现有的…

Unittest框架及自动化测试实现流程

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 Unittest框架介绍 Unittest框架是Python中一个标准的库中的一个模块,该模块包括许多…

红与黑(c++题解)

题目描述 有一间长方形的房子,地上铺了红色、黑色两种颜色的正方形瓷砖。你站在其中一块黑色的瓷砖上,只能向相邻的黑色瓷砖移动。请写一个程序,计算你总共能够到达多少块黑色的瓷砖。 输入格式 包括多个数据集合。每个数据集合的第一行是…

【Mysql】面试题汇总

1. 存储引擎 1-1. MySQL 支持哪些存储引擎?默认使用哪个? 答: MySQL 支持的存储引擎包括 InnoDB、MyISAM、Memory 等。 Mysql 5.5 之前默认的是MyISAM,Mysql 5.5 之后默认的是InnoDB。 可以通过 show engines 查看 Mysql 支持…

外包2月,技术退步惊现!大专生逆袭大厂,全靠这份神秘资料!

大家好,我是一名大专生,19年通过校招进入湖南某软件公司,从事功能测试工作已近4年。今年8月,我意识到长期舒适的环境让我变得不思进取,技术停滞不前,甚至因此失去了谈了2年的女朋友。我下定决心&#xff0c…

金蝶云星空——插件dll重新发布报错:鏃犳硶鏄剧ず椤甸潰锛屽洜涓哄彂鐢熷唴閮ㄦ湇鍔″櫒閿欒銆�

项目场景: 金蝶插件开发 问题描述 今天更新了插件dll然后重启IIS金蝶就报如下错误: 解决方案: 折腾了一天结果发现是给自己挖坑了,这次更新我担心插件代码有问题就把原dll重命名了然后把最新dll更新到金蝶bin文件中&#xff0c…

vue实现双向绑定原理深度解析

1. vue双向绑定应用场景 Vue的双向绑定机制主要体现在以下几个方面: 表单输入:在表单输入中,Vue的双向绑定机制非常有用。通过v-model指令,可以将表单元素的值与Vue实例中的数据进行双向绑定,当用户在表单输入框中输入内容时,数据会自动更新,反之,当数据发生变化时,输…

【DBC专题】-11-使用Cantools将CAN/CANFD DBC自动生成C语言代码

目录 1 安装Python和Cantools 1.1 查看Python已安装的Package包 1.2 在Python中安装Cantools插件包 1.3 获取更多Cantools工具的更新动态 2 经典CAN/CANFD DBC自动生成C语言代码 2.1 批处理文件CAN_DBC_To_C.bat内容说明 2.2 经典CAN/CANFD DBC文件要求 2.3 如何使用生…

网站引用图片但它域名被墙了或者它有防盗链,我们想引用但又不能显示,本文附详细的解决方案非常简单!

最好的办法就是直接读取图片文件&#xff0c;用到php中一个常用的函数file_get_contents(图片地址)&#xff0c;意思是读取远程的一张图片&#xff0c;在输出就完事。非常简单&#xff5e;话不多说&#xff0c;直接上代码 <?php header("Content-type: image/jpeg&quo…

clipboard好用的复制剪切库

clipboard是现代复制到剪贴板的工具&#xff0c;其 gzip 压缩后只有 3kb&#xff0c;能够减少选择文本的重复操作&#xff0c;点击按钮就可以复制指定内容&#xff0c;支持原生HTMLjs&#xff0c;vue3和vue2。使用方法参照官方文档&#xff0c;so easy&#xff01;&#xff01;…

装X神器,装X图片生成器,高富帅模拟器

先展示两张效果 基金装X图 短信存款图 神器功能展示 总共有12大类可供用户选择 还有一些美感的&#xff1a; 总结 总之种类非常多&#xff0c;有了这个神器你懂的&#xff5e; 关注下方公众号&#xff0c;回复【zzsq】即可获取。

YS/T 429.2-2012 有机聚合物喷涂幕墙铝单板检测

有机聚合物喷涂幕墙铝单板是指以氟碳漆或粉末做表面涂层的幕墙用铝及铝合金单层形成的铝单板。 YS/T 429.2-2012有机聚合物喷涂幕墙铝单板检测项目&#xff1a; 测试项目 测试方法 力学性能 GB/T 16865 尺寸偏差 GB/T 3880.3 光泽 GB 5237 颜色和色差 GB 5237 厚度 …