微信支付的回调函数实现验签以及解密

2023-05-16

当我使用的微信的依赖版本大于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();
                }
            }
        }
    }

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

微信支付的回调函数实现验签以及解密 的相关文章

  • vm Debian 9 做服务器

    虚拟机 xff08 vm xff09 Debian 9 做服务器 参考虚拟机Centos做服务器 参考设置静态ip和dns 安装vm 43 debian9 不多说设置中文字符 43 locale安装net tools apt get ins
  • ProXmox VE创建虚拟机

    Proxmox VE Proxmox VirtualEnvironment 是一个非常棒的集成OPENVZ支持KVM应用的环境 有方面易用的WEB界面 xff0c 基于JAVA的UI和内核接口 xff0c 可以登录到VM客户方便的操作 xf
  • 抖音研发实践:基于二进制文件重排的解决方案 APP启动速度提升超15%

    背景 启动是App给用户的第一印象 xff0c 对用户体验至关重要 抖音的业务迭代迅速 xff0c 如果放任不管 xff0c 启动速度会一点点劣化 为此抖音iOS客户端团队做了大量优化工作 xff0c 除了传统的修改业务代码方式 xff0c
  • supervisor安装使用

    supervisord服务进程管理器 一 安装 yum span class token function install span supervisor 二 目录及使用 安装后 1 生成 etc supervisord conf 配置文件
  • laravel引入第三方云平台及使用方法

    一 引入第三方类 1 阿里oss span class token function composer span require jacobcyl ali oss storage 2 1 2 腾讯cos span class token f
  • 在ubuntu上安装多个版本的CUDA,并且可以随时切换

    前言 实验室工作站被多人使用导致需求不同的cuda版本 xff0c 一直没找到一个完全完整靠谱的教程 xff0c 这是我参考几个博客完成测试的全过程记录 xff0c 方便以后操作 xff0c 无任何商业用途 xff0c 如有侵权 xff0c
  • 在CentOS运行APPIMAGE文件时提示AppImages require FUSE to run

    输入如下命令行 xff1a yum enablerepo 61 epel y install fuse sshfs install from EPEL user 61 w h o a m
  • C++中的虚函数详解

    虚函数在运行时绑定 xff0c 即运行时确定执行的函数 所谓的后期绑定就是一个基类中有一个虚函数 xff0c 而派生类中重写了这个函数 xff0c 那么调用的这个虚函数的时候根据类的实例的不同而调用不同的函数 实例化是指在面向对象的编程中
  • Android中的Log输出

    安卓系统的代码量十分庞大 xff0c 无法使用Jlink之类的工具进行单步调试 xff0c 因而日志系统十分有必要 为此 xff0c 安卓开发了Log日志类用于开发者的日常调试使用 Log中配置了五种Log类 xff0c 分别表示打印五类不
  • C++中的模板类

    什么是模板类 xff1a C 43 43 发展到一定层次后 xff0c 必然有部分代码存在仅传参的数据类型不同而内容一致的情况 因此 xff0c C 43 43 为解决此类场景 xff0c 特推出模板类的使用 模板类是一种泛型技术 xff0
  • 【C/C++】指针赋初值问题

    先说结论 xff1a 指针在使用时一定要进行初始化 一 问题来源 问题提示 xff1a null pointer dereference 此问题在编译时无误 xff0c 在运行 时出的问题 xff0c 排查起来非常头疼 一开始没头绪 xff
  • 【Linux应用编程基础】ioctl函数

    一 为什么需要ioctl函数 在裸机开发中 xff0c 应用程序直接作用于寄存器 而在Linux开发中Linux驱动与Linux应用在代码层级上是分开的 xff0c 在实际开发过程中也是分两拨人开发的 xff0c Linux驱动服务于应用
  • 【半音阶口琴】基础汇总

    一 简谱初学习 增时线 xff1a 2 后面的三个杠表示前面音符的续音 减时线 xff1a 121 表示三个音符的时值都减半 附点 xff1a 1 39 2 结合性为先结合减时线 xff0c 再结合附点 xff0c 因此1表示3 4拍 四分
  • 抖音包大小优化-资源优化

    1 概述 随着业务的快速迭代 xff0c 抖音 Android 端的包大小爆发式增长 包大小直接影响到下载转化率 推广成本 运行内存和安装时间等因素 xff0c 因此对 apk 进行瘦身是一件很有必要且收益很大的事情 apk 主要由 dex
  • 【正点原子Linux C应用编程指南】学习里程碑总结

    前言 说实话 xff0c 当阅读正点原子的这篇文档时 xff0c 带着些许失望 xff0c 并不是文档写的不好 xff0c 而是质量明显不如RTOS和裸机部分的编写 xff0c 可能是没有实践过的原因 记得朱有鹏老师之前说过 xff0c 正
  • 【上位机应用开发】Python篇 A部分

    虽是嵌入式方向 xff0c 刚毕业时一直想基于C 开发一款上位机 xff0c 没争取到 xff0c 近期偶然获取到一个用python开发的宝贵机会 xff0c 记录一下 1 用Shell命令行 VS code还是集成开发环境开发的问题 xf
  • 挂载时系统提示未找到fdisk指令

    64 通俗的讲解如何在Ubuntu系统上挂在 在学习的过程中 xff0c 总结了简介的挂在 xff0c 平时一直使用的记事本记载的 xff0c 以后会慢慢记录在上面 Ubuntu14 0 04版本虚拟机挂在U盘如何操作 先让虚拟机读取到物理
  • 微信聊天记录导出

    本文将介绍如何将微信聊天记录导出为结构化数据 所需材料 一部已经root的安卓手机带GPU的Linux电脑 整体流程如下 xff1a 数据库文件提取 使用RE管理器 xff0c 在已经root的安卓手机上 xff0c 找到如下文件 xff1
  • 详解vim插件安装及配置

    前言 vim插件依赖项安装 xff1a dnf install python future dnf install python devel dnf install ncurses dnf install cmake dnf install
  • SubliemText_3配置Java的编译环境

    Sublime Text 3 添加Java环境 最近在学习Java语言 xff0c 因为写一些基础的代码练习 xff0c 而使用sublime编辑器写代码 xff0c 因为每次运行都要在命令行执行 javac 和 java 代码 xff0c

随机推荐

  • JDBC的学习(01)

    关于JDBC的学习 1 JDBC的简介 JDBC Java DataBase Connectivity 是由Sun公司为简化java程序访问数据库而制定的一套面向对象的应用程序的接口 它规定了一套访问数据库的API xff0c 该API对应
  • JDBC的学习(02)

    关于JDBC的学习 xff08 2 xff09 文章目录 关于JDBC的学习 xff08 2 xff09 Blob类型和批量操作1 Blob类型操作2 批量操作 数据库事务1 事务的概念2 事务的ACID属性3 数据库的四种隔离级别数据库的
  • 吐血整理的IDEA个人配置

    IDEA的个人配置 这两天突然发现电脑的浏览器主页被捆绑成hao123的主页了 xff0c 出于各种方法都没能解决这个问题 xff0c 一气之下 xff0c 重装了系统 xff0c 由于忘记了很多软甲的配置都放在C盘下了 xff0c 导致都
  • 两个报错:Ubuntu进入root后无法使用anaconda 和Your shell has not been properly configured to use ‘conda activate‘

    这个是由于我在root权限下没有添加anaconda的路径导致的 首先先进入普通用户 xff0c 看一下自己的anaconda的路径 echo PATH 然后再进入root sudo su 查看一下root下的路径 如果缺失进行添加 exp
  • 抖音品质建设 - iOS启动优化之原理篇

    前言 启动是 App 给用户的第一印象 xff0c 启动越慢用户流失的概率就越高 xff0c 良好的启动速度是用户体验不可缺少的一环 启动优化涉及到的知识点非常多面也很广 xff0c 一篇文章难以包含全部 xff0c 所以拆分成两部分 xf
  • c语言_多线程入门_信号量Semaphore

    也属于线程同步的一种方式 信号量 Semaphore 定义 xff1a 有时被称为信号灯 xff0c 是在多线程环境下使用的一种设施 xff0c 是可以用来保证两个或多个关键代码段不被并发调用 目的 xff1a 类似计数器 xff0c 常用
  • Ubuntu 18.04 LTS 配置VNC Server后 VNC Viewer连接灰屏

    这几天在配置实验室的服务器的时候发现了这一问题 xff0c 前前后后搞了好久 xff0c 后来我也不知道为啥就搞好了 xff0c 网上也有好多类似的解决方法 xff0c 但总感觉每个人都不一样 xff0c 这里就记录一下自己的解决方法 xf
  • debian10 更换阿里源

    阿里云镜像官网 xff1a https developer aliyun com mirror 1 先备份 span class token function cp span etc apt sources list etc apt sou
  • mysql常见问题

    1 错误 xff1a W GPG error http repo mysql com apt debian buster InRelease The following signatures couldn 39 t be verified
  • Unity实现在Android端获取Android手机的唯一ID(设备号)(亲测Android11可用)

    Unity实现在Android端获取Android手机的唯一ID xff08 设备号 xff09 亲测Android11可用 备注 测试版本Unity2020 xff0c 理论上Unity2018以上都可用 xff0c 未做测试 文章初衷
  • 远程桌面连接后闪退的解决方法

    远程桌面连接后闪退的解决方法 xff1a 1 打开注册表编辑器 xff0c 找到Memory Management文件夹 xff1b 2 新建DWORD键值 xff0c 名称为SessionlmageSize xff0c 值为0x00000
  • Java代码实现上传视频获取视频某一帧作为截图封面(二)

    上一个文章讲了Java代码实现上传视频获取视频某一帧作为截图封面的一种方法 xff0c 现在讲述第二种方法 为什么要在这里讲这种方法呢 xff1f 第一 这种方法生成的图片占用的空间更小第二 这种方法可以获取很多信息 一 根上一篇文章一样导
  • IDEA import导入的类明明存在,却飘红,你可以这样做

    今天刚刚代码自己的idea xff0c 发现有的类中出现了爆红的错误提示 明明这个类昨天下班之前测试过了 xff0c 是好用的而且爆红的类还是自己写的 xff0c 在别的类中import进去怎么会提示没有作用呢 想必你也可能会在开发中遇到这
  • mysql数据库sql优化(五)看这里之--覆盖索引

    目录 什么是覆盖索引 xff1f 举例一 举例二 覆盖索引的利弊 好处 弊端 什么是覆盖索引 xff1f 理解方式一 xff1a 索引是高效找到行的一个方法 xff0c 但是一般数据库也能使用索引找到一个列的数据 xff0c 因此它不必读取
  • 抖音品质建设 - iOS启动优化《实战篇》

    前言 启动是 App 给用户的第一印象 xff0c 启动越慢 xff0c 用户流失的概率就越高 xff0c 良好的启动速度是用户体验不可缺少的一环 启动优化涉及到的知识点非常多 xff0c 面也很广 xff0c 一篇文章难以包含全部 xff
  • 如何使用idea来设置文件模板,方便创建配置文件

    很多时候 xff0c 我们需要重复的创建模板文件 比如我们在学习Mybatis的时候 xff0c 需要创建mybatis config xml文件以及xxxmapper xml文件 很多时候这些文件的格式是类似的 xff0c 我们需要做的就
  • Mybatis学习之数据库字段与实体属性的映射

    目录 准备 问题 方式一 xff1a 给查询的字段起别名 方式二 xff1a 修改核心配置文件mybatis config xml 方式三 xff1a 通过resultMap自定义映射 准备 我们的表的字段以及表数据如下 生成的实体类的属性
  • Maven学习之使用idea开发工具创建父工程以及子工程(子模块)

    目录 概述 创建父工程 创建project 配置Maven信息 配置本次新建项目的Maven环境 配置全局的Maven环境 创建Java模块的子工程 创建Web模块的子工程 修改打包方式 概述 之前我们在将Maven的时候都是实用的手动创建
  • Java别在使用普通的照片上传了,你可以使用开源的minio实现图片的上传,方便又简单

    目录 前沿 minio介绍 使用步骤 1 下载minio文件 2 创建文件夹并上传minio文件 3 操作如下指令 编辑 4 访问 5 创建存储桶 6 设置 编辑 7 测试图片上传 8 Java程序的使用步骤 1 在pom中加入如下依赖 2
  • 微信支付的回调函数实现验签以及解密

    当我使用的微信的依赖版本大于0 4 2的时候 xff0c 就可以使用一下方法进行验签和解密 现在我是用的版本是0 4 8 lt dependency gt lt groupId gt com github wechatpay apiv3 l