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

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基础-多线程入门(详解)

目录 引言 一&#xff0c;线程概念 二&#xff0c;创建线程 2.1&#xff0c;继承Thread类&#xff0c;重写run方法 2.2&#xff0c;实现Runnable接口&#xff0c;重写run方法&#xff0c;实现Runnable接口的实现类的实例对象作为Thread构造函 数的target 2.3&#xff0c;通…...

Cirno‘s Perfect Equation Class 2023牛客暑期多校训练营5 D

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;有q次询问&#xff0c;每次给出三个整数k&#xff0c;c&#xff0c;n&#xff0c;求有多少满足条件的数对&#xff08;a&#xff0c;b&#xff09;满足kabc且c是b的倍数&#xff0c;且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对象 如图可见&#xff0c;PySpark支持多种数据的输入&#xff0c;在输入完成后&#xff0c;都会得到一个&#xff1a;RDD类的对象 RDD全称为&#xff1a;弹性分布式数据集&#xff08;Resilient Distributed Datasets&#xff09; PySpark针对数据的处理&…...

FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示

1.场景 基于特权A7系列开发板&#xff0c;采用OV5640摄像头实时采集图像数据&#xff0c;并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中&#xff0c;用到的软件版本&#xff0c;如下表所示&#xff0c;基本的硬件情况如下。该项目对应FPGA工程源码…...

亚信科技AntDB数据库专家参加向量数据库首次技术标准研讨会

2023年7月19日下午&#xff0c;中国通信标准化协会大数据技术标准推进委员会数据库与存储工作组&#xff08;CCSA TC601 WG4&#xff09;联合中国信通院数据库应用创新实验室&#xff08;CAICT DBL&#xff09;在线上召开《向量数据库技术要求》标准首次研讨会。本次会议由中国…...

Windows中实现右键把电子书通过邮件发到kindle

不使用第三方软件&#xff0c;通过Windows自带的函数&#xff0c;可以实现右键将电子书通过电子邮件发送到kindle邮箱&#xff0c;从而实现kindle电子书传送功能。实现过程如下&#xff1a; 1. 使用bat添加右键功能 打开资源管理器&#xff0c;在地址中输入%APPDATA%\Microso…...

Three.js之创建3D场景

参考资料 【G】Three.js官方文档&#xff1a;https://threejs.org/docs/ Three.js是一个流行的WebGL库&#xff0c;官方文档提供了详细的API参考和示例&#xff0c;适合学习和参考。【G】Three.js GitHub链接&#xff1a;https://github.com/mrdoob/three.js 这是一个流行的基…...

一个3年Android的找工作记录

作者&#xff1a;Petterp 这是我最近 1个月 的找工作记录&#xff0c;希望这些经历对你会有所帮助。 有时机会就像一阵风&#xff0c;如果没有握住&#xff0c;那下一阵风什么时候吹来&#xff0c;往往是个运气问题。 写在开始 先说背景: 自考本&#xff0c;3年经验&#xff0…...

CAS原理解析

CAS是一种乐观锁机制&#xff0c;一种比较并交换的过程和理念&#xff0c;用来解决线程安全问题&#xff0c;具体来讲就是对共享变量值的安全更新机制。能够保证原子、可见、一致性。这种交换过程是在Unsafe类中实现。 从一段简单的代码开始来对源码做分析 public static void…...

SQL项目实战:银行客户分析

大家好&#xff0c;本文将与大家分享一个SQL项目&#xff0c;即根据从数据集收集到的信息分析银行客户流失的可能性。这些洞察来自个人信息&#xff0c;如年龄、性别、收入和人口统计信息、银行卡类型、产品、客户信用评分以及客户在银行的服务时间长短等。对于银行而言&#x…...

【Redis深度专题】「核心技术提升」探究Redis服务启动的过程机制的技术原理和流程分析的指南(集群指令分析—实战篇)

探究Redis服务启动的过程机制的技术原理和流程分析的指南&#xff08;集群指令分析—下篇&#xff09; Cluster XX的集群指令&#xff08;扩展&#xff09;写入记录主节点和备节点切换-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 打开波形后&#xff0c;如果想要看到所有信号的数据&#xff0c;可以点击下图中红框中的按钮&a…...

python-pytorch基础之cifar10数据集使用图片分类

这里写目录标题 总体思路获取数据集下载cifar10数据解压包文件介绍加载图片数字化信息查看数据信息数据读取自定义dataset使用loader加载建模训练测试建测试数据的loader测试准确性测试一张图片读取一张图片加载模型预测图片类型创建一个预测函数随便来张马的图片结果其他打开一…...

华纳云:linux下磁盘管理与挂载硬盘方法是什么

在Linux下进行磁盘管理和挂载硬盘的方法如下&#xff1a; 磁盘管理&#xff1a; a. 查看已连接的磁盘&#xff1a;可以使用命令 fdisk -l 或 lsblk 查看系统中已连接的磁盘信息&#xff0c;包括硬盘和分区。 b. 创建分区&#xff1a;如果磁盘是全新的&#xff0c;需要使用 f…...

ChatGPT + Stable Diffusion + 百度AI + MoviePy 实现文字生成视频,小说转视频,自媒体神器!(一)

ChatGPT Stable Diffusion 百度AI MoviePy 实现文字生成视频&#xff0c;小说转视频&#xff0c;自媒体神器&#xff01;(一) 前言 最近大模型频出&#xff0c;但是对于我们普通人来说&#xff0c;如何使用这些AI工具来辅助我们的工作呢&#xff0c;或者参与进入我们的生活…...

linux strcpy/strncpy/sprintf内存溢出问题

本文主要介绍strcpy/strncpy/sprintf都是不安全的&#xff0c;可能存在内存溢出的问题。下来进行实例分析。 strcpy代码&#xff1a; #include <stdio.h> #include <string.h> #include <stdlib.h> #include <stdbool.h>void test_func(char *str) {b…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

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

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

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级

在互联网的快速发展中&#xff0c;高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司&#xff0c;近期做出了一个重大技术决策&#xff1a;弃用长期使用的 Nginx&#xff0c;转而采用其内部开发…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...