提交 ed40ef49 编写于 作者: J Javen205

新增微信支付商家转账到零钱示例

上级 396da1bf
......@@ -26,11 +26,14 @@ import com.ijpay.wxpay.enums.v3.ComplaintsApiEnum;
import com.ijpay.wxpay.enums.v3.OtherApiEnum;
import com.ijpay.wxpay.enums.v3.PayGiftActivityApiEnum;
import com.ijpay.wxpay.enums.v3.PayScoreApiEnum;
import com.ijpay.wxpay.enums.v3.TransferApiEnum;
import com.ijpay.wxpay.model.v3.Amount;
import com.ijpay.wxpay.model.v3.BatchTransferModel;
import com.ijpay.wxpay.model.v3.Payer;
import com.ijpay.wxpay.model.v3.RefundAmount;
import com.ijpay.wxpay.model.v3.RefundGoodsDetail;
import com.ijpay.wxpay.model.v3.RefundModel;
import com.ijpay.wxpay.model.v3.TransferDetailInput;
import com.ijpay.wxpay.model.v3.UnifiedOrderModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -51,6 +54,7 @@ import java.security.PrivateKey;
import java.security.cert.X509Certificate;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
......@@ -328,6 +332,49 @@ public class WxPayV3Controller {
}
}
@RequestMapping("/batchTransfer")
@ResponseBody
public String batchTransfer(@RequestParam(value = "openId", required = false, defaultValue = "o-_-itxuXeGW3O1cxJ7FXNmq8Wf8") String openId) {
try {
BatchTransferModel batchTransferModel = new BatchTransferModel()
.setAppid(wxPayV3Bean.getAppId())
.setOut_batch_no(PayKit.generateStr())
.setBatch_name("IJPay 测试微信转账到零钱")
.setBatch_remark("IJPay 测试微信转账到零钱")
.setTotal_amount(1)
.setTotal_num(1)
.setTransfer_detail_list(Collections.singletonList(
new TransferDetailInput()
.setOut_detail_no(PayKit.generateStr())
.setTransfer_amount(1)
.setTransfer_remark("IJPay 测试微信转账到零钱")
.setOpenid(openId)));
log.info("发起商家转账请求参数 {}", JSONUtil.toJsonStr(batchTransferModel));
IJPayHttpResponse response = WxPayApi.v3(
RequestMethodEnum.POST,
WxDomainEnum.CHINA.toString(),
TransferApiEnum.TRANSFER_BATCHES.toString(),
wxPayV3Bean.getMchId(),
getSerialNumber(),
null,
wxPayV3Bean.getKeyPath(),
JSONUtil.toJsonStr(batchTransferModel)
);
log.info("发起商家转账响应 {}", response);
// 根据证书序列号查询对应的证书来验证签名结果
boolean verifySignature = WxPayKit.verifySignature(response, wxPayV3Bean.getPlatformCertPath());
log.info("verifySignature: {}", verifySignature);
if (response.getStatus() == OK && verifySignature) {
return response.getBody();
}
return JSONUtil.toJsonStr(response);
} catch (Exception e) {
e.printStackTrace();
return e.getMessage();
}
}
@RequestMapping("/put")
@ResponseBody
......
package com.ijpay.wxpay.model.v3;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
import java.util.List;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>发起商家转账 Model</p>
*
* @author Javen
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class BatchTransferModel {
/**
* 申请商户号的appid或商户号绑定的appid(企业号corpid即为此appid)
*/
private String appid;
/**
* 商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一
*/
private String out_batch_no;
/**
* 该笔批量转账的名称
*/
private String batch_name;
/**
* 转账说明,UTF8编码,最多允许32个字符
*/
private String batch_remark;
/**
* 转账金额单位为“分”。转账总金额必须与批次内所有明细转账金额之和保持一致,否则无法发起转账操作
*/
private Integer total_amount;
/**
* 一个转账批次单最多发起一千笔转账。转账总笔数必须与批次内所有明细之和保持一致,否则无法发起转账操作
*/
private Integer total_num;
/**
* 发起批量转账的明细列表,最多一千笔
*/
private List<TransferDetailInput> transfer_detail_list;
/**
* 指定该笔转账使用的转账场景ID
*/
private String transfer_scene_id;
}
package com.ijpay.wxpay.model.v3;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;
/**
* <p>IJPay 让支付触手可及,封装了微信支付、支付宝支付、银联支付等常用的支付方式以及各种常用的接口。</p>
*
* <p>不依赖任何第三方 mvc 框架,仅仅作为工具使用简单快速完成支付模块的开发,可轻松嵌入到任何系统里。 </p>
*
* <p>IJPay 交流群: 723992875、864988890</p>
*
* <p>Node.js 版: <a href="https://gitee.com/javen205/TNWX">https://gitee.com/javen205/TNWX</a></p>
*
* <p>发起批量转账的明细列表</p>
*
* @author Javen
*/
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain = true)
public class TransferDetailInput {
/**
* 商户系统内部区分转账批次单下不同转账明细单的唯一标识,要求此参数只能由数字、大小写字母组成
*/
private String out_detail_no;
/**
* 转账金额单位为“分”
*/
private Integer transfer_amount;
/**
* 单条转账备注(微信用户会收到该备注),UTF8编码,最多允许32个字符
*/
private String transfer_remark;
/**
* 商户appid下,某用户的openid
*/
private String openid;
/**
* 收款方真实姓名。支持标准RSA算法和国密算法,公钥由微信侧提供
* 明细转账金额<0.3元时,不允许填写收款用户姓名
* 明细转账金额 >= 2,000元时,该笔明细必须填写收款用户姓名
* 同一批次转账明细中的姓名字段传入规则需保持一致,也即全部填写、或全部不填写
* 若商户传入收款用户姓名,微信支付会校验用户openID与姓名是否一致,并提供电子回单
*/
private String user_name;
/**
* 收款方身份证号,可不用填(采用标准RSA算法,公钥由微信侧提供)
* 当填入收款方身份证号时,姓名字段必须填入。
*/
private String user_id_card;
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册