微信支付v3——批量转账到零钱(提现)

news/2025/2/12 22:47:22/

微信支付v3——批量转账到零钱(提现)

进入正题之前先吐槽一下微信官方文档吧!一开始在官网上下载了微信支付版本V3的Demo,下载下来基本上难以投入使用,要学会使用的话,就要去看源码,看文档,稍微错过一点就会有一大堆的坑等着你跳,相比之下,阿里的文档就简单易懂,而且官方的文档下载下来之后,稍微改下参数就可以run!!

正文:

批量转账到零钱(服务商)的接入示例:
(微信文档地址:开发文档-微信支付批量转账到零钱)
微信支付V3版本,微信SDK,内部封装了部分方法(微信支付API v3的Apache HttpClient扩展,实现了请求签名的生成和应答签名的验证。)
第一步:在项目中引入Maven

<dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.4.8</version>
</dependency>

第二步:构造微信接口通讯Client,构造隐私数据加密公钥,每次调用微信V3的接口都需要用Client来发起,敏感数据需通过平台公钥加密。

package cn.schoolgroup.config.until;import com.wechat.pay.contrib.apache.httpclient.WechatPayHttpClientBuilder;
import com.wechat.pay.contrib.apache.httpclient.util.PemUtil;
import org.apache.http.impl.client.CloseableHttpClient;
import org.springframework.core.io.ClassPathResource;import java.io.IOException;
import java.io.InputStream;
import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.Arrays;/*** @Author lulu* @Date 2022/09/07*/
public class WeChatClient {/*** 微信通讯client* @return CloseableHttpClient * 作者的文件都放在resour文件下的*/public static CloseableHttpClient getClient() throws IOException {/**商户私钥文件*/ClassPathResource classPathResource = new ClassPathResource("/cert/apiclient_key.pem");InputStream mchPrivateKeyInputStream = classPathResource.getInputStream();/**微信平台公钥文件*/ClassPathResource classPathResource1 = new ClassPathResource("/cert/wechatpay_64124ADAF002CDEEBA0A58215D8572D270F2A854.pem");InputStream platformKeyInputStream = classPathResource1.getInputStream();PrivateKey mchPrivateKey = PemUtil.loadPrivateKey(mchPrivateKeyInputStream);WechatPayHttpClientBuilder builder = WechatPayHttpClientBuilder.create().withMerchant("自己的商户号", "自己的商户证书序列号", mchPrivateKey).withWechatPay(Arrays.asList(PemUtil.loadCertificate(platformKeyInputStream)));CloseableHttpClient httpClient = builder.build();return httpClient;}}

第三步:调起商家转账API

需要在《转账到用户零钱》产品的开发设置中,添加安全ip,接口才能访问

/*** 发起商家转账API** @Author lulu* @Date 2022/07/09*/public static void merchantTransfers() throws IllegalBlockSizeException, IOException {CloseableHttpClient httpClient = WeChatClient.getClient();Map<String, Object> map = new HashMap<>();map.put("appid", "小程序appid");map.put("out_batch_no", "zcx04");map.put("batch_name", "1元");map.put("batch_remark", "1元");map.put("total_amount", 100);map.put("total_num", 1);List<Map> list = new ArrayList<>();Map<String, Object> subMap = new HashMap<>(4);subMap.put("out_detail_no", "detail1");subMap.put("transfer_amount", 100);subMap.put("transfer_remark", "1元");subMap.put("openid", "用户openid");//明细转账金额 >= 2000,收款用户姓名必填//subMap.put("user_name", RsaCryptoUtil.encryptOAEP("收款用户姓名", zcx));list.add(subMap);map.put("transfer_detail_list", list);String body = JSONUtil.toJsonStr(map);System.out.println("请求参数:" + body);HttpPost httpPost = new HttpPost("https://api.mch.weixin.qq.com/v3/transfer/batches");httpPost.addHeader(ACCEPT, APPLICATION_JSON.toString());httpPost.addHeader(CONTENT_TYPE, APPLICATION_JSON.toString());httpPost.addHeader("Wechatpay-Serial", "自己的平台证书序列号");httpPost.setEntity(new StringEntity(body, "UTF-8"));CloseableHttpResponse response = httpClient.execute(httpPost);try {String result= EntityUtils.toString(response.getEntity());System.out.println("返回参数:" + result);//业务逻辑自己处理} finally {response.close();}}

第四步:商家批次单号查询批次单API

/*** 商家批次单号查询批次单API* @throws URISyntaxException* @throws IOException*/public static void queryBatch() throws URISyntaxException, IOException {CloseableHttpClient httpClient = WeChatClient.getClient();//批次号String batchCode = "zcx03";StringBuilder url = new StringBuilder("https://api.mch.weixin.qq.com/v3/transfer/batches/out-batch-no/");url.append(batchCode).append("?need_query_detail=true").append("&detail_status=ALL");URIBuilder uriBuilder = new URIBuilder(url.toString());HttpGet httpGet = new HttpGet(uriBuilder.build());httpGet.addHeader(ACCEPT, APPLICATION_JSON.toString());CloseableHttpResponse response = httpClient.execute(httpGet);try {String bodyAsString = EntityUtils.toString(response.getEntity());System.out.println("微信支付查询返回:" + bodyAsString);JSONObject jsonObject = JSONUtil.parseObj(bodyAsString);if (AjaxResult.me().getCode().equals(response.getStatusLine().getStatusCode())) {//转账批次单基本信息JSONObject transferBatch = jsonObject.getJSONObject("transfer_batch");//批次状态String batchStatus = transferBatch.getStr("batch_status");System.out.println("交易状态:" + batchStatus);//已完成if ("FINISHED".equals(batchStatus)){JSONArray transferDetailList = jsonObject.getJSONArray("transfer_detail_list");for (int i = 0; i < transferDetailList.size(); i++){JSONObject detail = (JSONObject) transferDetailList.get(i);//明细单号String outDetailNo = detail.getStr("out_detail_no");//明细状态String detailStatus = detail.getStr("detail_status");System.out.println("交易明细单号:"+ outDetailNo +",明细状态:" + detailStatus);}}else if ("CLOSED".equals(batchStatus)){//批次关闭原因String closeReason = transferBatch.getStr("close_reason");System.out.println("交易关闭原因:" + closeReason);}} else {//失败自己处理}} finally {response.close();}}

获取平台证书的方法


http://www.ppmy.cn/news/654983.html

相关文章

微信支付 发起商家转账API 2022年v3 transfer batches

1 概述 微信转账新接口 发起商家转账API 微信开发文档 接口说明 适用对象&#xff1a;直连商户 请求URL&#xff1a;https://api.mch.weixin.qq.com/v3/transfer/batches 请求方式&#xff1a;POST 接口限频&#xff1a; 单个商户 50QPS&#xff0c;如果超过频率限制&#xff…

微信“商家转账到零钱“功能接入以及如何获得转账结果?

先说答案:无法即时获得转账结果 首先按照商家转账到零钱文档接入,发现响应结果中没有转账成功或者失败的结果 使用通过微信批次单号查询批次单和通过微信明细单号查询明细单接口进行转账结果查询,发现无法即时获得结果 查询相关资料【商家转账到零钱】常见问题 很明确的告知…

解说--1--微信商户转账给个人银行卡或微信零钱功能

一、功能现状 目前该功能属于灰度期。 二、申请条件 1、商户号&#xff08;或同主体其他商户号&#xff09;已入驻90日 2、商户号&#xff08;或同主体其他商户号&#xff09;有近30天连续正常交易 3、 登录微信支付商户平台-产品中心&#xff0c;开通企业付款。 如果当前结算…

服务器上的微信转账记录能删除吗,微信如何彻底删除转账记录?微信删除转账记录方法...

原标题&#xff1a;微信如何彻底删除转账记录&#xff1f;微信删除转账记录方法 微信在我们的生活和工作中扮演者各种各样的角色&#xff0c;帮我们发送文件、言语表达、收支款项等等。其中最为重要的还是收支款项这一功能。当我们更换微信号、或者想藏点私房钱&#xff0c;都需…

java微信支付v3系列——9.微信支付之商家转账API

目录 java微信支付v3系列——1.微信支付准备工作 java微信支付v3系列——2.微信支付基本配置 java微信支付v3系列——3.订单创建准备操作 java微信支付v3系列——4.创建订单的封装及使用 java微信支付v3系列——5.微信支付成功回调 java微信支付v3系列——6.微信支付查询订单A…

微信转账api(企业付款)

企业付款介绍 提供企业向用户付款的功能&#xff0c;支持企业通过API接口付款&#xff0c;或通过微信支付商户平台网页功能操作付款。 1. 充值 登录微信支付商户平台&#xff0c;通过网页充值功能充值&#xff08;商户平台-资金管理-现金管理-充值&#xff09;。 温馨提示&a…

微信支付商家转账到零钱功能使用教程

之前的 “企业付款到零钱” 功能&#xff0c;微信支付已下架&#xff0c;以后用 “商家转账到零钱” 功能取代。 下面介绍如何开通并使用该功能 从运营账户支出 首先需要先去了解一下微信支付的这3个账户的关系&#xff0c;“商家转账到零钱”功能&#xff0c;是从运营账户转账…

企业微信可以直接转账吗?

用户使用企业微信移动办公&#xff0c;但是有时候也会用于非工作时间的沟通&#xff0c;如果同事帮忙代买东西&#xff0c;企业微信可以直接转账吗&#xff1f; 前言 企业微信作为一款移动办公软件&#xff0c;虽然大多数用户用它办公&#xff0c;但是有时候也会用于非工作时间…