Java 微信商家打款到零钱(旧版本接口)
旧版微信支付接口要求请求时携带证书请求
构建请求参数
/*** 付款到零钱** @param withdrawalDto dto撤军* @return {@link Map }<{@link String }, {@link Object }>* @throws Exception 异常* @Author chen 2023-07-27 15:04*/private Map<String, Object> payToUser(WithdrawalDto withdrawalDto) throws Exception {log.info("发起微信提现零钱请求");Map<String, String> paramMap = new HashMap<>();// 公众账号appidparamMap.put("mch_appid", wechatConfig.getAppId());// 微信支付分配的商户号paramMap.put("mchid", wechatConfig.getMchId());// 随机字符串,不长于32位。paramMap.put("nonce_str", RandomUtil.randomString(16));// 商户订单号,需保持唯一性paramMap.put("partner_trade_no", withdrawalDto.getSerialNo());// 商户appid下,某用户的openidparamMap.put("openid", withdrawalDto.getCardNo());//校验用户姓名选项 NO_CHECK:不校验真实姓名 FORCE_CHECK:强校验真实姓名paramMap.put("check_name", "FORCE_CHECK");//收款用户姓名,如果check_name设置为FORCE_CHECK,则必填用户真实姓名paramMap.put("re_user_name", withdrawalDto.getIdCardName());// 企业付款金额,金额必须为整数 单位为分//元转分BigDecimal applyMoney = withdrawalDto.getApplyMoney();BigDecimal amount = applyMoney.multiply(BigDecimal.valueOf(100));paramMap.put("amount", String.valueOf(amount.intValue()));// 企业付款描述信息paramMap.put("desc", "钱包提现");// 根据微信签名规则,生成签名paramMap.put("sign", WechatUtils.sign(paramMap, wechatConfig.getMchApiKey()));log.info("请求参数:{}", paramMap);// 把参数转换成XML数据格式String xmlParam = XmlUtil.mapToXmlStr(paramMap, "xml");String resXml = WechatUtils.httpsSSLPost(wechatConfig.getWithdrawalHost(), wechatConfig.getMchId(), xmlParam);Map<String, Object> resultMap = XmlUtil.xmlToMap(resXml);log.info("响应报文:{}", resultMap);return resultMap;}
签名
/*** 微信支付签名sign** @param param* @param key* @return {@link String }* @Author chen 2023-07-27 14:37*/public static String sign(Map<String, String> param, String key) {try {//签名步骤一:按字典排序参数List<Object> list = new ArrayList<>(param.keySet());Object[] ary = list.toArray();Arrays.sort(ary);list = Arrays.asList(ary);StringBuilder str = new StringBuilder();for (Object o : list) {str.append(o).append("=").append(param.get(String.valueOf(o))).append("&");}//签名步骤二:加上keystr.append("key=").append(key);//步骤三:加密并大写return DigestUtil.md5Hex(str.toString(), "utf-8").toUpperCase();} catch (Exception e) {log.error("微信签名失败:{}", e.getMessage());return null;}}
http 请求工具类--携带证书请求
证书路径为相对路径(放在 resources 目录下):youPath/cert.p12
/*** https ssl post** @param url url* @param mchId* @param params 参数个数* @return {@link String }* @throws Exception 异常* @Author chen 2023-07-27 14:45*/public static String httpsSSLPost(String url, String mchId, String params) throws Exception {String text = "";// 指定读取证书格式为PKCS12KeyStore keyStore = KeyStore.getInstance(CERT_TYPE);// 读取本机存放的PKCS12证书文件try (InputStream stream = ResourceUtil.getStream(CERT_P12_PATH)) {// 指定PKCS12的密码(商户ID)keyStore.load(stream, mchId.toCharArray());}// Trust own CA and all self-signed certsSSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mchId.toCharArray()).build();// Allow TLSv1 protocol only// 指定TLS版本SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslcontext, new String[]{TLS}, null,SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);// 设置httpclient的SSLSocketFactorytry (CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build()) {HttpPost post = new HttpPost(url);StringEntity s = new StringEntity(params, "utf-8");s.setContentType(CONTENT_TYPE);post.setEntity(s);HttpResponse res = httpclient.execute(post);HttpEntity entity = res.getEntity();text = EntityUtils.toString(entity, "utf-8");}return text;}
相关文章:
Java 微信商家打款到零钱(旧版本接口)
旧版微信支付接口要求请求时携带证书请求 构建请求参数 /*** 付款到零钱** param withdrawalDto dto撤军* return {link Map }<{link String }, {link Object }>* throws Exception 异常* Author chen 2023-07-27 15:04*/private Map<String, Object> payToUser(Wi…...
Vue+Element ui Study
目录 一、VueElement ui 1、show-overflow-tooltip属性设置宽度 2、this.$refs使用方法 Error in v-on handler: “TypeError: Cannot read properties of undefined (reading ‘xxx‘)“ 一、VueElement ui 1、show-overflow-tooltip属性设置宽度 :show-overflow-toolti…...
JAVA基础-多线程入门(详解)
目录 引言 一,线程概念 二,创建线程 2.1,继承Thread类,重写run方法 2.2,实现Runnable接口,重写run方法,实现Runnable接口的实现类的实例对象作为Thread构造函 数的target 2.3,通…...
Cirno‘s Perfect Equation Class 2023牛客暑期多校训练营5 D
登录—专业IT笔试面试备考平台_牛客网 题目大意:有q次询问,每次给出三个整数k,c,n,求有多少满足条件的数对(a,b)满足kabc且c是b的倍数,且gcd(a,b)>n 1<q<100;…...
pytorch学习——如何构建一个神经网络——以手写数字识别为例
目录 一.概念介绍 1.1神经网络核心组件 1.2神经网络结构示意图 1.3使用pytorch构建神经网络的主要工具 二、实现手写数字识别 2.1环境 2.2主要步骤 2.3神经网络结构 2.4准备数据 2.4.1导入模块 2.4.2定义一些超参数 2.4.3下载数据并对数据进行预处理 2.4.4可视化数…...
PySpark 数据操作
数据输入 RDD对象 如图可见,PySpark支持多种数据的输入,在输入完成后,都会得到一个:RDD类的对象 RDD全称为:弹性分布式数据集(Resilient Distributed Datasets) PySpark针对数据的处理&…...
FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示
1.场景 基于特权A7系列开发板,采用OV5640摄像头实时采集图像数据,并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中,用到的软件版本,如下表所示,基本的硬件情况如下。该项目对应FPGA工程源码…...
亚信科技AntDB数据库专家参加向量数据库首次技术标准研讨会
2023年7月19日下午,中国通信标准化协会大数据技术标准推进委员会数据库与存储工作组(CCSA TC601 WG4)联合中国信通院数据库应用创新实验室(CAICT DBL)在线上召开《向量数据库技术要求》标准首次研讨会。本次会议由中国…...
Windows中实现右键把电子书通过邮件发到kindle
不使用第三方软件,通过Windows自带的函数,可以实现右键将电子书通过电子邮件发送到kindle邮箱,从而实现kindle电子书传送功能。实现过程如下: 1. 使用bat添加右键功能 打开资源管理器,在地址中输入%APPDATA%\Microso…...
Three.js之创建3D场景
参考资料 【G】Three.js官方文档:https://threejs.org/docs/ Three.js是一个流行的WebGL库,官方文档提供了详细的API参考和示例,适合学习和参考。【G】Three.js GitHub链接:https://github.com/mrdoob/three.js 这是一个流行的基…...
一个3年Android的找工作记录
作者:Petterp 这是我最近 1个月 的找工作记录,希望这些经历对你会有所帮助。 有时机会就像一阵风,如果没有握住,那下一阵风什么时候吹来,往往是个运气问题。 写在开始 先说背景: 自考本,3年经验࿰…...
CAS原理解析
CAS是一种乐观锁机制,一种比较并交换的过程和理念,用来解决线程安全问题,具体来讲就是对共享变量值的安全更新机制。能够保证原子、可见、一致性。这种交换过程是在Unsafe类中实现。 从一段简单的代码开始来对源码做分析 public static void…...
SQL项目实战:银行客户分析
大家好,本文将与大家分享一个SQL项目,即根据从数据集收集到的信息分析银行客户流失的可能性。这些洞察来自个人信息,如年龄、性别、收入和人口统计信息、银行卡类型、产品、客户信用评分以及客户在银行的服务时间长短等。对于银行而言&#x…...
【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群指令分析—实战篇)
探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群指令分析—下篇) Cluster XX的集群指令(扩展)写入记录主节点和备节点切换-CLUSTER FAILOVER新加入master节点新加入slave节点为slave节点重新分配master分配哈希槽删除…...
ubuntu
安装 sudo apt-get update sudo apt-get install mysql-server mysql-client 设置root密码 cat /etc/mysql/debian.cnf 查看默认密码 mysql -u debian-sys-maint -p 连接输入密码 use mysql; select user,plugin from user; update user set pluginmysql_native_passwor…...
【芯片设计- RTL 数字逻辑设计入门 3- Verdi 常用使用命令】
文章目录 Verdi 全局显示Verdi 前导 0 的显示Verdi 数据笔数统计Verdi 波形数据dump Verdi 全局显示 bsubi -n 16 -J sam visualizer -tracedir ./veloce.wave/debug_waveform.stw 打开波形后,如果想要看到所有信号的数据,可以点击下图中红框中的按钮&a…...
python-pytorch基础之cifar10数据集使用图片分类
这里写目录标题 总体思路获取数据集下载cifar10数据解压包文件介绍加载图片数字化信息查看数据信息数据读取自定义dataset使用loader加载建模训练测试建测试数据的loader测试准确性测试一张图片读取一张图片加载模型预测图片类型创建一个预测函数随便来张马的图片结果其他打开一…...
华纳云:linux下磁盘管理与挂载硬盘方法是什么
在Linux下进行磁盘管理和挂载硬盘的方法如下: 磁盘管理: a. 查看已连接的磁盘:可以使用命令 fdisk -l 或 lsblk 查看系统中已连接的磁盘信息,包括硬盘和分区。 b. 创建分区:如果磁盘是全新的,需要使用 f…...
ChatGPT + Stable Diffusion + 百度AI + MoviePy 实现文字生成视频,小说转视频,自媒体神器!(一)
ChatGPT Stable Diffusion 百度AI MoviePy 实现文字生成视频,小说转视频,自媒体神器!(一) 前言 最近大模型频出,但是对于我们普通人来说,如何使用这些AI工具来辅助我们的工作呢,或者参与进入我们的生活…...
linux strcpy/strncpy/sprintf内存溢出问题
本文主要介绍strcpy/strncpy/sprintf都是不安全的,可能存在内存溢出的问题。下来进行实例分析。 strcpy代码: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h>void test_func(char *str) {b…...
实战指南:在Cortex-A53/A57平台上配置与调试AMBA AXI/ACE总线
Cortex-A53/A57平台AMBA总线实战:从寄存器配置到性能调优 1. AMBA总线架构与Cortex-A系列核心的深度适配 在嵌入式系统开发领域,AMBA总线作为ARM处理器生态的核心互联架构,其性能表现直接决定了SoC整体效能。Cortex-A53/A57作为经典的big.LIT…...
5分钟搞定专业网络拓扑图:easy-topo终极使用指南
5分钟搞定专业网络拓扑图:easy-topo终极使用指南 【免费下载链接】easy-topo vuesvgelement-ui 快捷画出网络拓扑图 项目地址: https://gitcode.com/gh_mirrors/ea/easy-topo 还在为绘制复杂的网络架构图而头疼吗?网络拓扑图是网络工程师、系统管…...
OpenAI 模型攻克离散几何 80 年难题:Erdős 单位距离猜想被 AI 证明
OpenAI 模型攻克离散几何 80 年难题:Erdős 单位距离猜想被 AI 证明 一场改写数学史的AI突破 2026年5月20日,OpenAI 宣布其内部通用推理模型成功证明了一个困扰数学界近80年的开放问题——Erdős 单位距离问题(Unit Distance Problem&#…...
从‘Hello World’到工业通信:我的第一个C++ ADS客户端连接倍福PLC踩坑实录
从零搭建C ADS客户端:一位工程师的倍福PLC连接实战手记 第一次在Visual Studio里看到那个红色的编译错误时,我盯着屏幕足足愣了五分钟。"LNK2019: 无法解析的外部符号 __imp_AdsPortOpen",这行冰冷的报错彻底击碎了我以为照着官方…...
3分钟学会:如何用Chrome扩展一键保存完整网页内容
3分钟学会:如何用Chrome扩展一键保存完整网页内容 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-chrome-extension…...
ESP32-C3 I²S实战:手把手教你驱动ES8311音频编解码器实现回声消除
ESP32-C3与ES8311音频系统实战:从硬件连接到回声消除算法优化 在智能语音交互设备、会议系统和便携式录音设备中,音频处理能力已成为核心需求。ESP32-C3作为一款高性价比的Wi-Fi/BLE双模芯片,其内置的IS接口为音频应用提供了专业级数字音频传…...
大模型上下文窗口管理技巧:突破长度限制的艺术
大模型上下文窗口管理技巧:突破长度限制的艺术 前言 大模型的上下文窗口(Context Window)是指模型能够处理的最大输入长度。目前主流模型的上下文窗口从 4K 到 128K 不等,GPT-4 Turbo 甚至达到了 128K tokens。然而,随…...
[qemu+kvm]: smmu stage 2 建立流程
1. qemu倡导 gpa和hpa映射关系在vm建立时不确定,在运行时触发缺页异常后建立映射关系(lazy binding)。 2. smmu stage 2要求 gpa和hpa的映射关系在vm建立时确定,若在运行时触发缺页,会导致dma失败(pcie ats…...
深入Linux内存管理:从虚拟内存到OOM Killer的完整解析
1. 从物理到虚拟:内存管理的演进与核心挑战干了这么多年系统开发和性能调优,内存问题始终是那个最让人头疼,但又不得不面对的“老朋友”。无论是半夜被报警叫醒处理线上服务的OOM(Out of Memory)崩溃,还是为…...
别再死记硬背了!用这5个HBase Shell实战场景,轻松搞定日常数据操作
HBase Shell实战手册:5个真实场景解锁高效数据操作 在数据爆炸式增长的时代,HBase作为分布式NoSQL数据库的佼佼者,凭借其高吞吐、低延迟的特性,成为处理海量结构化数据的首选方案。然而,许多开发者虽然掌握了基础命令&…...
