mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-07-18 04:33:17 +08:00
Merge remote-tracking branch 'wechat/develop' into develop
This commit is contained in:
commit
e56289f4c8
@ -0,0 +1,120 @@
|
||||
package com.github.binarywang.wxpay.bean.ecommerce;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 请求分账回退
|
||||
* * <pre>
|
||||
* * 文档地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/profitsharing/chapter3_3.shtml
|
||||
* * </pre>
|
||||
* @author: f00lish
|
||||
* @date: 2020/09/14
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class ReturnOrdersRequest implements Serializable {
|
||||
private static final long serialVersionUID = -3674823388136221959L;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:二级商户号
|
||||
* 变量名:sub_mchid
|
||||
* 是否必填:是
|
||||
* 类型:string(32)
|
||||
* 描述:
|
||||
* 分账出资的电商平台二级商户,填写微信支付分配的商户号。
|
||||
* 示例值:1900000109
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "sub_mchid")
|
||||
private String subMchid;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:微信分账单号
|
||||
* 变量名:order_id
|
||||
* 是否必填:与out_order_no二选一
|
||||
* 类型:string(64)
|
||||
* 描述:
|
||||
* 微信分账单号,微信系统返回的唯一标识。微信分账单号和商户分账单号二选一填写。
|
||||
* 示例值:3008450740201411110007820472
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "order_id")
|
||||
private String orderId;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:商户分账单号
|
||||
* 变量名:out_order_no
|
||||
* 是否必填:与order_id二选一
|
||||
* 类型:string(64)
|
||||
* 描述:
|
||||
* 商户系统内部的分账单号,在商户系统内部唯一(单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号多次请求等同一次。
|
||||
* 示例值:P20150806125346
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "out_order_no")
|
||||
private String outOrderNo;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:商户回退单号
|
||||
* 变量名:out_return_no
|
||||
* 是否必填:是
|
||||
* 类型:string(64)
|
||||
* 描述:
|
||||
* 此回退单号是商户在自己后台生成的一个新的回退单号,在商户后台唯一。
|
||||
* 示例值:P20150806125346
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "out_return_no")
|
||||
private String outReturnNo;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:回退商户号
|
||||
* 变量名:return_mchid
|
||||
* 是否必填:是
|
||||
* 类型:string(32)
|
||||
* 描述:
|
||||
* 只能对原分账请求中成功分给商户接收方进行回退。
|
||||
* 示例值:86693852
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "return_mchid")
|
||||
private String returnMchid;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:回退金额
|
||||
* 变量名:amount
|
||||
* 是否必填:是
|
||||
* 类型:int
|
||||
* 描述:
|
||||
* 需要从分账接收方回退的金额,单位为分,只能为整数,不能超过原始分账单分出给该接收方的金额。
|
||||
* 示例值:10
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "amount")
|
||||
private Integer amount;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:回退描述
|
||||
* 变量名:description
|
||||
* 是否必填:是
|
||||
* 类型:string(80)
|
||||
* 描述:
|
||||
* 分账回退的原因描述
|
||||
* 示例值:分账回退
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "description")
|
||||
private String description;
|
||||
}
|
@ -0,0 +1,168 @@
|
||||
package com.github.binarywang.wxpay.bean.ecommerce;
|
||||
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.*;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
* @author: f00lish
|
||||
* @date: 2020/09/14
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
@AllArgsConstructor(access = AccessLevel.PRIVATE)
|
||||
public class ReturnOrdersResult implements Serializable {
|
||||
private static final long serialVersionUID = 2296020044225854203L;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:二级商户号
|
||||
* 变量名:sub_mchid
|
||||
* 是否必填:是
|
||||
* 类型:string(32)
|
||||
* 描述:
|
||||
* 分账出资的电商平台二级商户,填写微信支付分配的商户号。
|
||||
* 示例值:1900000109
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "sub_mchid")
|
||||
private String subMchid;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:微信分账单号
|
||||
* 变量名:order_id
|
||||
* 是否必填:与out_order_no二选一
|
||||
* 类型:string(64)
|
||||
* 描述:
|
||||
* 微信分账单号,微信系统返回的唯一标识。微信分账单号和商户分账单号二选一填写。
|
||||
* 示例值:3008450740201411110007820472
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "order_id")
|
||||
private String orderId;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:商户分账单号
|
||||
* 变量名:out_order_no
|
||||
* 是否必填:与order_id二选一
|
||||
* 类型:string(64)
|
||||
* 描述:
|
||||
* 商户系统内部的分账单号,在商户系统内部唯一(单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号多次请求等同一次。
|
||||
* 示例值:P20150806125346
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "out_order_no")
|
||||
private String outOrderNo;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:商户回退单号
|
||||
* 变量名:out_return_no
|
||||
* 是否必填:是
|
||||
* 类型:string(64)
|
||||
* 描述:
|
||||
* 此回退单号是商户在自己后台生成的一个新的回退单号,在商户后台唯一。
|
||||
* 示例值:P20150806125346
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "out_return_no")
|
||||
private String R20190516001;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:回退商户号
|
||||
* 变量名:return_mchid
|
||||
* 是否必填:是
|
||||
* 类型:string(32)
|
||||
* 描述:
|
||||
* 只能对原分账请求中成功分给商户接收方进行回退。
|
||||
* 示例值:86693852
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "return_mchid")
|
||||
private String returnMchid;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:回退金额
|
||||
* 变量名:amount
|
||||
* 是否必填:是
|
||||
* 类型:int
|
||||
* 描述:
|
||||
* 需要从分账接收方回退的金额,单位为分,只能为整数,不能超过原始分账单分出给该接收方的金额。
|
||||
* 示例值:10
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "amount")
|
||||
private Integer amount;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:微信回退单号
|
||||
* 变量名:return_no
|
||||
* 是否必填:是
|
||||
* 类型:string(64)
|
||||
* 描述:
|
||||
* 微信分账回退单号,微信系统返回的唯一标识。
|
||||
* 示例值:3008450740201411110007820472
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "return_no")
|
||||
private String returnNo;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:回退结果
|
||||
* 变量名:result
|
||||
* 是否必填:是
|
||||
* 类型:string(32)
|
||||
* 描述:
|
||||
* 如果请求返回为处理中,则商户可以通过调用回退结果查询接口获取请求的最终处理结果,枚举值:
|
||||
* PROCESSING:处理中
|
||||
* SUCCESS:已成功
|
||||
* FAIL:已失败
|
||||
* 注意:如果返回为处理中,请勿变更商户回退单号,使用相同的参数再次发起分账回退,否则会出现资金风险 在处理中状态的回退单如果5天没有成功,会因为超时被设置为已失败
|
||||
* 示例值:SUCCESS
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "result")
|
||||
private String result;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:失败原因
|
||||
* 变量名:fail_reason
|
||||
* 是否必填:否
|
||||
* 类型:string(32)
|
||||
* 描述:
|
||||
* 回退失败的原因,此字段仅回退结果为FAIL时存在,枚举值:
|
||||
* ACCOUNT_ABNORMAL:分账接收方账户异常
|
||||
* TIME_OUT_CLOSED::超时关单
|
||||
* 示例值:TIME_OUT_CLOSED
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "fail_reason")
|
||||
private String failReason;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 字段名:完成时间
|
||||
* 变量名:finish_time
|
||||
* 是否必填:是
|
||||
* 类型:string(64)
|
||||
* 描述:
|
||||
* 分账回退完成时间,遵循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秒。
|
||||
* 示例值:2015-05-20T13:29:35.120+08:00
|
||||
* </pre>
|
||||
*/
|
||||
@SerializedName(value = "finish_time")
|
||||
private Date finishTime;
|
||||
|
||||
}
|
@ -201,4 +201,16 @@ public interface EcommerceService {
|
||||
*/
|
||||
ProfitSharingResult profitSharing(ProfitSharingRequest request) throws WxPayException;
|
||||
|
||||
/**
|
||||
* <pre>
|
||||
* 请求分账回退API
|
||||
* 文档地址: https://pay.weixin.qq.com/wiki/doc/apiv3/wxpay/ecommerce/profitsharing/chapter3_3.shtml
|
||||
* </pre>
|
||||
*
|
||||
* @param request 分账回退请求
|
||||
* @return 返回数据 return orders result
|
||||
* @throws WxPayException the wx pay exception
|
||||
*/
|
||||
ReturnOrdersResult returnOrders(ReturnOrdersRequest request) throws WxPayException;
|
||||
|
||||
}
|
||||
|
@ -155,6 +155,13 @@ public class EcommerceServiceImpl implements EcommerceService {
|
||||
return GSON.fromJson(response, ProfitSharingResult.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public ReturnOrdersResult returnOrders(ReturnOrdersRequest request) throws WxPayException {
|
||||
String url = String.format("%s/v3/ecommerce/profitsharing/returnorders", this.payService.getPayBaseUrl());
|
||||
String response = this.payService.postV3(url, GSON.toJson(request));
|
||||
return GSON.fromJson(response, ReturnOrdersResult.class);
|
||||
}
|
||||
|
||||
private boolean verifyNotifySign(SignatureHeader header, String data) {
|
||||
String beforeSign = String.format("%s\n%s\n%s\n",
|
||||
header.getTimeStamp(),
|
||||
|
Loading…
Reference in New Issue
Block a user