🆕 【微信支付】新增 平台收付通(补差)的3个接口方法

This commit is contained in:
YT 2024-08-30 11:25:18 +00:00 committed by Binary Wang
parent 43d270ac78
commit 80a35f30b9
8 changed files with 693 additions and 0 deletions

View File

@ -0,0 +1,61 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* add by 306932545@qq.com
* 取消补差请求对象
* <pre>
* https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_3.shtml
* </pre>
*/
@Data
@NoArgsConstructor
public class SubsidiesCancelRequest implements Serializable {
/**
* <pre>
* 字段名二级商户号
* 变量名sub_mchid
* 是否必填
* 类型string32
* 描述
* 补差的电商平台二级商户填写微信支付分配的商户号
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名微信订单号
* 变量名transaction_id
* 是否必填
* 类型string64
* 描述
* 微信支付订单号
* 示例值 4208450740201411110007820472
* </pre>
*/
@SerializedName(value = "transaction_id")
private String transactionId;
/**
* <pre>
* 字段名取消补差描述
* 变量名description
* 是否必填
* 类型string80
* 描述
* 取消补差描述查询的时候原样带回
* 示例值订单退款
* </pre>
*/
@SerializedName(value = "description")
private String description;
}

View File

@ -0,0 +1,83 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.*;
import java.io.Serializable;
/**
* add by 306932545@qq.com
* 取消补差返回对象
* <pre>
* https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_1.shtml
* </pre>
*/
@Data
@Builder
@ToString
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class SubsidiesCancelResult implements Serializable {
private static final long serialVersionUID = 5008480977464421822L;
/**
* <pre>
* 字段名二级商户号
* 变量名sub_mchid
* 是否必填
* 类型string32
* 描述
* 补差的电商平台二级商户填写微信支付分配的商户号
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名微信订单号
* 变量名transaction_id
* 是否必填
* 类型string64
* 描述
* 微信支付订单号
* 示例值 4208450740201411110007820472
* </pre>
*/
@SerializedName(value = "transaction_id")
private String transactionId;
/**
* <pre>
* 字段名取消补差结果
* 变量名result
* 是否必填
* 类型string16
* 描述
* 取消补差结果枚举值
* SUCCESS成功
* FAIL失败
* 示例值SUCCESS
* </pre>
*/
@SerializedName(value = "result")
private String result;
/**
* <pre>
* 字段名取消补差描述
* 变量名description
* 是否必填
* 类型string80
* 描述
* 取消补差描述
* 示例值订单退款
* </pre>
*/
@SerializedName(value = "description")
private String description;
}

View File

@ -0,0 +1,105 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* add by 306932545@qq.com
* 请求补差请求对象
* <pre>
* https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_1.shtml
* </pre>
*/
@Data
@NoArgsConstructor
public class SubsidiesCreateRequest implements Serializable {
/**
* <pre>
* 字段名二级商户号
* 变量名sub_mchid
* 是否必填
* 类型string32
* 描述
* 补差的电商平台二级商户填写微信支付分配的商户号
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名微信订单号
* 变量名transaction_id
* 是否必填
* 类型string64
* 描述
* 微信支付订单号
* 示例值 4208450740201411110007820472
* </pre>
*/
@SerializedName(value = "transaction_id")
private String transactionId;
/**
* <pre>
* 字段名商户补差单号
* 变量名out_subsidy_no
* 是否必填
* 类型string64
* 描述
* 商户系统内部的补差单号在商户系统内部唯一同一补差单号多次请求等同一次
* 示例值P20150806125347
* </pre>
*/
@SerializedName(value = "out_subsidy_no")
private String outSubsidyNo;
/**
* <pre>
* 字段名补差金额
* 变量名amount
* 是否必填
* 类型int64
* 描述
* 补差金额单位为分只能为整数不能超过下单时候的最大补差金额
* 注意单笔订单最高补差金额为10000元
* 示例值10
* </pre>
*/
@SerializedName(value = "amount")
private Integer amount;
/**
* <pre>
* 字段名补差描述
* 变量名description
* 是否必填
* 类型string80
* 描述
* 补差备注描述查询的时候原样带回
* 示例值测试备注
* </pre>
*/
@SerializedName(value = "description")
private String description;
/**
* <pre>
* 字段名微信退款单号
* 变量名refund_id
* 是否必填
* 类型string32
* 描述
* 微信退款单号微信支付系统退款返回的唯一标识当补差金额小于下单时候的金额该字段必填
* 示例值3008450740201411110007820472
* </pre>
*/
@SerializedName(value = "refund_id")
private String refundId;
}

View File

@ -0,0 +1,126 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.*;
import java.io.Serializable;
/**
* add by 306932545@qq.com
* 请求补差返回对象
* <pre>
* https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_1.shtml
* </pre>
*/
@Data
@Builder
@ToString
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class SubsidiesCreateResult implements Serializable {
private static final long serialVersionUID = 5008480977464421822L;
/**
* <pre>
* 字段名二级商户号
* 变量名sub_mchid
* 是否必填
* 类型string32
* 描述
* 补差的电商平台二级商户填写微信支付分配的商户号
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名微信订单号
* 变量名transaction_id
* 是否必填
* 类型string64
* 描述
* 微信支付订单号
* 示例值 4208450740201411110007820472
* </pre>
*/
@SerializedName(value = "transaction_id")
private String transactionId;
/**
* <pre>
* 字段名微信补差单号
* 变量名subsidy_id
* 是否必填
* 类型string64
* 描述
* 微信补差单号微信支付系统返回的唯一标识
* 示例值 3008450740201411110007820472
* </pre>
*/
@SerializedName(value = "subsidy_id")
private String subsidyId;
/**
* <pre>
* 字段名补差描述
* 变量名description
* 是否必填
* 类型string80
* 描述
* 补差备注描述查询的时候原样带回
* 示例值测试备注
* </pre>
*/
@SerializedName(value = "description")
private String description;
/**
* <pre>
* 字段名补差金额
* 变量名amount
* 是否必填
* 类型int64
* 描述
* 补差金额单位为分只能为整数不能超过下单时候的最大补差金额
* 注意单笔订单最高补差金额为10000元
* 示例值10
* </pre>
*/
@SerializedName(value = "amount")
private Integer amount;
/**
* <pre>
* 字段名补差单结果
* 变量名result
* 是否必填
* 类型string16
* 描述
* 补差单状态枚举值
* SUCCESS补差成功
* FAIL补差失败
* REFUND已全额回退
* 示例值SUCCESS
* </pre>
*/
@SerializedName(value = "result")
private String result;
/**
* <pre>
* 字段名补差完成时间
* 变量名success_time
* 是否必填
* 类型string32
* 描述
* 补贴完成时间遵循rfc3339标准格式格式为yyyy-MM-DDTHH:mm:ss:sss+TIMEZONEyyyy-MM-DD表示年月日T出现在字符串中表示time元素的开头HH:mm:ss:sss表示时分秒毫秒TIMEZONE表示时区+08:00表示东八区时间领先UTC 8小时即北京时间例如2015-05-20T13:29:35+08:00表示北京时间2015年5月20日13点29分35秒
* 示例值 2015-05-20T13:29:35.120+08:00
* </pre>
*/
@SerializedName(value = "success_time")
private String successTime;
}

View File

@ -0,0 +1,105 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
/**
* add by 306932545@qq.com
* 请求补差回退API-请求对象
* <pre>
* https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_2.shtml
* </pre>
*/
@Data
@NoArgsConstructor
public class SubsidiesReturnRequest implements Serializable {
/**
* <pre>
* 字段名二级商户号
* 变量名sub_mchid
* 是否必填
* 类型string32
* 描述
* 补差的电商平台二级商户填写微信支付分配的商户号
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名微信订单号
* 变量名transaction_id
* 是否必填
* 类型string64
* 描述
* 微信支付订单号
* 示例值 4208450740201411110007820472
* </pre>
*/
@SerializedName(value = "transaction_id")
private String transactionId;
/**
* <pre>
* 字段名商户补差回退单号
* 变量名out_order_no
* 是否必填
* 类型string64
* 描述
* 原发起补差请求时使用的商户系统内部的补差单号
* 示例值P20150806125346
* </pre>
*/
@SerializedName(value = "out_order_no")
private String outOrderNo;
/**
* <pre>
* 字段名补差金额
* 变量名amount
* 是否必填
* 类型int64
* 描述
* 补差金额单位为分只能为整数不能超过下单时候的最大补差金额
* 注意单笔订单最高补差金额为10000元
* 示例值10
* </pre>
*/
@SerializedName(value = "amount")
private Integer amount;
/**
* <pre>
* 字段名补差描述
* 变量名description
* 是否必填
* 类型string80
* 描述
* 补差备注描述查询的时候原样带回
* 示例值测试备注
* </pre>
*/
@SerializedName(value = "description")
private String description;
/**
* <pre>
* 字段名微信退款单号
* 变量名refund_id
* 是否必填
* 类型string64
* 描述
* 微信退款单号微信支付系统退款返回的唯一标识
* 用户零钱账户异常无法在线发起退款时此字段可以不传其他情况下必传
* 示例值3008450740201411110007820472
* </pre>
*/
@SerializedName(value = "refund_id")
private String refundId;
}

View File

@ -0,0 +1,155 @@
package com.github.binarywang.wxpay.bean.ecommerce;
import com.google.gson.annotations.SerializedName;
import lombok.*;
import java.io.Serializable;
/**
* add by 306932545@qq.com
* 请求补差返回对象
* <pre>
* https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_2.shtml
* </pre>
*/
@Data
@Builder
@ToString
@NoArgsConstructor(access = AccessLevel.PRIVATE)
@AllArgsConstructor(access = AccessLevel.PRIVATE)
public class SubsidiesReturnResult implements Serializable {
private static final long serialVersionUID = 5008480977464421822L;
/**
* <pre>
* 字段名二级商户号
* 变量名sub_mchid
* 是否必填
* 类型string32
* 描述
* 补差的电商平台二级商户填写微信支付分配的商户号
* 示例值1900000109
* </pre>
*/
@SerializedName(value = "sub_mchid")
private String subMchid;
/**
* <pre>
* 字段名微信订单号
* 变量名transaction_id
* 是否必填
* 类型string64
* 描述
* 微信支付订单号
* 示例值 4208450740201411110007820472
* </pre>
*/
@SerializedName(value = "transaction_id")
private String transactionId;
/**
* <pre>
* 字段名微信补差单号
* 变量名subsidy_refund_id
* 是否必填
* 类型string64
* 描述
* 微信补差单号微信支付系统返回的唯一标识
* 示例值 3008450740201411110007820472
* </pre>
*/
@SerializedName(value = "subsidy_refund_id")
private String subsidyRefundId;
/**
* <pre>
* 字段名微信退款单号
* 变量名refund_id
* 是否必填
* 类型string64
* 描述
* 微信退款单号微信支付系统退款返回的唯一标识
* 示例值 3008450740201411110007820472
* </pre>
*/
@SerializedName(value = "refund_id")
private String refundId;
/**
* <pre>
* 字段名商户补差回退单号
* 变量名out_order_no
* 是否必填
* 类型string64
* 描述
* 商户系统内部的补差回退单号在商户系统内部唯一只能是数字大小写字母_-|*@ 同一补差回退单号多次请求等同一次
* 示例值P20150806125346
* </pre>
*/
@SerializedName(value = "out_order_no")
private String outOrderNo;
/**
* <pre>
* 字段名补差描述
* 变量名description
* 是否必填
* 类型string80
* 描述
* 补差备注描述查询的时候原样带回
* 示例值测试备注
* </pre>
*/
@SerializedName(value = "description")
private String description;
/**
* <pre>
* 字段名补差金额
* 变量名amount
* 是否必填
* 类型int64
* 描述
* 补差金额单位为分只能为整数不能超过下单时候的最大补差金额
* 注意单笔订单最高补差金额为10000元
* 示例值10
* </pre>
*/
@SerializedName(value = "amount")
private Integer amount;
/**
* <pre>
* 字段名补差单结果
* 变量名result
* 是否必填
* 类型string16
* 描述
* 补差单状态枚举值
* SUCCESS补差成功
* FAIL补差失败
* REFUND已全额回退
* 示例值SUCCESS
* </pre>
*/
@SerializedName(value = "result")
private String result;
/**
* <pre>
* 字段名补差完成时间
* 变量名success_time
* 是否必填
* 类型string32
* 描述
* 补贴完成时间遵循rfc3339标准格式格式为yyyy-MM-DDTHH:mm:ss:sss+TIMEZONEyyyy-MM-DD表示年月日T出现在字符串中表示time元素的开头HH:mm:ss:sss表示时分秒毫秒TIMEZONE表示时区+08:00表示东八区时间领先UTC 8小时即北京时间例如2015-05-20T13:29:35+08:00表示北京时间2015年5月20日13点29分35秒
* 示例值 2015-05-20T13:29:35.120+08:00
* </pre>
*/
@SerializedName(value = "success_time")
private String successTime;
}

View File

@ -498,4 +498,41 @@ public interface EcommerceService {
*/
InputStream downloadBill(String url) throws WxPayException;
/**
* <pre>
* 请求补差API
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_1.shtml
* </pre>
*
* @param subsidiesCreateRequest 请求补差
* @return 返回数据 return SubsidiesCreateResult
* @throws WxPayException the wx pay exception
*/
SubsidiesCreateResult subsidiesCreate(SubsidiesCreateRequest subsidiesCreateRequest) throws WxPayException;
/**
* <pre>
* 请求补差回退API
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_2.shtml
* </pre>
*
* @param subsidiesReturnRequest 请求补差
* @return 返回数据 return SubsidiesReturnResult
* @throws WxPayException the wx pay exception
*/
SubsidiesReturnResult subsidiesReturn(SubsidiesReturnRequest subsidiesReturnRequest) throws WxPayException;
/**
* <pre>
* 取消补差API
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter7_5_3.shtml
* </pre>
*
* @param subsidiesCancelRequest 请求补差
* @return 返回数据 return SubsidiesCancelResult
* @throws WxPayException the wx pay exception
*/
SubsidiesCancelResult subsidiesCancel(SubsidiesCancelRequest subsidiesCancelRequest) throws WxPayException;
}

View File

@ -374,6 +374,27 @@ public class EcommerceServiceImpl implements EcommerceService {
return this.payService.downloadV3(url);
}
@Override
public SubsidiesCreateResult subsidiesCreate(SubsidiesCreateRequest subsidiesCreateRequest) throws WxPayException{
String url = String.format("%s/v3/ecommerce/subsidies/create", this.payService.getPayBaseUrl());
String response = this.payService.postV3(url, GSON.toJson(subsidiesCreateRequest));
return GSON.fromJson(response, SubsidiesCreateResult.class);
}
@Override
public SubsidiesReturnResult subsidiesReturn(SubsidiesReturnRequest subsidiesReturnRequest) throws WxPayException{
String url = String.format("%s/v3/ecommerce/subsidies/return", this.payService.getPayBaseUrl());
String response = this.payService.postV3(url, GSON.toJson(subsidiesReturnRequest));
return GSON.fromJson(response, SubsidiesReturnResult.class);
}
@Override
public SubsidiesCancelResult subsidiesCancel(SubsidiesCancelRequest subsidiesCancelRequest) throws WxPayException{
String url = String.format("%s/v3/ecommerce/subsidies/cancel", this.payService.getPayBaseUrl());
String response = this.payService.postV3(url, GSON.toJson(subsidiesCancelRequest));
return GSON.fromJson(response, SubsidiesCancelResult.class);
}
/**
* 校验通知签名
*