1
0
mirror of synced 2025-12-12 17:54:20 +08:00

🆕 【微信支付】新增 平台收付通(补差)的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);
}
/**
* 校验通知签名
*