当前位置: 首页 > news >正文

JAVA集成微信支付V3版JSAPI下单

一、引入微信支付SDK

<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-pay</artifactId>
</dependency>

二、支付参数封装

@Data
@ConfigurationProperties(prefix = "wx.pay")
public class WxPayProperties {/*** 微信公众号或者小程序等的appid*/private String appId;/*** 微信支付商户号*/private String mchId;/*** 微信支付商户密钥*/private String mchKey;/*** 服务商模式下的子商户公众账号ID*/private String subAppId;/*** 服务商模式下的子商户号*/private String subMchId;/*** apiclient_key.pem文件路径*/private String keyPath;/*** apiclient_cert.pem文件路径*/private String certPath;/*** 回调通知地址*/private String notifyUrl;/*** apiV3Key  */private String apiV3Key;}

三、调用微信预下单接口

1、支付业务参数封装

@Data
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class PayRequestDTO {/*** 订单号*/private String   orderNo;/*** 支付金额*/private BigDecimal  totalFee;/*** 支付描述*/private String  body;/***  微信支付使用的用户标记*/private  String  openId;}

2、设置微信支付参数

@Autowired
private   WxPayProperties  wxPayProperties;public  WxPayConfig getWxConfig() {WxPayConfig wxPayConfig = new WxPayConfig();wxPayConfig.setAppId(wxPayProperties.getAppId());wxPayConfig.setMchId(wxPayProperties.getMchId()));wxPayConfig.setMchKey(wxPayProperties.getMchKey());wxPayConfig.setSubAppId(wxPayProperties.getSubAppId();wxPayConfig.setSubMchId(wxPayProperties.getSubMchId());wxPayConfig.setKeyPath(wxPayProperties.getKeyPath());wxPayConfig.setApiV3Key(wxPayProperties.getApiV3Key());wxPayConfig.setPrivateKeyPath(wxPayProperties.getKeyPath());wxPayConfig.setPrivateCertPath(wxPayProperties.getCertPath());wxPayConfig.setNotifyUrl(WX_NOTIFY_URL);logger.info("微信支付参数wxPayConfig-----{}",wxPayConfig);return wxPayConfig;}

3、调用下单接口

	public WxPayUnifiedOrderV3Result.JsapiResult  wxAppletPay(PayRequestDTO  weChatPayRequest) throws Exception {WxPayConfig wxConfig = this.getWxConfig();WxPayServiceImpl wxPayServiceApacheHttp = new WxPayServiceImpl();wxPayServiceApacheHttp.setConfig(wxConfig);WxPayUnifiedOrderV3Request request = new WxPayUnifiedOrderV3Request();WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount();amount.setCurrency("CNY").setTotal(weChatPayRequest.getTotalFee().multiply(new BigDecimal(100)).intValue());WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();payer.setOpenid(weChatPayRequest.getOpenId());WxPayUnifiedOrderV3Request.SceneInfo sceneInfo = new WxPayUnifiedOrderV3Request.SceneInfo();sceneInfo.setPayerClientIp("127.0.0.1");request.setAmount(amount).setPayer(payer).setOutTradeNo(weChatPayRequest.getOutTradeNo()).setSceneInfo(sceneInfo).setDescription(weChatPayRequest.getBody());WxPayUnifiedOrderV3Result result = wxPayServiceApacheHttp.unifiedOrderV3(TradeTypeEnum.JSAPI, request);WxPayConfig wxConfig = this.getWxConfig();String privateKeyPath = wxConfig.getPrivateKeyPath();PrivateKey privateKey = CanteenUtils.getPrivateKey(privateKeyPath);WxPayUnifiedOrderV3Result.JsapiResult payInfo = result.getPayInfo(TradeTypeEnum.JSAPI, wxConfig.getAppId(), wxConfig.getMchId(), privateKey);return  payInfo;}

   生成RSA私钥

	public static PrivateKey getPrivateKey(String filename) throws IOException {String content = new String(Files.readAllBytes(Paths.get(filename)), StandardCharsets.UTF_8);try {String privateKey = content.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "").replaceAll("\\s+", "");KeyFactory kf = KeyFactory.getInstance("RSA");return kf.generatePrivate(new PKCS8EncodedKeySpec(Base64.getMimeDecoder().decode(privateKey)));} catch (NoSuchAlgorithmException e) {throw new RuntimeException("当前Java环境不支持RSA", e);} catch (InvalidKeySpecException e) {throw new RuntimeException("无效的密钥格式");}}

相关文章:

JAVA集成微信支付V3版JSAPI下单

一、引入微信支付SDK <dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-pay</artifactId> </dependency> 二、支付参数封装 Data ConfigurationProperties(prefix "wx.pay") public class WxP…...

opengles 背面剔除介绍(十二)

文章目录 前言一、OpenGL ES 剔除功能简介二、Opengl ES 剔除功能相关的API1.使能剔除功能2. 配置面剔除模式3. 设置剔除面的顺序4. 禁用剔除功能总结参考资料前言 本文主要介绍 opengles3.0 中的背面剔除相关知识,对于绘制3d 图形, 经常会用到它,并且它能提升渲染效率 软硬…...

【深度学习:视频注释】如何为机器学习自动执行视频注释

【深度学习&#xff1a;视频注释】如何为机器学习自动执行视频注释 #1&#xff1a;多目标跟踪 &#xff08;MOT&#xff09; 以确保帧与帧之间的连续性#2&#xff1a;使用插值来填补空白#3: 使用微模型加速人工智能辅助视频注释#4: 自动目标分割提高目标分割质量 自动视频标记通…...

网络编程、UDP、TCP

计算机网络 就是将地理位置不同的具有独立功能的多台计算及外部设备&#xff0c;通过通信线路连接起来&#xff0c;在网络操作系统、网络管理软件以及网络通信协议的管理和协调下&#xff0c;实现资源共享和信息传递的计算机系统 目的 传播交流信息、数据交换、通信 如何做…...

Maya笔记 设置工作目录

Maya会把素材场景等自动保存在工作目录里&#xff0c;我们可以自己定义工作目录 步骤1 创建workspace.mel文件 文件/设置项目 ——>选择一个文件夹&#xff0c;点击设置——>创建默认工作区 这一个后&#xff0c;可以在文件夹里看到.mel文件 步骤2 自动创建文件夹…...

MySQL:连接查询

连接查询是将两个或两个以上的表按照某个条件连接起来&#xff0c;从中选取需要的数据&#xff1b; 查询t_book表数据 查询t_bookType表数据 1、内连接查询 內连接查询是一种最常用的连接查询。内连接查询可以查询两个或者两个以上的表&#xff1b; SELECT * FROM t_book,t_bo…...

歌尔气压计SPA06-003在无人机和手表上的创新应用

随着科技的不断进步&#xff0c;各类智能设备的功能日益强大&#xff0c;其中气压计作为一种能够测量大气压力的传感器&#xff0c;已被广泛应用于多种领域。歌尔气压计以其高精度、低功耗的特点&#xff0c;在无人机和智能手表上的应用尤为突出&#xff0c;为这两个领域的产品…...

从0到1实现五子棋游戏!!

Hello&#xff0c;好久不见宝子们&#xff0c;今天来给大家更一个五子棋的程序~ 我们今天要讲的内容如下&#xff1a; 文章目录 1.五子棋游戏介绍1.1 游戏玩法介绍&#xff1a; 2.准备工作2.1 具体操作流程 3.游戏程序主函数4.初始化棋盘4.1.定义宏变量4.2 初始化棋盘 5.打印…...

二叉树(C/C++)

本篇将较为详细的介绍二叉树的相关知识&#xff0c;以及二叉树的实现。对于二叉树的相关知识&#xff0c;本篇介绍了其概念、特殊的二叉树、性质还有存储结构。 接着对于实现二叉树的每个函数都有其思路讲解&#xff0c;主要的函数分为&#xff1a;遍历&#xff1a;前中后序遍历…...

Django学习笔记-ModelForm使用(完全依赖)

1.创建模型 ,code,name,sex,entrydate 2.模型映射 python manage.py makemigrations myapp01,python manage.py migrate 3.创建模型表单,继承forms.ModelForm,Meta:元数据,models需引入,fields填写引用的模型变量 4.创建testModelForm.html,添加urls 5.views编写testmodelfo…...

动态规划之使用最小花费爬楼梯【LeetCode】

动态规划之使用最小花费爬楼梯 LCR 088. 使用最小花费爬楼梯解法1解法2 LCR 088. 使用最小花费爬楼梯 LCR 088. 使用最小花费爬楼梯 解法1 状态表示&#xff08;这是最重要的&#xff09;&#xff1a;dp[i]表示以第i级台阶为楼层顶部&#xff0c;到达第i层台阶的最低花费。 状…...

双指针---解决实际问题

...

每天一个数据分析题(一百七十八)

在大样本&#xff08;样本量为n&#xff09;下进行某一列数据&#xff08;A列&#xff09;均值的区间估计时&#xff0c;假设点估计的值计算为a&#xff0c;显著性水平为0.05&#xff0c;z0.025为给定的显著性水平下的正态分布的临界值&#xff0c;则使用EXCEL的计算方法正确的…...

Ethernet/IP转Modbus TCP网关

产品功能 1 YC-EIP-TCP工业级EtherNet/IP 网关 2 Modbus TCP 转 EtherNet/IP 3支持ModBus主从站 4 即插即用 无需编程 轻松组态 ,即实现数据交互 5导轨安装 支持提供EDS文件 6 EtherNET/IP与ModBus互转数据透明传输可接入PLC组态 支持CodeSys/支持欧姆龙PLC 支持罗克韦尔(AB) 典…...

const详解

文章目录 简介什么是const呢?const 的使用1.用来定义常量2.和指针相关的const3.函数与const4.类中使用const(重点) c中去掉const属性验证不同对象的调用const修饰类内成员 c中的const 和 c中的const 的区别c中的const为什么c中的const常量又不能通过指针修改呢 const 和 #defi…...

多方面浅谈互联网技术

目录 方向一&#xff1a;物联网技术概述 方向二&#xff1a;物联网技术的应用 方向三&#xff1a;物联网发展所需技术和创新挑战 物联网技术&#xff08;Internet of Things&#xff0c;IoT&#xff09;是一种将各种智能设备、传感器、电子产品等连接起来&#xff0c;通过互…...

Oracle EBS GL 外币折算逻辑

背景 由于公司财务在10月份期间某汇率维护错误,导致帐套折算以后并合传送至合并帐套生成合并日记帐凭证的借贷金额特别大,但是财务核对的科目余额有没有问题,始终觉得合并日记帐生成会计分发有问题,需要我们给出外币折算逻辑。 基础设置 汇率 Path: GL->设置->币种-&…...

Java面试题之mysql

Mysql 1. MySQL的索引原理是什么?什么是索引&#xff1f;以及索引的优缺点&#xff1f;2. 解释一下B树和B树的区别及各自定义?3. MyISAM索引和Innodb索引的区别&#xff1f;4. 什么是聚簇索引&#xff1f;辅助索引&#xff1f;5.非聚簇索引一定会回表查询么&#xff1f;6. 什…...

抖音直播封禁申诉话术怎么讲?抖音直播封号怎么申请解封?

一.抖音直播封禁申诉话术怎么讲? 1. 了解封禁原因&#xff1a;首先&#xff0c;您需要清楚自己为何被封禁。抖音通常会在封禁时给出原因&#xff0c;如违规内容、恶意行为等。了解原因有助于您针对性地构建申诉话术。 2. 表达诚挚歉意&#xff1a;在申诉话术中&#xff0c;首…...

使用Jenkins部署前端Vue项目和后端Java服务

Jenkins安装相关插件&#xff0c;供后续使用&#xff08;Dashboard - Manage Jenkins - Plugins&#xff09; Maven Integration plugin https://plugins.jenkins.io/maven-plugin CloudBees Docker Build and Publish pluginhttps://plugins.jenkins.io/docker-build-publish…...

Python|GIF 解析与构建(5):手搓截屏和帧率控制

目录 Python&#xff5c;GIF 解析与构建&#xff08;5&#xff09;&#xff1a;手搓截屏和帧率控制 一、引言 二、技术实现&#xff1a;手搓截屏模块 2.1 核心原理 2.2 代码解析&#xff1a;ScreenshotData类 2.2.1 截图函数&#xff1a;capture_screen 三、技术实现&…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

cf2117E

原题链接&#xff1a;https://codeforces.com/contest/2117/problem/E 题目背景&#xff1a; 给定两个数组a,b&#xff0c;可以执行多次以下操作&#xff1a;选择 i (1 < i < n - 1)&#xff0c;并设置 或&#xff0c;也可以在执行上述操作前执行一次删除任意 和 。求…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

鸿蒙HarmonyOS 5军旗小游戏实现指南

1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发&#xff0c;采用DevEco Studio实现&#xff0c;包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...