微信native-v3版支付对接流程及demo
1.将p12证书转为pem证书,得到商户私钥
openssl pkcs12 -in apiclient_cert.p12 -out apiclient_cert.pem -nodes
密码是:商户id
2.将获取到的apiclient_cert.pem证书,复制出这一块内容,其他的不要

3.下载这个工具包
https://github.com/wechatpay-apiv3/CertificateDownloader

4.在test包中运行

生成证书

5.引入腾讯的sdk
https://github.com/wechatpay-apiv3/wechatpay-apache-httpclient
<dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.2.2</version></dependency>

6.测试示例
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.util.EntityUtils;import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.List;public class test {public static void main(String[] args) throws Exception {String apiV3key = "SYKJ20234545weasdq";// 商户号String mchId = "150923821451";// 商户证书序列号String mchSerialNo = "79D9A85662A93453457720657B19";// 商户私钥String mchPrivateKeyFilePath = "D:\\可删除\\apiclient_cert.pem";// 微信支付平台证书String wechatpayCertificateFilePath = "E:\\allrun2\\微信支付证书工具\\wechatpay_38023669B5DBFED58B2B16B3D38CA15DB983E002.pem";//下载成功后保存证书的路径String outputFilePath = "E:\\allrun2\\微信支付证书工具";//native统一下单String nativePay = "https://api.mch.weixin.qq.com/v3/pay/transactions/native";WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create().withMerchant(mchId, mchSerialNo, PemUtil.loadPrivateKey(new FileInputStream(mchPrivateKeyFilePath)));if (wechatpayCertificateFilePath == null) {//不做验签builder.withValidator(response -> true);} else {List<X509Certificate> certs = new ArrayList<>();certs.add(PemUtil.loadCertificate(new FileInputStream(wechatpayCertificateFilePath)));builder.withWechatpay(certs);}/*HttpGet httpGet = new HttpGet(CertDownloadPath);httpGet.addHeader("Accept", "application/json");try (CloseableHttpClient client = builder.build()) {CloseableHttpResponse response = client.execute(httpGet);int statusCode = response.getStatusLine().getStatusCode();String body = EntityUtils.toString(response.getEntity());if (statusCode == 200) {System.out.println("body:" + body);} else {System.out.println("download failed,resp code=" + statusCode + ",body=" + body);throw new IOException("request failed");}}*/HttpPost httpPost = new HttpPost(nativePay);httpPost.addHeader("Accept", "application/json");httpPost.addHeader("Content-type","application/json; charset=utf-8");ObjectMapper objectMapper = new ObjectMapper();ByteArrayOutputStream bos = new ByteArrayOutputStream();ObjectNode rootNode = objectMapper.createObjectNode();rootNode.put("mchid",mchId).put("appid", "wxf3152dbae1f27a61").put("description", "Ima5677公仔").put("notify_url", "http://2j9c780335.zicp.vip/siyu-cloud-pay-biz/pms/wechatPay/callback").put("out_trade_no", "515414244");rootNode.putObject("amount").put("total", 1);objectMapper.writeValue(bos, rootNode);httpPost.setEntity(new StringEntity(bos.toString("UTF-8")));try (CloseableHttpClient httpClient = builder.build()) {CloseableHttpResponse response = httpClient.execute(httpPost);String bodyAsString = EntityUtils.toString(response.getEntity());System.out.println(bodyAsString);}}
}相关文章:
微信native-v3版支付对接流程及demo
1.将p12证书转为pem证书,得到商户私钥 openssl pkcs12 -in apiclient_cert.p12 -out apiclient_cert.pem -nodes 密码是:商户id 2.将获取到的apiclient_cert.pem证书,复制出这一块内容,其他的不要 3.下载这个工具包 https://gi…...
租用服务器后需要注意什么
租用服务器后需要注意什么 1、从IDC服务商中接收到服务器时,需要对服务器的各项性能进行测试确认,并做好记录以便对服务器的性能做到心中有数。 2、在服务器租用交接时,要了解服务器的安全设置情况,对服务器安全技术方面不了解的…...
【公众号开发】图像文字识别 · 模板消息推送 · 素材管理 · 带参数二维码的生成与事件的处理
【公众号开发】(4) 文章目录 【公众号开发】(4)1. 图像文字识别功能1.1 百度AI图像文字识别接口申请1.2 查看文档学习如何调用百度AI1.3 程序开发1.3.1 导入依赖:1.3.2 公众号发来post请求格式1.3.3 对image类型的消息…...
Linux---(三)基本指令大全
前提引入:历史上先出现的键盘还是鼠标? 答案:键盘 ✨所以刚开始的时候绝对没有图形化界面,因此操作系统刚开始兴起的时候绝对没有图形化界面,因为当时没有鼠标。 ✨因为没有图形化界面,只有键盘,…...
基于selenium的pyse自动化测试框架
介绍: pyse基于selenium(webdriver)进行了简单的二次封装,比selenium所提供的方法操作更简洁。 特点: 默认使用CSS定位,同时支持多种定位方法(id\name\class\link_text\xpath\css)…...
【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心
微服务(5) 文章目录 微服务(5)1. 认识和安装Nacos2. 服务注册到nacos和拉取服务1)引入依赖2)配置nacos地址3)重启 3. 服务分级存储模型3.1 给user-service配置集群3.2 同集群优先的负载均衡 4. …...
华为手机安卓扫描安装包apk在哪
1、在文件管理器里找,有的安装包没有搜索到2、在应用市场-我的-安装包管理,它会扫描整个手机,推荐...
IDEA 新版本设置菜单展开
使用了新版本的IDEA 新UI后,常用的file,view,菜单看不见了,不太适应,找了一下,有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上,应用保存就可以了...
Leetcode 350:两个数组的交集II
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 示例 1…...
【数据结构】队列的实现与优化指南
一、前言 队列是一种重要的数据结构,它按照“先入先出”(FIFO)的原则管理数据。本文将介绍队列的概念、应用场景,以及如何使用数组实现普通队列和环形队列。 二、内容 2.1 概述 (1)什么是队列࿱…...
视频太大怎么压缩变小?三分钟学会视频压缩
随着科技的不断发展,视频已经成为了我们日常生活中不可或缺的一部分,然而,大尺寸的视频文件常常会给我们带来诸多困扰,例如发送不便、存储空间不足等等,那么,如何将这些过大的视频文件压缩变小呢࿱…...
Rust 泛型
泛型 Generics泛型详解 使用泛型参数,有一个先决条件,必需在使用前对其进行声明: fn largest<T>(list: &[T]) -> T {该泛型函数的作用是从列表中找出最大的值,其中列表中的元素类型为 T。首先 largest<T> 对…...
STM32+2.9inch微雪墨水屏(电子纸)实现显示
本篇文章从硬件原理以及嵌入式编程等角度完整的介绍了墨水屏驱动过程,本例涉及的墨水屏为2.9inch e-Paper V2,它采用的是“微胶囊电泳显示”技术进行图像显示,其基本原理是悬浮在液体中的带电纳米粒子受到电场作用而产生迁移,从而改变显示屏各…...
Hadoop3教程(二十九):(生产调优篇)集群扩容及缩容(白名单与黑名单)
文章目录 (150)添加白名单(151)服役新服务器(152)服务器间数据均衡(153)黑名单退役服务器参考文献 这一章还算是比较重要的。 (150)添加白名单 白名单&#…...
NET7下用WebSocket做简易聊天室
NET7下用WebSocket做简易聊天室 步骤: 建立NET7的MVC视图模型控制器项目创建websocket之间通信的JSON字符串对应的实体类一个房间用同一个Websocketwebsocket集合类,N个房间创建websocket中间件代码Program.cs中的核心代码,使用Websocket聊…...
详解API基础知识
目录 什么是API: API 的设计原则包括: API 的开发流程包括以下几个步骤: API 的使用场景包括: API 的优势包括: 然而,API 也存在一些挑战和问题,例如: 什么是API: API(应用程…...
b树和b+树
二叉树和平衡二叉树 二叉树,每个节点支持两个分支的树结构,相比于单向链表,多了一个分支。 二叉查找树,在二叉树的基础上增加了一个规则,左子树的所有节点的值都小于它的根 节点,右子树的所有子节点都大于它…...
Linux 下 Java 安装字体方法
因上线访问图字体乱码了,因为在windows下设置的微软雅黑,linux默认是没有的,所以需要给jdk安装一个微软雅黑字体。按照步骤来,so easy! 1)首先找到windows下面的字体,不用去其他地方下了&#…...
敏捷开发的实施要素和实现敏捷的实际改进
敏捷开发的实施要素如下: 个体和交互:胜过过程和工具。可以工作的软件:胜过面面俱到的文档。客户合作:胜过合同谈判。响应变化:胜过遵循计划。 敏捷开发过程是一个增量的、迭代的过程,责任人、开发人…...
学会使用Pandas进行数据清洗
大家好,如果你对数据科学感兴趣,那么数据清洗可能对你来说是一个熟悉的术语,本文将向你介绍使用Pandas进行数据清洗的过程。我们的数据通常来自多个资源,而且并不干净,它可能包含缺失值、重复值、错误或不需要的格式等…...
在PyCharm的Django工程中修改初始页
1、原始的初始页2、setting.py中添加应用在quiz_site的setting.py 进行应用到的设置(对应的是一个根目录下的文件夹)3、Quiz_site\urls.py中的设置4、修改quiz/urls.py修改后的内容如下:5、views.py的设置如图:6、建立主页在quiz目…...
工业级3D打印机季度出货回暖,入门级市场再创新高
当行业讨论从“技术突破”逐渐转向“规模落地”,全球3D打印市场正在经历一轮更深层次的结构调整。从TCT Asia 2026现场的热度变化,到厂商战略重心的转移,可以明显感受到:增长的引擎正在重塑,市场逻辑也在悄然变化。而C…...
2026 最强本地 AI 神器!OpenClaw 一键部署教程
🚀 前言 2026 年开源圈爆火的「数字员工」OpenClaw(昵称小龙虾),GitHub 星标狂揽 28 万 ,凭「本地运行 零代码操作 自动干活」的核心优势圈粉无数!很多人误以为它是普通聊天 AI,实则是能真正…...
你以为你在选Hermes还是OpenClaw,其实你在选择自己的工作命运
昨晚快十一点,我在北京的一个前同事给我发来信息。 他说,兄弟,看你最近发 AI 的东西,方便不?聊一会。 我回,方便。 一方面,是因为确实好久没联系了。另一方面,也是因为以前大家一…...
如何增加RAC节点_addnode.sh脚本执行与实例扩展全流程
addnode.sh执行失败主因是网络与权限未对齐:需验证SSH免密、/etc/hosts双向解析、GI用户一致性;CRS启动失败多因OCR/Voting磁盘权限或路径问题;实例未注册需手动srvctl add/start;连接ORA-12514系监听缺静态注册。addnode.sh 执行…...
从导航软件到推荐系统:闵可夫斯基距离(Minkowski Distance)中的参数p,到底该怎么选?
从导航软件到推荐系统:闵可夫斯基距离中的参数p选择实战指南 想象一下,当你使用导航软件规划路线时,系统会提供多种路径选择——有时是蜿蜒曲折的小路,有时是笔直的高速公路。这背后隐藏着一个数学秘密:不同的路径计算…...
手把手教你用Verilog实现跨时钟域DMUX(附可复用的同步单元代码)
手把手教你用Verilog实现跨时钟域DMUX(附可复用的同步单元代码) 在芯片前端设计和FPGA开发中,跨时钟域处理是每个工程师必须掌握的硬核技能。想象一下,当你精心设计的模块因为时钟域不同步而出现数据丢失或亚稳态问题时࿰…...
单智能体 vs 多智能体:架构选型指南,90% 的效率提升不等于 17 倍的错误放大!
本文深入探讨了单智能体和多智能体架构的优劣,指出正确的架构选择应基于任务结构而非技术野心。单智能体适合紧密耦合工作,而多智能体在可并行化任务中效率高,但错误放大风险大。行业领导者 Anthropic、OpenAI 等建议从单智能体开始ÿ…...
5步深度解析:ComfyUI-SUPIR图像超分辨率实战指南
5步深度解析:ComfyUI-SUPIR图像超分辨率实战指南 【免费下载链接】ComfyUI-SUPIR SUPIR upscaling wrapper for ComfyUI 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-SUPIR ComfyUI-SUPIR是ComfyUI生态中一款基于扩散模型的专业级图像超分辨率插件…...
别只装Qt!在Deepin 20.6上配置Qt 6.3.1时,这3个环境(Android/WebAssembly/输入法)的坑你得提前知道
Deepin 20.6上Qt 6.3.1环境配置避坑指南:Android/WebAssembly/输入法全攻略 在Deepin 20.6上配置Qt 6.3.1开发环境时,很多开发者会遇到一些"隐藏"的依赖问题。这些问题往往在Qt主程序安装完成后才会暴露,导致反复折腾和浪费时间。本…...
