微信支付的回调函数实现验签以及解密
当我使用的微信的依赖版本大于0.4.2的时候,就可以使用一下方法进行验签和解密
现在我是用的版本是0.4.8
<dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.4.8</version>
</dependency>
以下是我写的回调函数,也就是回调接口
@PostMapping("/wx-pay-call-back.json")public String wxPayCallBack(HttpServletRequest request, HttpServletResponse response) throws ValidationException, ParseException, GeneralSecurityException {String readData = HttpUtils.readData(request);NotificationRequest notificationRequest = new NotificationRequest.Builder().withSerialNumber(request.getHeader(WechatPayHttpHeaders.WECHAT_PAY_SERIAL)).withNonce(request.getHeader(WechatPayHttpHeaders.WECHAT_PAY_NONCE)).withTimestamp(request.getHeader(WechatPayHttpHeaders.WECHAT_PAY_TIMESTAMP)).withSignature(request.getHeader(WechatPayHttpHeaders.WECHAT_PAY_SIGNATURE)).withBody(readData).build();NotificationHandler handler = new NotificationHandler(verifier, config.getApiV3Key().getBytes(StandardCharsets.UTF_8));// 验签和解析请求体Notification notification = handler.parse(notificationRequest);log.info("====================验签和解析请求体=================>>{}",notification.toString());AesUtil util = new AesUtil(config.getApiV3Key().getBytes(StandardCharsets.UTF_8));Notification.Resource resource = notification.getResource();String ciphertext = resource.getCiphertext();log.info("===密文==={}",ciphertext);String associatedData = resource.getAssociatedData();String nonce = resource.getNonce();String plainText = util.decryptToString(associatedData.getBytes(StandardCharsets.UTF_8),nonce.getBytes(StandardCharsets.UTF_8),ciphertext);log.info("===明文==={}",plainText);response.setStatus(200);Map<String,String> result = new HashMap<>();result.put("code","SUCCESS");result.put("message","成功");return JSONObject.toJSONString(result);}
工具类
//处理微信回diao xin xi
public class HttpUtils {/*** 将通知参数转化为字符串* @param request* @return*/public static String readData(HttpServletRequest request) {BufferedReader br = null;try {StringBuilder result = new StringBuilder();br = request.getReader();for (String line; (line = br.readLine()) != null; ) {if (result.length() > 0) {result.append("\n");}result.append(line);}return result.toString();} catch (IOException e) {throw new RuntimeException(e);} finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}}
微信支付的回调函数实现验签以及解密相关推荐
- 微信支付退款回调踩坑及解决方案(附解密代码)
文章目录 1. 回调失败问题(沙箱环境) 2. 解决方案 3. 退款回调的解密代码 1. 回调失败问题(沙箱环境) 问题始末: 最近再弄微信退款回调发现设置的回调的url根本就没有被调用,但是微信支付 ...
- 微信支付API v3签名与验签-APP支付问题
目录 使用API v3微信支付遇到的问题: 1.微信请求客户端配置 2.生成预付款订单 3.拼接字符串使用API v3签名 4.微信支付成功后通知 使用API v3微信支付遇到的问题: 1.jdk版本 ...
- PHP对微信支付v2回调进行验签并将相关数据加入数据库
PS:对于V2版本微信支付的回调需要在线上环境进行,本文中出现的数据库的相关字段,各位请按照个人需求进行修改,此处只对微信回调数据进行相关解析; 代码方面写的比较杂乱,多看注释,相关代码根据个人需求进 ...
- 微信支付V3版本的 签名生成,验签,解密,统一下单的简单封装
微信支付 V3版本的 签名生成,验签,解密,统一下单的简单封装 V3Base 获取平台证书 回调报文解密 统一下单 暂时看了文档只完成了这部分,感觉封装的不是特别完美,希望有大佬指点一下,想着封装好一 ...
- java微信支付v3系列——5.微信支付成功回调
目录 java微信支付v3系列--1.微信支付准备工作 java微信支付v3系列--2.微信支付基本配置 java微信支付v3系列--3.订单创建准备操作 java微信支付v3系列--4.创建订单的封 ...
- 微信支付重复回调,java微信支付回调问题
这几天一直在研究微信支付回调这个问题,发现之前微信支付回调都是正常的也没怎么在意,今天在自己项目上测试的时候发现相同的代码在我这个项目上微信支付回调老是重复执行导致支付成功之后的回调逻辑一直在执行,很 ...
- PHP微信支付获取回调数据
微信支付获取回调数据 微信回调接口比较麻烦一点就是不方便测试 微信支付回调函数都是使用以下变量获取POST数据: php配置中,必须启用 always_populate_raw_post_data / ...
- 微信回调接口java返回true_java 微信支付异步回调接口
1.微信支付异步回调接口 @SuppressWarnings("static-access") @RequestMapping("callback") @Res ...
- 微信支付同时回调多次的解决办法
遇到一个问题,微信支付成功回调,再本地使用ngrok做内网穿透,也不知到是ngrok的问题,还是微信的问题,支付成功回调会执行多次,2分钟内5,6次左右,但是debug只拦截到一次请求,其他的请求会跟 ...
最新文章
- 2021年大数据Spark(七):应用架构基本了解
- Java迭代器使用注意
- 5 篇 AAAI 2018 论文看「应答生成」
- 宝塔安装php遇错libicui18n.so.42: cannot open shared object file: No such file or directory
- vs2015 单元测试 linux,VS2015做单元测试
- Lead saved query bug
- 查看目录是否为内存盘_Linux buff/cache内存释放
- MySQL字符串转日期
- 畅聊Java异步编程
- 科技类外包人员考核评价规则
- Centos7 无线网络设置
- 为什么有的人赚钱很简单,有的人却不行?
- 小型微型计算机系统加急,小型微型计算机系统杂志
- 以完整解决方案引领智慧转型,联想在深发布ThinkSystemThinkAgile双品牌新品
- 椭圆一般方程参数求解
- Linux(Ubuntu)下C语言编译与调试
- 电脑一个磁盘分为两个磁盘
- 时间复杂度On和空间复杂度O1分别是什么
- 菜鸟教程python100题:递归函数
- 嵌入式开发—串口通信