🆕 #2120 【微信支付】微信分账服务类增加v3接口

This commit is contained in:
pg
2021-06-26 21:09:57 +08:00
committed by GitHub
parent e3f785f006
commit 577b756912
12 changed files with 1135 additions and 0 deletions

View File

@@ -0,0 +1,144 @@
package com.github.binarywang.wxpay.bean.profitsharingV3;
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 java.io.Serializable;
/**
*
* 微信V3接口 分账接收方实体
* @author pg
* @date 2021-6-25
*
*/
@Data
@Builder(builderMethodName = "newBuilder")
@NoArgsConstructor
@AllArgsConstructor
public class ProfitSharingReceiver implements Serializable {
private static final long serialVersionUID = -4391888575149767840L;
/**
* <pre>
* 字段名应用ID
* 是否必填:是
* 描述微信分配的商户appid
* </pre>
*/
@SerializedName("appid")
private String appid;
/**
* <pre>
* 字段名:分账接收方类型
* 是否必填:是
* 描述:
* 1、MERCHANT_ID商户号
* 2、PERSONAL_OPENID个人openid由父商户APPID转换得到
* </pre>
*/
@SerializedName("type")
private String type;
/**
* <pre>
* 字段名:分账接收方帐号
* 是否必填:是
* 描述:
* 1、分账接收方类型为MERCHANT_ID时分账接收方账号为商户号
* 2、分账接收方类型为PERSONAL_OPENID时分账接收方账号为个人openid
* </pre>
*/
@SerializedName("account")
private String account;
/**
* <pre>
* 字段名:分账个人接收方姓名
* 是否必填:否
* 描述:
* 可选项,在接收方类型为个人的时可选填,若有值,会检查与 name 是否实名匹配,不匹配会拒绝分账请求
* 1、分账接收方类型是PERSONAL_OPENID是个人姓名的密文选传传则校验 此字段的加密方法详见:敏感信息加密说明
* 2、使用微信支付平台证书中的公钥
* 3、使用RSAES-OAEP算法进行加密
* 4、将请求中HTTP头部的Wechatpay-Serial设置为证书序列号
* </pre>
*/
@SerializedName("name")
@SpecEncrypt
private String name;
/**
* <pre>
* 字段名:与分账方的关系类型
* 是否必填:是
* 描述:子商户与接收方的关系。 本字段值为枚举:
* STORE门店
* STAFF员工
* STORE_OWNER店主
* PARTNER合作伙伴
* HEADQUARTER总部
* BRAND品牌方
* DISTRIBUTOR分销商
* USER用户
* SUPPLIER 供应商
* CUSTOM自定义
* </pre>
*/
@SerializedName("relation_type")
private String relationType;
/**
* <pre>
* 字段名:自定义的分账关系
* 是否必填:是
* 描述子商户与接收方具体的关系本字段最多10个字。
* 当字段relationType的值为CUSTOM时本字段必填;
* 当字段relationType的值不为CUSTOM时本字段无需填写。
* </pre>
*/
@SerializedName("custom_relation")
private String customRelation;
/**
* <pre>
* 字段名:分账描述
* 是否必填:是
* 描述: 分账的原因描述,分账账单中需要体现
* </pre>
*/
private String description;
/**
* <pre>
* 字段名:分账金额
* 是否必填:是
* 描述: 分账金额,单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额
* </pre>
*/
private Long amount;
/**
* 此构造函数用于分账接口
*
* @param type MERCHANT_ID商户ID
* PERSONAL_WECHATID个人微信号PERSONAL_OPENID个人openid由父商户APPID转换得到PERSONAL_SUB_OPENID: 个人sub_openid由子商户APPID转换得到
* @param account 类型是MERCHANT_ID时是商户ID
* 类型是PERSONAL_WECHATID时是个人微信号
* 类型是PERSONAL_OPENID时是个人openid
* 类型是PERSONAL_SUB_OPENID时是个人sub_openid
* @param amount 分账金额,单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额
* @param description 分账的原因描述,分账账单中需要体现
*/
public ProfitSharingReceiver(String type, String account, Long amount, String description) {
this.type = type;
this.account = account;
this.amount = amount;
this.description = description;
}
}

View File

@@ -0,0 +1,77 @@
package com.github.binarywang.wxpay.bean.profitsharingV3;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.List;
/**
* 微信V3接口
* 请求分账API请求实体
*
* @author pg
* @date 2021-6-24
*/
@Data
@Builder(builderMethodName = "newBuilder")
@NoArgsConstructor
@AllArgsConstructor
public class ProfitSharingRequest implements Serializable {
private static final long serialVersionUID = 3644929701624280800L;
/**
* <pre>
* 字段名应用ID
* 是否必填:是
* 描述微信分配的商户appid
* </pre>
*/
@SerializedName("appid")
private String appid;
/**
* <pre>
* 字段名:微信订单号
* 是否必填:是
* 描述:微信支付订单号
* </pre>
*/
@SerializedName("transaction_id")
private String transactionId;
/**
* <pre>
* 字段名:商户分账单号
* 是否必填:是
* 描述商户系统内部的分账单号在商户系统内部唯一同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@
* </pre>
*/
@SerializedName("out_order_no")
private String outOrderNo;
/**
* <pre>
* 字段名:分账接收方列表
* 是否必填:是
* 描述分账接收方列表可以设置出资商户作为分账接受方最多可有50个分账接收方
* </pre>
*/
@SerializedName("receivers")
private List<ProfitSharingReceiver> receivers;
/**
* <pre>
* 字段名:是否解冻剩余未分资金
* 是否必填:是
* 描述:
* 1、如果为true该笔订单剩余未分账的金额会解冻回分账方商户
* 2、如果为false该笔订单剩余未分账的金额不会解冻回分账方商户可以对该笔订单再次进行分账。
* </pre>
*/
@SerializedName("unfreeze_unsplit")
private boolean unfreezeUnsplit;
}

View File

@@ -0,0 +1,172 @@
package com.github.binarywang.wxpay.bean.profitsharingV3;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
/**
* 微信V3接口
* 请求分账API返回的分账结果实体
*
* @author pg
* @date 2021-6-24
*/
@Data
public class ProfitSharingResult implements Serializable {
private static final long serialVersionUID = -6201692412535987502L;
/**
* <pre>
* 字段名:微信订单号
* 是否必填:是
* 描述:微信支付订单号
* </pre>
*/
@SerializedName("transaction_id")
private String transactionId;
/**
* <pre>
* 字段名:商户分账单号
* 是否必填:是
* 描述商户系统内部的分账单号在商户系统内部唯一同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@
* </pre>
*/
@SerializedName("out_order_no")
private String outOrderNo;
/**
* <pre>
* 字段名:微信分账单号,
* 是否必填:是
* 描述:微信系统返回的唯一标识.
* </pre>
*/
@SerializedName("order_id")
private String orderId;
/**
* <pre>
* 字段名:分账单状态
* 是否必填:是
* 描述分账单状态每个接收方的分账结果请查看receivers中的result字段
* 1、PROCESSING处理中
* 2、FINISHED分账完成.
* </pre>
*/
@SerializedName("state")
private String state;
/**
* 分账接收方列表
*/
@SerializedName("receivers")
private List<Receiver> receivers;
@Data
public static class Receiver implements Serializable {
private static final long serialVersionUID = 4240983048700956806L;
/**
* <pre>
* 字段名:分账接收方类型
* 是否必填:是
* 描述:
* 1、MERCHANT_ID商户号
* 2、PERSONAL_OPENID个人openid由父商户APPID转换得到
* </pre>
*/
@SerializedName("type")
private String type;
/**
* <pre>
* 字段名:分账接收方帐号
* 是否必填:是
* 描述:
* 1、分账接收方类型为MERCHANT_ID时分账接收方账号为商户号
* 2、分账接收方类型为PERSONAL_OPENID时分账接收方账号为个人openid
* </pre>
*/
@SerializedName("account")
private String account;
/**
* <pre>
* 字段名:分账金额
* 是否必填:是
* 描述: 分账金额,单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额
* </pre>
*/
@SerializedName("amount")
private Long amount;
/**
* <pre>
* 字段名:分账描述
* 是否必填:是
* 描述: 分账的原因描述,分账账单中需要体现
* </pre>
*/
@SerializedName("description")
private String description;
/**
* <pre>
* 字段名:分账结果
* 是否必填:是
* 描述:
* 1、PENDING待分账
* 2、SUCCESS分账成功
* 3、CLOSED已关闭
* </pre>
*/
@SerializedName("result")
private String result;
/**
* <pre>
* 字段名:分账失败原因
* 是否必填:是
* 描述:包含以下枚举值:
* 1、ACCOUNT_ABNORMAL : 分账接收账户异常
* 2、NO_RELATION : 分账关系已解除
* 3、RECEIVER_HIGH_RISK : 高风险接收方
* 4、RECEIVER_REAL_NAME_NOT_VERIFIED : 接收方未实名
* 5、NO_AUTH : 分账权限已解除
* </pre>
*/
@SerializedName("fail_reason")
private String failReason;
/**
* <pre>
* 字段名:分账创建时间
* 是否必填:是
* 描述遵循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年5月20日 13点29分35秒。
* </pre>
*/
@SerializedName("create_time")
private String createTime;
/**
* <pre>
* 字段名:分账完成时间
* 是否必填:是
* 描述遵循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年5月20日 13点29分35秒。
* </pre>
*/
@SerializedName("finish_time")
private String finishTime;
}
}

View File

@@ -0,0 +1,82 @@
package com.github.binarywang.wxpay.bean.profitsharingV3;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 微信V3接口
* 请求分账回退API请求实体
*
* @author pg
* @date 2021-6-25
*/
@Data
@Builder(builderMethodName = "newBuilder")
@NoArgsConstructor
@AllArgsConstructor
public class ProfitSharingReturnRequest implements Serializable {
private static final long serialVersionUID = -2175582517588397426L;
/**
* <pre>
* 字段名:微信分账单号
* 是否必填:是
* 描述:微信分账单号,微信系统返回的唯一标识。
* </pre>
*/
@SerializedName("order_id")
private String orderId;
/**
* <pre>
* 字段名:商户分账单号
* 是否必填:是
* 描述商户系统内部的分账单号在商户系统内部唯一同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@
* </pre>
*/
@SerializedName("out_order_no")
private String outOrderNo;
/**
* <pre>
* 字段名:商户回退单号
* 是否必填:是
* 描述:此回退单号是商户在自己后台生成的一个新的回退单号,在商户后台唯一
* </pre>
*/
@SerializedName("out_return_no")
private String outReturnNo;
/**
* <pre>
* 字段名:回退商户号
* 是否必填:是
* 描述:分账回退的出资商户,只能对原分账请求中成功分给商户接收方进行回退
* </pre>
*/
@SerializedName("return_mchid")
private String returnMchid;
/**
* <pre>
* 字段名:回退金额
* 是否必填:是
* 描述:需要从分账接收方回退的金额,单位为分,只能为整数,不能超过原始分账单分出给该接收方的金额
* </pre>
*/
private Long amount;
/**
* <pre>
* 字段名:回退描述
* 是否必填:是
* 描述: 分账回退的原因描述
* </pre>
*/
private String description;
}

View File

@@ -0,0 +1,141 @@
package com.github.binarywang.wxpay.bean.profitsharingV3;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import java.io.Serializable;
/**
* 微信V3接口
* 请求分账回退API返回实体
*
* @author pg
* @date 2021-6-25
*/
@Data
public class ProfitSharingReturnResult implements Serializable {
private static final long serialVersionUID = -2175582517588397426L;
/**
* <pre>
* 字段名:微信分账单号
* 是否必填:是
* 描述:微信分账单号,微信系统返回的唯一标识。
* </pre>
*/
@SerializedName("order_id")
private String orderId;
/**
* <pre>
* 字段名:商户分账单号
* 是否必填:是
* 描述商户系统内部的分账单号在商户系统内部唯一同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@
* </pre>
*/
@SerializedName("out_order_no")
private String outOrderNo;
/**
* <pre>
* 字段名:商户回退单号
* 是否必填:是
* 描述:此回退单号是商户在自己后台生成的一个新的回退单号,在商户后台唯一
* </pre>
*/
@SerializedName("out_return_no")
private String outReturnNo;
/**
* <pre>
* 字段名:微信回退单号
* 是否必填:是
* 描述:微信分账回退单号,微信系统返回的唯一标识
* </pre>
*/
@SerializedName("return_id")
private String returnId;
/**
* <pre>
* 字段名:回退商户号
* 是否必填:是
* 描述:分账回退的出资商户,只能对原分账请求中成功分给商户接收方进行回退
* </pre>
*/
@SerializedName("return_mchid")
private String returnMchid;
/**
* <pre>
* 字段名:回退金额
* 是否必填:是
* 描述:需要从分账接收方回退的金额,单位为分,只能为整数,不能超过原始分账单分出给该接收方的金额
* </pre>
*/
private Long amount;
/**
* <pre>
* 字段名:回退描述
* 是否必填:是
* 描述: 分账回退的原因描述
* </pre>
*/
private String description;
/**
* <pre>
* 字段名:分账结果
* 是否必填:是
* 描述:
* 如果请求返回为处理中,则商户可以通过调用回退结果查询接口获取请求的最终处理结果。
* 如果查询到回退结果在处理中,请勿变更商户回退单号,使用相同的参数再次发起分账回退,否则会出现资金风险。
* 在处理中状态的回退单如果5天没有成功会因为超时被设置为已失败。
* PROCESSING处理中
* SUCCESS已成功
* FAILED已失败
* </pre>
*/
@SerializedName("result")
private String result;
/**
* <pre>
* 字段名:失败原因
* 是否必填:是
* 描述:失败原因。包含以下枚举值:
* ACCOUNT_ABNORMAL : 分账接收方账户异常
* TIME_OUT_CLOSED : 超时关单
* </pre>
*/
@SerializedName("fail_reason")
private String failReason;
/**
* <pre>
* 字段名:分账回退创建时间
* 是否必填:是
* 描述遵循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年5月20日 13点29分35秒。
* </pre>
*/
@SerializedName("create_time")
private String createTime;
/**
* <pre>
* 字段名:分账回退完成时间
* 是否必填:是
* 描述遵循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年5月20日 13点29分35秒。
* </pre>
*/
@SerializedName("finish_time")
private String finishTime;
}

View File

@@ -0,0 +1,54 @@
package com.github.binarywang.wxpay.bean.profitsharingV3;
import com.google.gson.annotations.SerializedName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* 微信V3接口
* 解冻剩余资金API请求实体
*
* @author pg
* @date 2021-6-25
*/
@Data
@Builder(builderMethodName = "newBuilder")
@NoArgsConstructor
@AllArgsConstructor
public class ProfitSharingUnfreezeRequest implements Serializable {
private static final long serialVersionUID = 6835471990040104843L;
/**
* <pre>
* 字段名:微信订单号
* 是否必填:是
* 描述:微信支付订单号
* </pre>
*/
@SerializedName("transaction_id")
private String transactionId;
/**
* <pre>
* 字段名:商户分账单号
* 是否必填:是
* 描述商户系统内部的分账单号在商户系统内部唯一同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@
* </pre>
*/
@SerializedName("out_order_no")
private String outOrderNo;
/**
* <pre>
* 字段名:分账描述
* 是否必填:是
* 描述: 分账的原因描述,分账账单中需要体现
* </pre>
*/
@SerializedName("description")
private String description;
}

View File

@@ -0,0 +1,162 @@
package com.github.binarywang.wxpay.bean.profitsharingV3;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import java.io.Serializable;
/**
* 微信V3接口
* 解冻剩余资金API返回实体
*
* @author pg
* @date 2021-6-25
*/
@Data
public class ProfitSharingUnfreezeResult implements Serializable {
private static final long serialVersionUID = 5053171678880645337L;
/**
* <pre>
* 字段名:微信订单号
* 是否必填:是
* 描述:微信支付订单号
* </pre>
*/
@SerializedName("transaction_id")
private String transactionId;
/**
* <pre>
* 字段名:商户分账单号
* 是否必填:是
* 描述商户系统内部的分账单号在商户系统内部唯一同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@
* </pre>
*/
@SerializedName("out_order_no")
private String outOrderNo;
/**
* <pre>
* 字段名:微信分账单号
* 是否必填:是
* 描述:微信分账单号,微信系统返回的唯一标识。
* </pre>
*/
@SerializedName("order_id")
private String orderId;
/**
* <pre>
* 字段名:分账单状态
* 是否必填:是
* 描述分账单状态每个接收方的分账结果请查看receivers中的result字段枚举值
* 1、PROCESSING处理中
* 2、FINISHED分账完成
* </pre>
*/
@SerializedName("state")
private String state;
@Data
public static class Receiver implements Serializable {
private static final long serialVersionUID = 4240983048700956806L;
/**
* <pre>
* 字段名:分账接收方类型
* 是否必填:是
* 描述:
* 1、MERCHANT_ID商户号
* 2、PERSONAL_OPENID个人openid由父商户APPID转换得到
* </pre>
*/
@SerializedName("type")
private String type;
/**
* <pre>
* 字段名:分账接收方帐号
* 是否必填:是
* 描述:
* 1、分账接收方类型为MERCHANT_ID时分账接收方账号为商户号
* 2、分账接收方类型为PERSONAL_OPENID时分账接收方账号为个人openid
* </pre>
*/
@SerializedName("account")
private String account;
/**
* <pre>
* 字段名:分账金额
* 是否必填:是
* 描述: 分账金额,单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额
* </pre>
*/
@SerializedName("amount")
private Long amount;
/**
* <pre>
* 字段名:分账描述
* 是否必填:是
* 描述: 分账的原因描述,分账账单中需要体现
* </pre>
*/
@SerializedName("description")
private String description;
/**
* <pre>
* 字段名:分账结果
* 是否必填:是
* 描述:
* 1、PENDING待分账
* 2、SUCCESS分账成功
* 3、CLOSED已关闭
* </pre>
*/
@SerializedName("result")
private String result;
/**
* <pre>
* 字段名:分账失败原因
* 是否必填:是
* 描述:枚举值:
* 1、PENDING待分账
* 2、SUCCESS分账成功
* 3、CLOSED已关闭
* </pre>
*/
@SerializedName("fail_reason")
private String failReason;
/**
* <pre>
* 字段名:分账创建时间
* 是否必填:是
* 描述遵循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年5月20日 13点29分35秒。
* </pre>
*/
@SerializedName("create_time")
private String createTime;
/**
* <pre>
* 字段名:分账完成时间
* 是否必填:是
* 描述遵循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年5月20日 13点29分35秒。
* </pre>
*/
@SerializedName("finish_time")
private String finishTime;
}
}

View File

@@ -0,0 +1,39 @@
package com.github.binarywang.wxpay.bean.profitsharingV3;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import java.io.Serializable;
/**
* 微信V3接口
* 查询剩余待分金额API返回实体
*
* @author pg
* @date 2021-6-25
*/
@Data
public class ProfitSharingUnsplitResult implements Serializable {
private static final long serialVersionUID = -7025255772409082288L;
/**
* <pre>
* 字段名:微信订单号
* 是否必填:是
* 描述:微信支付订单号
* </pre>
*/
@SerializedName("transaction_id")
private String transactionId;
/**
* <pre>
* 字段名:订单剩余待分金额
* 是否必填:是
* 描述:订单剩余待分金额,整数,单元为分
* </pre>
*/
@SerializedName("unsplit_amount")
private String unsplitAmount;
}