diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/BatchesQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/BatchesQueryResult.java new file mode 100644 index 0000000000000000000000000000000000000000..030e7ad542e056fd7a792e1535699b326473f94b --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/BatchesQueryResult.java @@ -0,0 +1,376 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * @author glz + * @date 2022/6/11 + * @time 17:46 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class BatchesQueryResult implements Serializable{ + /** + *
+ * 字段名:最大资源条数 + * 变量名:limit + * 是否必填:否 + * 类型:int + * 描述: + * query该次请求可返回的最大资源(转账明细单)条数,最小20条,最大100条,不传则默认20条。不足20条按实际条数返回 + * 示例值:20 + *+ */ + @SerializedName("limit") + private Integer limit; + + /** + *
+ * 字段名:请求资源起始位置 + * 变量名:transfer_batch + * 是否必填:否 + * 类型:int + * 描述: + * query该次请求资源(转账明细单)的起始位置,从0开始,转账明细单列表为空时不返回 + * 示例值:1 + *+ */ + @SerializedName("offset") + private Integer offset; + /** + *
+ * 字段名:转账批次单 + * 变量名:transfer_batch + * 是否必填:是 + * 类型:object + * 描述: + * 转账批次单基本信息 + *+ */ + @SerializedName("transfer_batch") + private TransferBatch transferBatch; + + /** + *
+ * 字段名:转账明细单列表 + * 变量名:transfer_detail_list + * 是否必填:否 + * 类型:array + * 描述: + * body发起批量转账的明细列表,最多三千笔 + *+ */ + @SerializedName("transfer_detail_list") + private List
+ * 字段名:商户号 + * 变量名:mchid + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 微信支付分配的商户号 + * 示例值:1900001109 + *+ */ + @SerializedName("mchid") + private String mchid; + + /** + *
+ * 字段名:商家批次单号 + * 变量名:out_batch_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 商户系统内部的商家批次单号,在商户系统内部唯一 + * 示例值:plfk2020042013 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; + + /** + *
+ * 字段名:微信批次单号 + * 变量名:batch_id + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 微信批次单号,微信商家转账系统返回的唯一标识 + * 示例值:1030000071100999991182020050700019480001 + *+ */ + @SerializedName("batch_id") + private String batchId; + + /** + *
+ * 字段名:直连商户的appid + * 变量名:appid + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 申请商户号的appid或商户号绑定的appid(企业号corpid即为此appid) + * 示例值:wxf636efh567hg4356 + *+ */ + @SerializedName("appid") + private String appid; + + /** + *
+ * 字段名:批次状态 + * 变量名:batch_status + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 枚举值: + * WAIT_PAY:待付款,商户员工确认付款阶段 + * ACCEPTED:已受理。批次已受理成功,若发起批量转账的30分钟后,转账批次单仍处于该状态,可能原因是商户账户余额不足等。商户可查询账户资金流水,若该笔转账批次单的扣款已经发生,则表示批次已经进入转账中,请再次查单确认 + * PROCESSING:转账中。已开始处理批次内的转账明细单 + * FINISHED:已完成。批次内的所有转账明细单都已处理完成 + * CLOSED:已关闭。可查询具体的批次关闭原因确认 + * 示例值:ACCEPTED + *+ */ + @SerializedName("batch_status") + private String batchStatus; + + /** + *
+ * 字段名:批次类型 + * 变量名:batch_type + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 枚举值: + * API:API方式发起 + * WEB:页面方式发起 + * 示例值:API + *+ */ + @SerializedName("batch_type") + private String batchType; + + /** + *
+ * 字段名:批次名称 + * 变量名:batch_name + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 该笔批量转账的名称 + * 示例值:2019年1月深圳分部报销单 + *+ */ + @SerializedName("batch_name") + private String batchName; + + /** + *
+ * 字段名:批次备注 + * 变量名:batch_remark + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 转账说明,UTF8编码,最多允许32个字符 + * 示例值:2019年1月深圳分部报销单 + *+ */ + @SerializedName("batch_remark") + private String batchRemark; + + /** + *
+ * 字段名:批次关闭原因 + * 变量名:close_reason + * 是否必填:否 + * 类型:string[1,64] + * 描述: + * 如果批次单状态为“CLOSED”(已关闭),则有关闭原因 + * MERCHANT_REVOCATION:商户主动撤销 + * OVERDUE_CLOSE:系统超时关闭 + * 示例值:OVERDUE_CLOSE + *+ */ + @SerializedName("close_reason") + private String closeReason; + + /** + *
+ * 字段名:转账总金额 + * 变量名:total_amount + * 是否必填:是 + * 类型:int + * 描述: + * 转账金额单位为分 + * 示例值:4000000 + *+ */ + @SerializedName("total_amount") + private Integer totalAmount; + + /** + *
+ * 字段名:转账总笔数 + * 变量名:total_num + * 是否必填:是 + * 类型:int + * 描述: + * 一个转账批次单最多发起三千笔转账 + * 示例值:200 + *+ */ + @SerializedName("total_num") + private Integer totalNum; + + /** + *
+ * 字段名:批次创建时间 + * 变量名:create_time + * 是否必填:否 + * 类型:string[1,32] + * 描述: + * 批次受理成功时返回,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss.sss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 + * 示例值:2015-05-20T13:29:35.120+08:00 + *+ */ + @SerializedName("create_time") + private String createTime; + + /** + *
+ * 字段名:批次更新时间 + * 变量名:update_time + * 是否必填:否 + * 类型:string[1,32] + * 描述: + * 批次最近一次状态变更的时间,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss.sss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 + * 示例值:2015-05-20T13:29:35.120+08:00 + *+ */ + @SerializedName("update_time") + private String updateTime; + + /** + *
+ * 字段名:转账成功金额 + * 变量名:success_amount + * 是否必填:否 + * 类型:int + * 描述: + * 转账成功的金额,单位为分。当批次状态为“PROCESSING”(转账中)时,转账成功金额随时可能变化 + * 示例值:3900000 + *+ */ + @SerializedName("success_amount") + private Integer successAmount; + + /** + *
+ * 字段名:转账成功笔数 + * 变量名:success_num + * 是否必填:否 + * 类型:int + * 描述: + * 转账成功的笔数。当批次状态为“PROCESSING”(转账中)时,转账成功笔数随时可能变化 + * 示例值:199 + *+ */ + @SerializedName("success_num") + private Integer successNum; + + /** + *
+ * 字段名:转账失败金额 + * 变量名:fail_amount + * 是否必填:否 + * 类型:int + * 描述: + * 转账失败的金额,单位为分 + * 示例值:100000 + *+ */ + @SerializedName("fail_amount") + private Integer failAmount; + + /** + *
+ * 字段名:转账失败笔数 + * 变量名:fail_num + * 是否必填:否 + * 类型:int + * 描述: + * 转账失败的笔数 + * 示例值:1 + *+ */ + @SerializedName("fail_num") + private Integer failNum; + } + + @Data + @Accessors(chain = true) + public class TransferDetail implements Serializable { + /** + *
+ * 字段名:微信明细单号 + * 变量名:detail_id + * 是否必填:是 + * 类型:string[1,64] + * 描述: + * 微信支付系统内部区分转账批次单下不同转账明细单的唯一标识 + * 示例值:1040000071100999991182020050700019500100 + *+ */ + @SerializedName("detail_id") + private String detailId; + + /** + *
+ * 字段名:商家明细单号 + * 变量名:out_detail_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 商户系统内部区分转账批次单下不同转账明细单的唯一标识 + * 示例值:x23zy545Bd5436 + *+ */ + @SerializedName("out_detail_no") + private String outDetailNo; + + /** + *
+ * 字段名:明细状态 + * 变量名:detail_status + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 枚举值: + * PROCESSING:转账中。正在处理中,转账结果尚未明确 + * SUCCESS:转账成功 + * FAIL:转账失败。需要确认失败原因后,再决定是否重新发起对该笔明细单的转账(并非整个转账批次单) + * 示例值:SUCCESS + *+ */ + @SerializedName("detail_status") + private String detailStatus; + } +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailElectronicBillRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailElectronicBillRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..deb5ba5180ebce3c61d175bd09b182d3eb15bf18 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailElectronicBillRequest.java @@ -0,0 +1,69 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author glz + * @date 2022/6/11 + * @time 19:32 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class DetailElectronicBillRequest implements Serializable { + /** + *
+ * 字段名:受理类型 + * 变量名:accept_type + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * query电子回单受理类型: + * BATCH_TRANSFER:批量转账明细电子回单 + * TRANSFER_TO_POCKET:企业付款至零钱电子回单 + * TRANSFER_TO_BANK:企业付款至银行卡电子回单 + * 示例值:BATCH_TRANSFER + *+ */ + @SerializedName("accept_type") + private String acceptType; + + /** + *
+ * 字段名:商家转账批次单号 + * 变量名:out_batch_no + * 是否必填:否 + * 类型:string[5,32] + * 描述: + * query需要电子回单的批量转账明细单所在的转账批次单号,该单号为商户申请转账时生成的商户单号。受理类型为BATCH_TRANSFER时该单号必填,否则该单号留空。 + * 示例值:GD2021011610162610BBdkkIwcu3 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; + + /** + *
+ * 字段名:商家转账明细单号 + * 变量名:out_detail_no + * 是否必填:是 + * 类型:string[5,32] + * 描述: + * query该单号为商户申请转账时生成的商家转账明细单号。 + * 1.受理类型为BATCH_TRANSFER时填写商家批量转账明细单号。 + * 2. 受理类型为TRANSFER_TO_POCKET或TRANSFER_TO_BANK时填写商家转账单号。 + * 示例值:mx0911231610162610v4CNkO4HAf + *+ */ + @SerializedName("out_detail_no") + private String outDetailNo; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailElectronicBillResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailElectronicBillResult.java new file mode 100644 index 0000000000000000000000000000000000000000..96fe4f597bb7601f5b1a297e58190bca19819246 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailElectronicBillResult.java @@ -0,0 +1,142 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 查询转账明细电子回单受理结果响应实体 + * @author glz + * @date 2022/6/11 + * @time 19:26 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class DetailElectronicBillResult implements Serializable { + /** + *
+ * 字段名:受理类型 + * 变量名:accept_type + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 电子回单受理类型: + * BATCH_TRANSFER:批量转账明细电子回单 + * TRANSFER_TO_POCKET:企业付款至零钱电子回单 + * TRANSFER_TO_BANK:企业付款至银行卡电子回单 + * 示例值:BATCH_TRANSFER + *+ */ + @SerializedName("accept_type") + private String acceptType; + + /** + *
+ * 字段名:商家转账批次单号 + * 变量名:out_batch_no + * 是否必填:否 + * 类型:string[5,32] + * 描述: + * 需要电子回单的批量转账明细单所在的转账批次单号,该单号为商户申请转账时生成的商户单号。受理类型为BATCH_TRANSFER时该单号必填,否则该单号留空。 + * 示例值:GD2021011610162610BBdkkIwcu3 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; + + /** + *
+ * 字段名:商家转账明细单号 + * 变量名:out_detail_no + * 是否必填:是 + * 类型:string[5,32] + * 描述: + * 该单号为商户申请转账时生成的商家转账明细单号。 + * 1.受理类型为BATCH_TRANSFER时填写商家批量转账明细单号。 + * 2. 受理类型为TRANSFER_TO_POCKET或TRANSFER_TO_BANK时填写商家转账单号。 + * 示例值:mx0911231610162610v4CNkO4HAf + *+ */ + @SerializedName("out_detail_no") + private String outDetailNo; + + /** + *
+ * 字段名:电子回单受理单号 + * 变量名:signature_no + * 是否必填:是 + * 类型:string[3,256] + * 描述: + * 电子回单受理单号,受理单据的唯一标识 + * 示例值:1050000010509999485212020110200058820001 + *+ */ + @SerializedName("signature_no") + private String signatureNo; + + /** + *
+ * 字段名:电子回单状态 + * 变量名:signature_status + * 是否必填:否 + * 类型:string[1,10] + * 描述: + * 枚举值: + * ACCEPTED:已受理,电子签章已受理成功 + * FINISHED:已完成。电子签章已处理完成 + * 示例值:ACCEPTED + *+ */ + @SerializedName("signature_status") + private String signatureStatus; + + /** + *
+ * 字段名:电子回单文件的hash方法 + * 变量名:hash_type + * 是否必填:否 + * 类型:string[1,20] + * 描述: + * 电子回单文件的hash方法,回单状态为:FINISHED时返回 + * 示例值:SHA256 + *+ */ + @SerializedName("hash_type") + private String hashType; + + /** + *
+ * 字段名:电子回单文件的hash值 + * 变量名:hash_value + * 是否必填:否 + * 类型:string[3,1000] + * 描述: + * 电子回单文件的hash值,用于下载之后验证文件的完整、正确性,回单状态为:FINISHED时返回 + * 示例值:DE731F35146A0BEFADE5DB9D1E468D96C01CA8898119C674FEE9F11F4DBE5529 + *+ */ + @SerializedName("hash_value") + private String hashValue; + + /** + *
+ * 字段名:电子回单文件的下载地址 + * 变量名:download_url + * 是否必填:否 + * 类型:string[10,3000] + * 描述: + * 电子回单文件的下载地址,回单状态为:FINISHED时返回。URL有效时长为10分钟,10分钟后需要重新去获取下载地址(但不需要走受理) + * 示例值:https://api.mch.weixin.qq.com/v3/billdownload/file?token=xxx + *+ */ + @SerializedName("download_url") + private String downloadUrl; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailsQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailsQueryResult.java new file mode 100644 index 0000000000000000000000000000000000000000..53b5dfefb9a1c0bc9d82a66be9e9772906dddd50 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/DetailsQueryResult.java @@ -0,0 +1,241 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * 微信明细单号查询明细单 响应实体、 + * @author glz + * @date 2022/6/11 + * @time 17:04 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class DetailsQueryResult implements Serializable { + /** + *
+ * 字段名:商户号 + * 变量名:mchid + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 微信支付分配的商户号 + * 示例值:1900001109 + *+ */ + @SerializedName("mchid") + private String mchid; + + /** + *
+ * 字段名:商家批次单号 + * 变量名:out_batch_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 商户系统内部的商家批次单号,在商户系统内部唯一 + * 示例值:plfk2020042013 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; + + /** + *
+ * 字段名:微信批次单号 + * 变量名:batch_id + * 是否必填:是 + * 类型:string[1,64] + * 描述: + * 微信批次单号,微信商家转账系统返回的唯一标识 + * 示例值:1030000071100999991182020050700019480001 + *+ */ + @SerializedName("batch_id") + private String batchId; + + /** + *
+ * 字段名:直连商户的appid + * 变量名:appid + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 申请商户号的appid或商户号绑定的appid(企业号corpid即为此appid) + * 示例值:wxf636efh567hg4356 + *+ */ + @SerializedName("appid") + private String appid; + + /** + *
+ * 字段名:商家明细单号 + * 变量名:out_detail_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 商户系统内部区分转账批次单下不同转账明细单的唯一标识 + * 示例值:x23zy545Bd5436 + *+ */ + @SerializedName("out_detail_no") + private String outDetailNo; + + /** + *
+ * 字段名:微信明细单号 + * 变量名:detail_id + * 是否必填:是 + * 类型:string[1,64] + * 描述: + * 微信支付系统内部区分转账批次单下不同转账明细单的唯一标识 + * 示例值:1040000071100999991182020050700019500100 + *+ */ + @SerializedName("detail_id") + private String detailId; + + /** + *
+ * 字段名:明细状态 + * 变量名:detail_status + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 枚举值: + * PROCESSING:转账中。正在处理中,转账结果尚未明确 + * SUCCESS:转账成功 + * FAIL:转账失败。需要确认失败原因后,再决定是否重新发起对该笔明细单的转账(并非整个转账批次单) + * 示例值:SUCCESS + *+ */ + @SerializedName("detail_status") + private String detailStatus; + + /** + *
+ * 字段名:转账金额 + * 变量名:transfer_amount + * 是否必填:是 + * 类型:int + * 描述: + * 转账金额单位为分 + * 示例值:200000 + *+ */ + @SerializedName("transfer_amount") + private Integer transferAmount; + + /** + *
+ * 字段名:转账备注 + * 变量名:transfer_remark + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 单条转账备注(微信用户会收到该备注),UTF8编码,最多允许32个字符 + * 示例值:2020年4月报销 + *+ */ + @SerializedName("transfer_remark") + private String transferRemark; + + /** + *
+ * 字段名:明细失败原因 + * 变量名:fail_reason + * 是否必填:否 + * 类型:string[1,64] + * 描述: + * 如果转账失败则有失败原因 + * ACCOUNT_FROZEN:账户冻结 + * REAL_NAME_CHECK_FAIL:用户未实名 + * NAME_NOT_CORRECT:用户姓名校验失败 + * OPENID_INVALID:Openid校验失败 + * TRANSFER_QUOTA_EXCEED:超过用户单笔收款额度 + * DAY_RECEIVED_QUOTA_EXCEED:超过用户单日收款额度 + * MONTH_RECEIVED_QUOTA_EXCEED:超过用户单月收款额度 + * DAY_RECEIVED_COUNT_EXCEED:超过用户单日收款次数 + * PRODUCT_AUTH_CHECK_FAIL:产品权限校验失败 + * OVERDUE_CLOSE:转账关闭 + * ID_CARD_NOT_CORRECT:用户身份证校验失败 + * ACCOUNT_NOT_EXIST:用户账户不存在 + * TRANSFER_RISK:转账存在风险 + * REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED:用户账户收款受限,请引导用户在微信支付查看详情 + * RECEIVE_ACCOUNT_NOT_PERMMIT:未配置该用户为转账收款人 + * PAYER_ACCOUNT_ABNORMAL:商户账户付款受限,可前往商户平台-违约记录获取解除功能限制指引 + * PAYEE_ACCOUNT_ABNORMAL:用户账户收款异常,请引导用户完善其在微信支付的身份信息以继续收款 + * 示例值:ACCOUNT_FROZEN + *+ */ + @SerializedName("fail_reason") + private String failReason; + + /** + *
+ * 字段名:用户在直连商户应用下的用户标示 + * 变量名:openid + * 是否必填:是 + * 类型:string[1,128] + * 描述: + * 用户在直连商户appid下的唯一标识 + * 示例值:o-MYE42l80oelYMDE34nYD456Xoy + *+ */ + @SerializedName("openid") + private String openid; + + /** + *
+ * 字段名:收款用户姓名 + * 变量名:user_name + * 是否必填:否 + * 类型:string[1,1024] + * 描述: + * 1、商户转账时传入了收款用户姓名、查询时会返回收款用户姓名; + * 2、收款方姓名采用标准RSA算法,公钥由微信侧提供 + * 3、 该字段需进行加密处理,加密方法详见敏感信息加密说明。(提醒:必须在HTTP头中上送Wechatpay-Serial) + * 示例值:757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45 + *+ */ + @SerializedName("user_name") + private String userName; + + /** + *
+ * 字段名:转账发起时间 + * 变量名:initiate_time + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 转账发起的时间,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss.sss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 + * 示例值:2015-05-20T13:29:35.120+08:00 + *+ */ + @SerializedName("initiate_time") + private String initiateTime; + + /** + *
+ * 字段名:明细更新时间 + * 变量名:update_time + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 明细最后一次状态变更的时间,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss.sss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 + * 示例值:2015-05-20T13:29:35.120+08:00 + *+ */ + @SerializedName("update_time") + private String updateTime; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..f9590e522f19b9ffaad9afa594238cc82c4374ab --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillApplyRequest.java @@ -0,0 +1,36 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author glz + * @date 2022/6/11 + * @time 18:37 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class ElectronicBillApplyRequest implements Serializable { + /** + *
+ * 字段名:商家批次单号 + * 变量名:out_batch_no + * 是否必填:是 + * 类型:string[5,32] + * 描述: + * body商户系统内部的商家批次单号,在商户系统内部唯一。需要电子回单的批次单号 + * 示例值:plfk2020042013 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java new file mode 100644 index 0000000000000000000000000000000000000000..c738707e1cfc6e306f84a1738f5541176e83a045 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/ElectronicBillResult.java @@ -0,0 +1,136 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author glz + * @date 2022/6/11 + * @time 18:39 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class ElectronicBillResult implements Serializable { + /** + *
+ * 字段名:商家批次单号 + * 变量名:out_batch_no + * 是否必填:是 + * 类型:string[5,32] + * 描述: + * body商户系统内部的商家批次单号,在商户系统内部唯一。需要电子回单的批次单号 + * 示例值:plfk2020042013 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; + + /** + *
+ * 字段名:电子回单申请单号 + * 变量名:signature_no + * 是否必填:是 + * 类型:string[3,45] + * 描述: + * 电子回单申请单号,申请单据的唯一标识 + * 示例值:1050000010509999485212020110200058820001 + *+ */ + @SerializedName("signature_no") + private String signatureNo; + + /** + *
+ * 字段名:电子回单状态 + * 变量名:signature_status + * 是否必填:否 + * 类型:string[1,10] + * 描述: + * 枚举值: + * ACCEPTED:已受理,电子签章已受理成功 + * FINISHED:已完成。电子签章已处理完成 + * 示例值:ACCEPTED + *+ */ + @SerializedName("signature_status") + private String signatureStatus; + + /** + *
+ * 字段名:电子回单文件的hash方法 + * 变量名:hash_type + * 是否必填:否 + * 类型:string[1,20] + * 描述: + * 电子回单文件的hash方法,回单状态为:FINISHED时返回。 + * 示例值:SHA256 + *+ */ + @SerializedName("hash_type") + private String hashType; + + /** + *
+ * 字段名:电子回单文件的hash值 + * 变量名:hash_value + * 是否必填:否 + * 类型:string[3,1000] + * 描述: + * 电子回单文件的hash值,用于下载之后验证文件的完整、正确性,回单状态为:FINISHED时返回。 + * 示例值:DE731F35146A0BEFADE5DB9D1E468D96C01CA8898119C674FEE9F11F4DBE5529 + *+ */ + @SerializedName("hash_value") + private String hashValue; + + /** + *
+ * 字段名:电子回单文件的下载地址 + * 变量名:download_url + * 是否必填:否 + * 类型:string[10,3000] + * 描述: + * 电子回单文件的下载地址,回单状态为:FINISHED时返回。URL有效时长为10分钟,10分钟后需要重新去获取下载地址(但不需要走受理) + * 示例值:https://api.mch.weixin.qq.com/v3/billdownload/file?token=xxx + *+ */ + @SerializedName("download_url") + private String downloadUrl; + + /** + *
+ * 字段名:创建时间 + * 变量名:create_time + * 是否必填:否 + * 类型:string[1,32] + * 描述: + * 电子签章单创建时间,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss.sss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 + * 示例值:2020-05-20T13:29:35.120+08:00 + *+ */ + @SerializedName("create_time") + private String createTime; + + /** + *
+ * 字段名:更新时间 + * 变量名:update_time + * 是否必填:否 + * 类型:string[1,32] + * 描述: + * 电子签章单最近一次状态变更的时间,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss.sss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 + * 示例值:2020-05-21T13:29:35.120+08:00 + *+ */ + @SerializedName("update_time") + private String updateTime; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/MerchantBatchesQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/MerchantBatchesQueryRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..0d00e1c57d342958e776dda0404c6005bd6dc39c --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/MerchantBatchesQueryRequest.java @@ -0,0 +1,99 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author glz + * @date 2022/6/11 + * @time 18:03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class MerchantBatchesQueryRequest implements Serializable { + static final long serialVersionUID = 1L; + + /** + *
+ * 字段名:商家批次单号 + * 变量名:out_batch_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * path商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一 + * 示例值:plfk2020042013 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; + + /** + *
+ * 字段名:是否查询转账明细单 + * 变量名:need_query_detail + * 是否必填:是 + * 类型:boolean + * 描述: + * query枚举值: + * true:是; + * false:否,默认否。 + * 商户可选择是否查询指定状态的转账明细单,当转账批次单状态为“FINISHED”(已完成)时,才会返回满足条件的转账明细单 + * 示例值:true + *+ */ + @SerializedName("need_query_detail") + private Boolean needQueryDetail; + + /** + *
+ * 字段名:请求资源起始位置 + * 变量名:offset + * 是否必填:否 + * 类型:int + * 描述: + * query该次请求资源的起始位置,从0开始,默认值为0 + *+ */ + @SerializedName("offset") + private Integer offset; + + /** + *
+ * 字段名:最大资源条数 + * 变量名:limit + * 是否必填:否 + * 类型:int + * 描述: + * query该次请求可返回的最大明细条数,最小20条,最大100条,不传则默认20条。不足20条按实际条数返回 + * 示例值:20 + *+ */ + @SerializedName("limit") + private Integer limit; + + /** + *
+ * 字段名:明细状态 + * 变量名:detail_status + * 是否必填:否 + * 类型:string[1,32] + * 描述: + * query查询指定状态的转账明细单,当need_query_detail为true时,该字段必填 + * ALL:全部。需要同时查询转账成功和转账失败的明细单 + * SUCCESS:转账成功。只查询转账成功的明细单 + * FAIL:转账失败。只查询转账失败的明细单 + * 示例值:FAIL + *+ */ + @SerializedName("detail_status") + private String detailStatus; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/MerchantDetailsQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/MerchantDetailsQueryRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..a260fb2aba08ebe1d9c9ec0197d27cd5377d1a21 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/MerchantDetailsQueryRequest.java @@ -0,0 +1,50 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author glz + * @date 2022/6/11 + * @time 17:44 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class MerchantDetailsQueryRequest implements Serializable { + /** + *
+ * 字段名:商家明细单号 + * 变量名:out_detail_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * path商户系统内部区分转账批次单下不同转账明细单的唯一标识,要求此参数只能由数字、大小写字母组成 + * 示例值:x23zy545Bd5436 + *+ */ + @SerializedName("out_detail_no") + private String outDetailNo; + + /** + *
+ * 字段名:商家批次单号 + * 变量名:out_batch_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * path商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一 + * 示例值:plfk2020042013 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/TransferCreateRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/TransferCreateRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..eb2593a7eb7ab62d2d39d80cdc72c997fd45b0aa --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/TransferCreateRequest.java @@ -0,0 +1,205 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.github.binarywang.wxpay.v3.SpecEncrypt; +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; +import java.util.List; + +/** + * @author glz + * @date 2022/5/26 + * @time 12:03 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class TransferCreateRequest implements Serializable { + static final long serialVersionUID = 1L; + + /** + *
+ * 字段名:直连商户的appid + * 变量名:appid + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 申请商户号的appid或商户号绑定的appid(企业号corpid即为此appid) + * 示例值:wxf636efh567hg4356 + *+ */ + @SerializedName("appid") + private String appid; + + /** + *
+ * 字段名:商家批次单号 + * 变量名:out_batch_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * path商户系统内部的商家批次单号,要求此参数只能由数字、大小写字母组成,在商户系统内部唯一 + * 示例值:plfk2020042013 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; + + /** + *
+ * 字段名:批次名称 + * 变量名:batch_name + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 该笔批量转账的名称 + * 示例值:2019年1月深圳分部报销单 + *+ */ + @SerializedName("batch_name") + private String batchName; + + /** + *
+ * 字段名:批次备注 + * 变量名:batch_remark + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 转账说明,UTF8编码,最多允许32个字符 + * 示例值:2019年1月深圳分部报销单 + *+ */ + @SerializedName("batch_remark") + private String batchRemark; + + /** + *
+ * 字段名:转账总金额 + * 变量名:total_amount + * 是否必填:是 + * 类型:int + * 描述: + * 转账金额单位为分 + * 示例值:4000000 + *+ */ + @SerializedName("total_amount") + private Integer totalAmount; + + /** + *
+ * 字段名:转账总笔数 + * 变量名:total_num + * 是否必填:是 + * 类型:int + * 描述: + * 一个转账批次单最多发起三千笔转账 + * 示例值:200 + *+ */ + @SerializedName("total_num") + private Integer totalNum; + + /** + *
+ * 字段名:转账明细单列表 + * 变量名:transfer_detail_list + * 是否必填:否 + * 类型:array + * 描述: + * body发起批量转账的明细列表,最多三千笔 + *+ */ + @SerializedName("transfer_detail_list") + @SpecEncrypt + private List
+ * 字段名:商家明细单号 + * 变量名:out_detail_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 商户系统内部区分转账批次单下不同转账明细单的唯一标识 + * 示例值:x23zy545Bd5436 + *+ */ + @SerializedName("out_detail_no") + private String outDetailNo; + + /** + *
+ * 字段名:转账金额 + * 变量名:transfer_amount + * 是否必填:是 + * 类型:int + * 描述: + * 转账金额单位为分 + * 示例值:200000 + *+ */ + @SerializedName("transfer_amount") + private Integer transferAmount; + + /** + *
+ * 字段名:转账备注 + * 变量名:transfer_remark + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 单条转账备注(微信用户会收到该备注),UTF8编码,最多允许32个字符 + * 示例值:2020年4月报销 + *+ */ + @SerializedName("transfer_remark") + private String transferRemark; + + /** + *
+ * 字段名:用户在直连商户应用下的用户标示 + * 变量名:openid + * 是否必填:是 + * 类型:string[1,128] + * 描述: + * 用户在直连商户appid下的唯一标识 + * 示例值:o-MYE42l80oelYMDE34nYD456Xoy + *+ */ + @SerializedName("openid") + private String openid; + + /** + *
+ * 字段名:收款用户姓名 + * 变量名:user_name + * 是否必填:否 + * 类型:string[1,1024] + * 描述: + * 1、商户转账时传入了收款用户姓名、查询时会返回收款用户姓名; + * 2、收款方姓名采用标准RSA算法,公钥由微信侧提供 + * 3、 该字段需进行加密处理,加密方法详见敏感信息加密说明。(提醒:必须在HTTP头中上送Wechatpay-Serial) + * 示例值:757b340b45ebef5467rter35gf464344v3542sdf4t6re4tb4f54ty45t4yyry45 + *+ */ + @SerializedName("user_name") + @SpecEncrypt + private String userName; + } +} + + diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/TransferCreateResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/TransferCreateResult.java new file mode 100644 index 0000000000000000000000000000000000000000..3ce4ad4552d54521eaa3b2ffc66b2d9bd8792c35 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/TransferCreateResult.java @@ -0,0 +1,65 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author glz + * @date 2022/6/11 + * @time 14:30 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class TransferCreateResult implements Serializable { + + /** + *
+ * 字段名:商家批次单号 + * 变量名:out_batch_no + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 商户系统内部的商家批次单号,在商户系统内部唯一 + * 示例值:plfk2020042013 + *+ */ + @SerializedName("out_batch_no") + private String outBatchNo; + + /** + *
+ * 字段名:微信批次单号 + * 变量名:batch_id + * 是否必填:是 + * 类型:string[1,32] + * 描述: + * 微信批次单号,微信商家转账系统返回的唯一标识 + * 示例值:1030000071100999991182020050700019480001 + *+ */ + @SerializedName("batch_id") + private String batchId; + + /** + *
+ * 字段名:批次创建时间 + * 变量名:create_time + * 是否必填:否 + * 类型:string[1,32] + * 描述: + * 批次受理成功时返回,遵循rfc3339标准格式,格式为yyyy-MM-DDTHH:mm:ss.sss+TIMEZONE,yyyy-MM-DD表示年月日,T出现在字符串中,表示time元素的开头,HH:mm:ss.sss表示时分秒毫秒,TIMEZONE表示时区(+08:00表示东八区时间,领先UTC 8小时,即北京时间)。例如:2015-05-20T13:29:35.120+08:00表示北京时间2015年05月20日13点29分35秒 + * 示例值:2015-05-20T13:29:35.120+08:00 + *+ */ + @SerializedName("create_time") + private String createTime; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/WxBatchesQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/WxBatchesQueryRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..9f75f6d12574bc3c8928de17f8281de1ba3287fe --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/WxBatchesQueryRequest.java @@ -0,0 +1,99 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author glz + * @date 2022/6/11 + * @time 15:09 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class WxBatchesQueryRequest implements Serializable { + static final long serialVersionUID = 1L; + + /** + *
+ * 字段名:微信批次单号 + * 变量名:batch_id + * 是否必填:是 + * 类型:string[1,64] + * 描述: + * path微信批次单号,微信商家转账系统返回的唯一标识 + * 示例值:1030000071100999991182020050700019480001 + *+ */ + @SerializedName("batch_id") + private String batchId; + + /** + *
+ * 字段名:是否查询转账明细单 + * 变量名:need_query_detail + * 是否必填:是 + * 类型:boolean + * 描述: + * query枚举值: + * true:是; + * false:否,默认否。 + * 商户可选择是否查询指定状态的转账明细单,当转账批次单状态为“FINISHED”(已完成)时,才会返回满足条件的转账明细单 + * 示例值:true + *+ */ + @SerializedName("need_query_detail") + private Boolean needQueryDetail; + + /** + *
+ * 字段名:请求资源起始位置 + * 变量名:offset + * 是否必填:否 + * 类型:int + * 描述: + * query该次请求资源的起始位置,从0开始,默认值为0 + *+ */ + @SerializedName("offset") + private Integer offset; + + /** + *
+ * 字段名:最大资源条数 + * 变量名:limit + * 是否必填:否 + * 类型:int + * 描述: + * query该次请求可返回的最大明细条数,最小20条,最大100条,不传则默认20条。不足20条按实际条数返回 + * 示例值:20 + *+ */ + @SerializedName("limit") + private Integer limit; + + /** + *
+ * 字段名:明细状态 + * 变量名:detail_status + * 是否必填:否 + * 类型:string[1,32] + * 描述: + * query查询指定状态的转账明细单,当need_query_detail为true时,该字段必填 + * ALL:全部。需要同时查询转账成功和转账失败的明细单 + * SUCCESS:转账成功。只查询转账成功的明细单 + * FAIL:转账失败。只查询转账失败的明细单 + * 示例值:FAIL + *+ */ + @SerializedName("detail_status") + private String detailStatus; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/WxDetailsQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/WxDetailsQueryRequest.java new file mode 100644 index 0000000000000000000000000000000000000000..d5a4472554757d7c290ee307427256fd80a34b04 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/merchanttransfer/WxDetailsQueryRequest.java @@ -0,0 +1,50 @@ +package com.github.binarywang.wxpay.bean.merchanttransfer; + +import com.google.gson.annotations.SerializedName; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.io.Serializable; + +/** + * @author glz + * @date 2022/6/11 + * @time 16:55 + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@Accessors(chain = true) +public class WxDetailsQueryRequest implements Serializable { + /** + *
+ * 字段名:微信批次单号 + * 变量名:batch_id + * 是否必填:是 + * 类型:string[1,64] + * 描述: + * path微信批次单号,微信商家转账系统返回的唯一标识 + * 示例值:1030000071100999991182020050700019480001 + *+ */ + @SerializedName("batch_id") + private String batchId; + + /** + *
+ * 字段名:微信明细单号 + * 变量名:detail_id + * 是否必填:是 + * 类型:string[1,64] + * 描述: + * path微信支付系统内部区分转账批次单下不同转账明细单的唯一标识 + * 示例值:1040000071100999991182020050700019500100 + *+ */ + @SerializedName("detail_id") + private String detailId; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java new file mode 100644 index 0000000000000000000000000000000000000000..a614166953728ac82aab496c552d1ffe29a978ab --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/MerchantTransferService.java @@ -0,0 +1,150 @@ +package com.github.binarywang.wxpay.service; + +import com.github.binarywang.wxpay.bean.merchanttransfer.*; +import com.github.binarywang.wxpay.exception.WxPayException; + +/** + * 商家转账到零钱(直联商户) + * @author glz + * @date 2022/6/11 + * @time 14:28 + */ +public interface MerchantTransferService { + + /** + * 发起商家转账API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_1.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/batches + * 请求方式:POST + * 接口限频: 单个商户 50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。 + * 是否需要证书:是 + * + * @param request + * @return + * @throws WxPayException + */ + TransferCreateResult createTransfer(TransferCreateRequest request) throws WxPayException; + + /** + * 微信批次单号查询批次单API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_2.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/batches/batch-id/{batch_id} + * 请求方式:GET + * 接口限频: 单个商户 50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。 + * + * @param request + * @return + * @throws WxPayException + */ + BatchesQueryResult queryWxBatches(WxBatchesQueryRequest request) throws WxPayException; + + /** + * 微信明细单号查询明细单API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_3.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/batches/batch-id/{batch_id}/details/detail-id/{detail_id} + * 请求方式:GET + * 接口限频: 单个商户 50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。 + * + * @param request + * @return + * @throws WxPayException + */ + DetailsQueryResult queryWxDetails(WxDetailsQueryRequest request) throws WxPayException; + + /** + * 商家批次单号查询批次单API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_5.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/batches/out-batch-no/{out_batch_no} + * 请求方式:GET + * 接口限频: 单个商户 50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。 + * + * @param request + * @return + * @throws WxPayException + */ + BatchesQueryResult queryMerchantBatches(MerchantBatchesQueryRequest request) throws WxPayException; + + /** + * 商家明细单号查询明细单API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_6.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/batches/out-batch-no/{out_batch_no}/details/out-detail-no/{out_detail_no} + * 请求方式:GET + * 接口限频: 单个商户 50QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。 + * + * @param request + * @return + * @throws WxPayException + */ + DetailsQueryResult queryMerchantDetails(MerchantDetailsQueryRequest request) throws WxPayException; + + /** + * 转账电子回单申请受理API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_7.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/bill-receipt + * 请求方式:POST + * 接口限频: 单个商户 20QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。 + * + * @param request + * @return + * @throws WxPayException + */ + ElectronicBillResult applyElectronicBill(ElectronicBillApplyRequest request) throws WxPayException; + + /** + * 查询转账电子回单API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_8.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer/bill-receipt/{out_batch_no} + * 请求方式:GET + * + * @param outBatchNo + * @return + * @throws WxPayException + */ + ElectronicBillResult queryElectronicBill(String outBatchNo) throws WxPayException; + + /** + * 转账明细电子回单受理API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_9.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer-detail/electronic-receipts + * 请求方式:POST + * 接口限频: 单个商户 20QPS,如果超过频率限制,会报错FREQUENCY_LIMITED,请降低频率请求。 + * 前置条件:只支持受理最近30天内的转账明细单 + * + * @param request + * @return + * @throws WxPayException + */ + DetailElectronicBillResult applyDetailElectronicBill(DetailElectronicBillRequest request) throws WxPayException; + + + /** + * 查询转账明细电子回单受理结果API + * + * 适用对象:直连商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter4_3_10.shtml + * 请求URL:https://api.mch.weixin.qq.com/v3/transfer-detail/electronic-receipts + * 请求方式:GET + * 前置条件:只支持查询最近90天内的转账明细单 + * + * @param request + * @return + * @throws WxPayException + */ + DetailElectronicBillResult queryDetailElectronicBill(DetailElectronicBillRequest request) throws WxPayException; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java index 74f353e838f6f7f63a55acf707213496ac9531b0..88488a0df67964cb03fdf88eb7834e08611fc1e9 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java @@ -304,6 +304,13 @@ public interface WxPayService { */ MarketingBusiFavorService getMarketingBusiFavorService(); + /** + * 获取商家转账到零钱服务类 + * + * @return the merchant transfer service + */ + MerchantTransferService getMerchantTransferService(); + /** * 设置企业付款服务类,允许开发者自定义实现类. * diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java index 27fe2bfa27a423258ad22708cacce46a88159d59..6024b6b8f49c9d0d7314378ec497dc43e057cc02 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java @@ -79,6 +79,7 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { private final PayrollService payrollService = new PayrollServiceImpl(this); private final ComplaintService complaintsService = new ComplaintServiceImpl(this); private final BankService bankService = new BankServiceImpl(this); + private final MerchantTransferService merchantTransferService = new MerchantTransferServiceImpl(this); protected Map