mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-04-05 17:38:05 +08:00
✨ #1010 增加微信分账相关接口
* 微信单次分账接口 * - 微信多次分账 - 微信完结分账 - 添加分账接受方 - 删除分账接受方 - 查询分账结果【未能完成单元测试,微信返回签名失败】 - 分账回退【未能完成单元测试,使用真实数据返回“参数不正确”,我对比官方文档除了缺少`sub_mch_id`和`sub_appid`之外其他相同,当我随便填了一个商户id的时候,提示“回退方没有开通分账回退功能”】 - 回退结果查询【未能完成单元测试,因分账回退无法进行,模拟数据返回”记录不存在“】
This commit is contained in:
parent
81df397536
commit
d184ff8303
@ -0,0 +1,70 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
|
||||||
|
import com.github.binarywang.wxpay.constant.WxPayConstants;
|
||||||
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.*;
|
||||||
|
import me.chanjar.weixin.common.annotation.Required;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Wang GuangXin 2019/10/23 14:02
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Builder(builderMethodName = "newBuilder")
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class ProfitSharingFinishRequest extends BaseWxPayRequest {
|
||||||
|
|
||||||
|
private static final long serialVersionUID = -4265779954583596627L;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:微信订单号.
|
||||||
|
* 变量名:transaction_id
|
||||||
|
* 是否必填:是
|
||||||
|
* String(32)
|
||||||
|
* 示例值:4208450740201411110007820472
|
||||||
|
* 描述:微信支付订单号
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("transaction_id")
|
||||||
|
@Required
|
||||||
|
private String transactionId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:商户分账单号.
|
||||||
|
* 变量名:out_order_no
|
||||||
|
* 是否必填:是
|
||||||
|
* String(64)
|
||||||
|
* 示例值:P20150806125346
|
||||||
|
* 描述:商户系统内部的分账单号,在商户系统内部唯一(单次分账、多次分账、完结分账应使用不同的商户分账单号),同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("out_order_no")
|
||||||
|
@Required
|
||||||
|
private String outOrderNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:分账完结描述.
|
||||||
|
* 变量名:out_order_no
|
||||||
|
* 是否必填:是
|
||||||
|
* String(80)
|
||||||
|
* 示例值:分账已完成
|
||||||
|
* 描述:分账完结的原因描述
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("description")
|
||||||
|
@Required
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkConstraints() throws WxPayException {
|
||||||
|
this.setSignType(WxPayConstants.SignType.HMAC_SHA256);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
|
||||||
|
import com.github.binarywang.wxpay.constant.WxPayConstants;
|
||||||
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.*;
|
||||||
|
import me.chanjar.weixin.common.annotation.Required;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Wang GuangXin 2019/10/22 15:44
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Builder(builderMethodName = "newBuilder")
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class ProfitSharingQueryRequest extends BaseWxPayRequest {
|
||||||
|
private static final long serialVersionUID = 3566332883053157102L;
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:微信支付订单号.
|
||||||
|
* 变量名:transaction_id
|
||||||
|
* 是否必填:是
|
||||||
|
* String(32)
|
||||||
|
* 示例值:4208450740201411110007820472
|
||||||
|
* 描述:微信支付订单号
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("transaction_id")
|
||||||
|
@Required
|
||||||
|
private String transactionId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:商户分账单号.
|
||||||
|
* 变量名:out_order_no
|
||||||
|
* 是否必填:是
|
||||||
|
* String(64)
|
||||||
|
* 示例值:P20150806125346
|
||||||
|
* 描述:查询分账结果,输入申请分账时的商户分账单号; 查询分账完结的执行结果,输入发起分账完结时的商户分账单号
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("out_order_no")
|
||||||
|
@Required
|
||||||
|
private String outOrderNo;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkConstraints() throws WxPayException {
|
||||||
|
this.setSignType(WxPayConstants.SignType.HMAC_SHA256);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,114 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
|
||||||
|
import com.google.gson.FieldNamingPolicy;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Wang GuangXin 2019/10/22 15:51
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class ProfitSharingQueryResult extends BaseWxPayResult {
|
||||||
|
private static final long serialVersionUID = 2548673608075775067L;
|
||||||
|
/**
|
||||||
|
* 微信订单号
|
||||||
|
*/
|
||||||
|
@XStreamAlias("transaction_id")
|
||||||
|
private String transactionId;
|
||||||
|
/**
|
||||||
|
* 商户分账单号
|
||||||
|
*/
|
||||||
|
@XStreamAlias("out_order_no")
|
||||||
|
private String outOrderNo;
|
||||||
|
/**
|
||||||
|
* 微信分账单号
|
||||||
|
*/
|
||||||
|
@XStreamAlias("orderId")
|
||||||
|
private String orderId;
|
||||||
|
/**
|
||||||
|
* 分账单状态
|
||||||
|
*/
|
||||||
|
@XStreamAlias("status")
|
||||||
|
private String status;
|
||||||
|
/**
|
||||||
|
* 关单原因
|
||||||
|
*/
|
||||||
|
@XStreamAlias("close_reason")
|
||||||
|
private String closeReason;
|
||||||
|
/**
|
||||||
|
* 分账接收方列表
|
||||||
|
*/
|
||||||
|
@XStreamAlias("receivers")
|
||||||
|
private String receivers;
|
||||||
|
/**
|
||||||
|
* 分账金额
|
||||||
|
*/
|
||||||
|
@XStreamAlias("amount")
|
||||||
|
private Integer amount;
|
||||||
|
/**
|
||||||
|
* 分账描述
|
||||||
|
*/
|
||||||
|
@XStreamAlias("description")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
public ProfitSharingQueryResult.Receivers formatReceivers() {
|
||||||
|
GsonBuilder gsonBuilder = new GsonBuilder();
|
||||||
|
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
|
||||||
|
Gson gson = gsonBuilder.create();
|
||||||
|
return gson.fromJson(receivers, Receivers.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Receivers {
|
||||||
|
/**
|
||||||
|
* 分账接收方类型
|
||||||
|
*/
|
||||||
|
private String type;
|
||||||
|
/**
|
||||||
|
* 分账接收方帐号
|
||||||
|
*/
|
||||||
|
private String account;
|
||||||
|
/**
|
||||||
|
* 分账金额
|
||||||
|
*/
|
||||||
|
private Integer amount;
|
||||||
|
/**
|
||||||
|
* 分账描述
|
||||||
|
*/
|
||||||
|
private String description;
|
||||||
|
/**
|
||||||
|
* 分账结果
|
||||||
|
*/
|
||||||
|
private String result;
|
||||||
|
/**
|
||||||
|
* 分账完成时间
|
||||||
|
*/
|
||||||
|
private String finishTime;
|
||||||
|
/**
|
||||||
|
* 分账失败原因
|
||||||
|
*/
|
||||||
|
private String failReason;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "Receivers{" +
|
||||||
|
"type='" + type + '\'' +
|
||||||
|
", account='" + account + '\'' +
|
||||||
|
", amount=" + amount +
|
||||||
|
", description='" + description + '\'' +
|
||||||
|
", result='" + result + '\'' +
|
||||||
|
", finishTime='" + finishTime + '\'' +
|
||||||
|
", failReason='" + failReason + '\'' +
|
||||||
|
'}';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,47 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
|
||||||
|
import com.github.binarywang.wxpay.constant.WxPayConstants;
|
||||||
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.*;
|
||||||
|
import me.chanjar.weixin.common.annotation.Required;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 添加/删除分账接受方请求对象
|
||||||
|
*
|
||||||
|
* @author Wang GuangXin 2019/10/22 13:41
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Builder(builderMethodName = "newBuilder")
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class ProfitSharingReceiverRequest extends BaseWxPayRequest {
|
||||||
|
private static final long serialVersionUID = 2628263563539120323L;
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:分账接收方.
|
||||||
|
* 变量名:receiver
|
||||||
|
* 是否必填:是
|
||||||
|
* String(2048)
|
||||||
|
* 示例值:{
|
||||||
|
* "type": "MERCHANT_ID",
|
||||||
|
* "account": "190001001",
|
||||||
|
* "name": "示例商户全称",
|
||||||
|
* "relation_type": "STORE_OWNER"
|
||||||
|
* }
|
||||||
|
* 描述:分账接收方对象,json格式
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("receiver")
|
||||||
|
@Required
|
||||||
|
private String receiver;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkConstraints() throws WxPayException {
|
||||||
|
this.setSignType(WxPayConstants.SignType.HMAC_SHA256);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,25 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
|
||||||
|
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Wang GuangXin 2019/10/22 14:54
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class ProfitSharingReceiverResult extends BaseWxPayResult {
|
||||||
|
private static final long serialVersionUID = 876204163877798066L;
|
||||||
|
/**
|
||||||
|
* 分账接收方.
|
||||||
|
*/
|
||||||
|
@XStreamAlias("receiver")
|
||||||
|
private String receiver;
|
||||||
|
}
|
@ -17,7 +17,7 @@ import me.chanjar.weixin.common.annotation.Required;
|
|||||||
@NoArgsConstructor
|
@NoArgsConstructor
|
||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
@XStreamAlias("xml")
|
@XStreamAlias("xml")
|
||||||
public class ProfitsharingRequest extends BaseWxPayRequest {
|
public class ProfitSharingRequest extends BaseWxPayRequest {
|
||||||
private static final long serialVersionUID = 212049937430575842L;
|
private static final long serialVersionUID = 212049937430575842L;
|
||||||
|
|
||||||
/**
|
/**
|
@ -0,0 +1,72 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
|
||||||
|
import com.github.binarywang.wxpay.constant.WxPayConstants;
|
||||||
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.*;
|
||||||
|
import me.chanjar.weixin.common.annotation.Required;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Wang GuangXin 2019/10/23 15:32
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Builder(builderMethodName = "newBuilder")
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class ProfitSharingReturnQueryRequest extends BaseWxPayRequest {
|
||||||
|
private static final long serialVersionUID = -8838464614726086009L;
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:微信分账单号.
|
||||||
|
* 变量名:order_id
|
||||||
|
* 是否必填:二选一
|
||||||
|
* string(64)
|
||||||
|
* 示例值:3008450740201411110007820472
|
||||||
|
* 描述:原发起分账请求时,微信返回的微信分账单号,与商户分账单号一一对应。
|
||||||
|
* 微信分账单号与商户分账单号二选一填写
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("order_id")
|
||||||
|
private String orderId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:商户分账单号.
|
||||||
|
* 变量名:out_order_no
|
||||||
|
* 是否必填:二选一
|
||||||
|
* Sstring(64)
|
||||||
|
* 示例值:P20180806125346
|
||||||
|
* 描述:原发起分账请求时使用的商户后台系统的分账单号。
|
||||||
|
* 微信分账单号与商户分账单号二选一填写
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("out_order_no")
|
||||||
|
private String outOrderNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:商户回退单号.
|
||||||
|
* 变量名:out_return_no
|
||||||
|
* 是否必填:是
|
||||||
|
* string(64)
|
||||||
|
* 示例值:R20190516001
|
||||||
|
* 描述:调用回退接口提供的商户系统内部的回退单号
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Required
|
||||||
|
@XStreamAlias("out_return_no")
|
||||||
|
private String outReturnNo;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkConstraints() throws WxPayException {
|
||||||
|
if (StringUtils.isBlank(orderId) && StringUtils.isBlank(outOrderNo)) {
|
||||||
|
throw new WxPayException("order_id 和 outOrderNo 必须有一个存在");
|
||||||
|
}
|
||||||
|
this.setSignType(WxPayConstants.SignType.HMAC_SHA256);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,133 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest;
|
||||||
|
import com.github.binarywang.wxpay.constant.WxPayConstants;
|
||||||
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.*;
|
||||||
|
import me.chanjar.weixin.common.annotation.Required;
|
||||||
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Wang GuangXin 2019/10/23 14:27
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@Builder(builderMethodName = "newBuilder")
|
||||||
|
@NoArgsConstructor
|
||||||
|
@AllArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class ProfitSharingReturnRequest extends BaseWxPayRequest {
|
||||||
|
private static final long serialVersionUID = 5926280401474809744L;
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:微信分账单号.
|
||||||
|
* 变量名:order_id
|
||||||
|
* 是否必填:二选一
|
||||||
|
* string(64)
|
||||||
|
* 示例值:3008450740201411110007820472
|
||||||
|
* 描述:原发起分账请求时,微信返回的微信分账单号,与商户分账单号一一对应。
|
||||||
|
* 微信分账单号与商户分账单号二选一填写
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("order_id")
|
||||||
|
private String orderId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:商户分账单号.
|
||||||
|
* 变量名:out_order_no
|
||||||
|
* 是否必填:二选一
|
||||||
|
* Sstring(64)
|
||||||
|
* 示例值:P20180806125346
|
||||||
|
* 描述:原发起分账请求时使用的商户后台系统的分账单号。
|
||||||
|
* 微信分账单号与商户分账单号二选一填写
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("out_order_no")
|
||||||
|
private String outOrderNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:商户回退单号.
|
||||||
|
* 变量名:out_return_no
|
||||||
|
* 是否必填:是
|
||||||
|
* string(64)
|
||||||
|
* 示例值:R20190516001
|
||||||
|
* 描述:此回退单号是商户在自己后台生成的一个新的回退单号,在商户后台唯一
|
||||||
|
* 只能是数字、大小写字母_-|*@ ,同一回退单号多次请求等同一次。
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Required
|
||||||
|
@XStreamAlias("out_return_no")
|
||||||
|
private String outReturnNo;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:回退方类型.
|
||||||
|
* 变量名:return_account_type
|
||||||
|
* 是否必填:是
|
||||||
|
* String(32)
|
||||||
|
* 示例值:MERCHANT_ID
|
||||||
|
* 描述:枚举值:
|
||||||
|
* MERCHANT_ID:商户ID
|
||||||
|
* 暂时只支持从商户接收方回退分账金额
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Required
|
||||||
|
@XStreamAlias("return_account_type")
|
||||||
|
private String returnAccountType;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:回退方账号.
|
||||||
|
* 变量名:return_account
|
||||||
|
* 是否必填:是
|
||||||
|
* String(64)
|
||||||
|
* 示例值:86693852
|
||||||
|
* 描述:回退方类型是MERCHANT_ID时,填写商户ID
|
||||||
|
* 只能对原分账请求中成功分给商户接收方进行回退
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Required
|
||||||
|
@XStreamAlias("return_account")
|
||||||
|
private String returnAccount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:回退金额.
|
||||||
|
* 变量名:return_amount
|
||||||
|
* 是否必填:是
|
||||||
|
* int
|
||||||
|
* 示例值:888
|
||||||
|
* 描述:需要从分账接收方回退的金额,单位为分,只能为整数,不能超过原始分账单分出给该接收方的金额
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Required
|
||||||
|
@XStreamAlias("return_amount")
|
||||||
|
private Integer returnAmount;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:回退描述.
|
||||||
|
* 变量名:description
|
||||||
|
* 是否必填:是
|
||||||
|
* String(80)
|
||||||
|
* 示例值:用户退款
|
||||||
|
* 描述:分账回退的原因描述
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@Required
|
||||||
|
@XStreamAlias("description")
|
||||||
|
private String description;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void checkConstraints() throws WxPayException {
|
||||||
|
if (StringUtils.isBlank(orderId) && StringUtils.isBlank(outOrderNo)) {
|
||||||
|
throw new WxPayException("order_id 和 outOrderNo 必须有一个存在");
|
||||||
|
}
|
||||||
|
this.setSignType(WxPayConstants.SignType.HMAC_SHA256);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,74 @@
|
|||||||
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
|
||||||
|
import com.thoughtworks.xstream.annotations.XStreamAlias;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Wang GuangXin 2019/10/23 14:41
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
@NoArgsConstructor
|
||||||
|
@XStreamAlias("xml")
|
||||||
|
public class ProfitSharingReturnResult extends BaseWxPayResult {
|
||||||
|
private static final long serialVersionUID = 718554909816994568L;
|
||||||
|
/**
|
||||||
|
* 微信分账单号
|
||||||
|
*/
|
||||||
|
@XStreamAlias("order_id")
|
||||||
|
private String orderId;
|
||||||
|
/**
|
||||||
|
* 商户分账单号
|
||||||
|
*/
|
||||||
|
@XStreamAlias("out_order_no")
|
||||||
|
private String outOrderNo;
|
||||||
|
/**
|
||||||
|
* 商户回退单号
|
||||||
|
*/
|
||||||
|
@XStreamAlias("out_return_no")
|
||||||
|
private String outReturnNo;
|
||||||
|
/**
|
||||||
|
* 微信回退单号
|
||||||
|
*/
|
||||||
|
@XStreamAlias("return_no")
|
||||||
|
private String returnNo;
|
||||||
|
/**
|
||||||
|
* 回退方类型
|
||||||
|
*/
|
||||||
|
@XStreamAlias("return_account_type")
|
||||||
|
private String returnAccountType;
|
||||||
|
/**
|
||||||
|
* 回退方账号
|
||||||
|
*/
|
||||||
|
@XStreamAlias("return_account")
|
||||||
|
private String returnAccount;
|
||||||
|
/**
|
||||||
|
* 回退金额
|
||||||
|
*/
|
||||||
|
@XStreamAlias("return_amount")
|
||||||
|
private Integer returnAmount;
|
||||||
|
/**
|
||||||
|
* 回退描述
|
||||||
|
*/
|
||||||
|
@XStreamAlias("description")
|
||||||
|
private String description;
|
||||||
|
/**
|
||||||
|
* 回退结果
|
||||||
|
*/
|
||||||
|
@XStreamAlias("result")
|
||||||
|
private String result;
|
||||||
|
/**
|
||||||
|
* 失败原因
|
||||||
|
*/
|
||||||
|
@XStreamAlias("fail_reason")
|
||||||
|
private String failReason;
|
||||||
|
/**
|
||||||
|
* 完成时间
|
||||||
|
*/
|
||||||
|
@XStreamAlias("finish_time")
|
||||||
|
private String finishTime;
|
||||||
|
}
|
@ -1,5 +1,9 @@
|
|||||||
package com.github.binarywang.wxpay.bean.profitsharing;
|
package com.github.binarywang.wxpay.bean.profitsharing;
|
||||||
|
|
||||||
|
import com.google.gson.FieldNamingPolicy;
|
||||||
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -11,8 +15,13 @@ public class Receiver implements Serializable {
|
|||||||
private String account;
|
private String account;
|
||||||
private Integer amount;
|
private Integer amount;
|
||||||
private String description;
|
private String description;
|
||||||
|
private String name;
|
||||||
|
private String relationType;
|
||||||
|
private String customRelation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 此构造函数用于单次分账
|
||||||
|
*
|
||||||
* @param type MERCHANT_ID:商户ID
|
* @param type MERCHANT_ID:商户ID
|
||||||
* PERSONAL_WECHATID:个人微信号PERSONAL_OPENID:个人openid(由父商户APPID转换得到)PERSONAL_SUB_OPENID: 个人sub_openid(由子商户APPID转换得到)
|
* PERSONAL_WECHATID:个人微信号PERSONAL_OPENID:个人openid(由父商户APPID转换得到)PERSONAL_SUB_OPENID: 个人sub_openid(由子商户APPID转换得到)
|
||||||
* @param account 类型是MERCHANT_ID时,是商户ID
|
* @param account 类型是MERCHANT_ID时,是商户ID
|
||||||
@ -29,6 +38,66 @@ public class Receiver implements Serializable {
|
|||||||
this.description = description;
|
this.description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 此构造用于添加分账方
|
||||||
|
*
|
||||||
|
* @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 name 分账接收方类型是MERCHANT_ID时,是商户全称(必传)
|
||||||
|
* 分账接收方类型是PERSONAL_NAME 时,是个人姓名(必传)
|
||||||
|
* 分账接收方类型是PERSONAL_OPENID时,是个人姓名(选传,传则校验)
|
||||||
|
* 分账接收方类型是PERSONAL_SUB_OPENID时,是个人姓名(选传,传则校验)
|
||||||
|
* @param relationType 子商户与接收方的关系。
|
||||||
|
* 本字段值为枚举:
|
||||||
|
* SERVICE_PROVIDER:服务商
|
||||||
|
* STORE:门店
|
||||||
|
* STAFF:员工
|
||||||
|
* STORE_OWNER:店主
|
||||||
|
* PARTNER:合作伙伴
|
||||||
|
* HEADQUARTER:总部
|
||||||
|
* BRAND:品牌方
|
||||||
|
* DISTRIBUTOR:分销商
|
||||||
|
* USER:用户
|
||||||
|
* SUPPLIER:供应商
|
||||||
|
* CUSTOM:自定义
|
||||||
|
* @param customRelation 子商户与接收方具体的关系,本字段最多10个字。
|
||||||
|
* 当字段relation_type的值为CUSTOM时,本字段必填
|
||||||
|
* 当字段relation_type的值不为CUSTOM时,本字段无需填写
|
||||||
|
*/
|
||||||
|
public Receiver(String type, String account, String name, String relationType, String customRelation) {
|
||||||
|
this.type = type;
|
||||||
|
this.account = account;
|
||||||
|
this.name = name;
|
||||||
|
this.relationType = relationType;
|
||||||
|
this.customRelation = customRelation;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用于删除分账接受方
|
||||||
|
*
|
||||||
|
* @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
|
||||||
|
*/
|
||||||
|
public Receiver(String type, String account) {
|
||||||
|
this.type = type;
|
||||||
|
this.account = account;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toJSONString() {
|
||||||
|
GsonBuilder gsonBuilder = new GsonBuilder();
|
||||||
|
gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES);
|
||||||
|
Gson gson = gsonBuilder.create();
|
||||||
|
return gson.toJson(this);
|
||||||
|
}
|
||||||
|
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
@ -44,4 +113,16 @@ public class Receiver implements Serializable {
|
|||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRelationType() {
|
||||||
|
return relationType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getCustomRelation() {
|
||||||
|
return customRelation;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -346,6 +346,17 @@ public class WxPayUnifiedOrderRequest extends BaseWxPayRequest {
|
|||||||
*/
|
*/
|
||||||
@XStreamAlias("fingerprint")
|
@XStreamAlias("fingerprint")
|
||||||
private String fingerprint;
|
private String fingerprint;
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 字段名:是否指定服务商分账.
|
||||||
|
* 变量名:profit_sharing
|
||||||
|
* 是否必填:否
|
||||||
|
* 详情:Y-是,需要分账 N-否,不分账,字母要求大写,不传默认不分账
|
||||||
|
* 详细参考 https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=24_3&index=3
|
||||||
|
* </pre>
|
||||||
|
*/
|
||||||
|
@XStreamAlias("profit_sharing")
|
||||||
|
private String profitSharing;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 如果配置中已经设置,可以不设置值.
|
* 如果配置中已经设置,可以不设置值.
|
||||||
|
@ -1,26 +1,136 @@
|
|||||||
package com.github.binarywang.wxpay.service;
|
package com.github.binarywang.wxpay.service;
|
||||||
|
|
||||||
import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingResult;
|
import com.github.binarywang.wxpay.bean.profitsharing.*;
|
||||||
import com.github.binarywang.wxpay.bean.profitsharing.ProfitsharingRequest;
|
|
||||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
|
|
||||||
|
import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingResult;
|
||||||
|
import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingRequest;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 注意:微信最高分账比例为30%
|
||||||
|
* 可多次分账到同一个人,但是依然不能超过30%
|
||||||
|
*
|
||||||
* @author Wang GuangXin 2019/10/22 10:05
|
* @author Wang GuangXin 2019/10/22 10:05
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public interface ProfitSharingService {
|
public interface ProfitSharingService {
|
||||||
/**
|
/**
|
||||||
|
* <pre>
|
||||||
* 单次分账请求按照传入的分账接收方账号和资金进行分账,同时会将订单剩余的待分账金额解冻给特约商户。故操作成功后,订单不能再进行分账,也不能进行分账完结。
|
* 单次分账请求按照传入的分账接收方账号和资金进行分账,同时会将订单剩余的待分账金额解冻给特约商户。故操作成功后,订单不能再进行分账,也不能进行分账完结。
|
||||||
* <p>
|
|
||||||
* 接口频率:30QPS
|
* 接口频率:30QPS
|
||||||
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_1&index=1
|
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_1&index=1
|
||||||
* 接口链接:https://api.mch.weixin.qq.com/secapi/pay/profitsharing
|
* 接口链接:https://api.mch.weixin.qq.com/secapi/pay/profitsharing
|
||||||
|
* </pre>
|
||||||
*
|
*
|
||||||
* @param profitsharingRequest
|
* @param profitsharingRequest
|
||||||
* @return
|
* @return
|
||||||
* @throws WxPayException the wx pay exception
|
* @throws WxPayException the wx pay exception
|
||||||
*/
|
*/
|
||||||
ProfitSharingResult profitsharing(ProfitsharingRequest profitsharingRequest) throws WxPayException;
|
ProfitSharingResult profitsharing(ProfitSharingRequest profitsharingRequest) throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 微信订单支付成功后,服务商代子商户发起分账请求,将结算后的钱分到分账接收方。多次分账请求仅会按照传入的分账接收方进行分账,不会对剩余的金额进行任何操作。故操作成功后,在待分账金额不等于零时,订单依旧能够再次进行分账。
|
||||||
|
* 多次分账,可以将本商户作为分账接收方直接传入,实现释放资金给本商户的功能
|
||||||
|
* 对同一笔订单最多能发起20次多次分账请求
|
||||||
|
* 接口频率:30QPS
|
||||||
|
* </pre>
|
||||||
|
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_6&index=2
|
||||||
|
* 接口链接:https://api.mch.weixin.qq.com/secapi/pay/multiprofitsharing
|
||||||
|
*
|
||||||
|
* @param profitsharingRequest
|
||||||
|
* @return
|
||||||
|
* @throws WxPayException the wx pay exception
|
||||||
|
*/
|
||||||
|
ProfitSharingResult multiprofitsharing(ProfitSharingRequest profitsharingRequest) throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 1、不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给特约商户
|
||||||
|
* 2、调用多次分账接口后,需要解冻剩余资金时,调用本接口将剩余的分账金额全部解冻给特约商户
|
||||||
|
* 3、已调用请求单次分账后,剩余待分账金额为零,不需要再调用此接口。
|
||||||
|
* 接口频率:30QPS
|
||||||
|
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_5&index=6
|
||||||
|
* 接口链接:https://api.mch.weixin.qq.com/secapi/pay/profitsharingfinish
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param profitSharingFinishRequest
|
||||||
|
* @return
|
||||||
|
* @throws WxPayException the wx pay exception
|
||||||
|
*/
|
||||||
|
ProfitSharingResult profitsharingfinish(ProfitSharingFinishRequest profitSharingFinishRequest) throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 服务商代子商户发起添加分账接收方请求,后续可通过发起分账请求将结算后的钱分到该分账接收方。
|
||||||
|
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_3&index=4
|
||||||
|
* 接口链接:https://api.mch.weixin.qq.com/pay/profitsharingaddreceiver
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param profitSharingReceiverRequest
|
||||||
|
* @return
|
||||||
|
* @throws WxPayException
|
||||||
|
*/
|
||||||
|
ProfitSharingReceiverResult addReceiver(ProfitSharingReceiverRequest profitSharingReceiverRequest) throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* <pre>
|
||||||
|
* 服务商代子商户发起删除分账接收方请求,删除后不支持将结算后的钱分到该分账接收方。
|
||||||
|
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_4&index=5
|
||||||
|
* 接口链接:https://api.mch.weixin.qq.com/pay/profitsharingremovereceiver
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param profitSharingReceiverRequest
|
||||||
|
* @return
|
||||||
|
* @throws WxPayException
|
||||||
|
*/
|
||||||
|
ProfitSharingReceiverResult removeReceiver(ProfitSharingReceiverRequest profitSharingReceiverRequest) throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO:微信返回签名失败
|
||||||
|
* <pre>
|
||||||
|
* 发起分账请求后,可调用此接口查询分账结果;发起分账完结请求后,可调用此接口查询分账完结的执行结果。
|
||||||
|
* 接口频率:80QPS
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param profitSharingReceiverRequest
|
||||||
|
* @return
|
||||||
|
* @throws WxPayException
|
||||||
|
*/
|
||||||
|
ProfitSharingQueryResult profitsharingQuery(ProfitSharingQueryRequest profitSharingReceiverRequest) throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO:这个接口用真实的数据返回【参数不正确】,我对比官方文档除了缺少sub_mch_id,和sub_appid之外其他相同,当我随便填了一个商户id的时候,提示【回退方没有开通分账回退功能】
|
||||||
|
* <pre>
|
||||||
|
* 仅对订单进行退款时,如果订单已经分账,可以先调用此接口将指定的金额从分账接收方(仅限商户类型的分账接收方)回退给特约商户,然后再退款。
|
||||||
|
* 回退以原分账请求为依据,可以对分给分账接收方的金额进行多次回退,只要满足累计回退不超过该请求中分给接收方的金额。
|
||||||
|
* 此接口采用同步处理模式,即在接收到商户请求后,会实时返回处理结果。
|
||||||
|
* 此功能需要接收方在商户平台-交易中心-分账-分账接收设置下,开启同意分账回退后,才能使用。
|
||||||
|
* 接口频率:30QPS
|
||||||
|
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_7&index=7
|
||||||
|
* 接口链接:https://api.mch.weixin.qq.com/secapi/pay/profitsharingreturn
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param profitSharingReturnRequest
|
||||||
|
* @return
|
||||||
|
* @throws WxPayException
|
||||||
|
*/
|
||||||
|
ProfitSharingReturnResult profitsharingReturn(ProfitSharingReturnRequest profitSharingReturnRequest) throws WxPayException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* TODO:因profitsharingReturn接口无法使用,没有办法对这里进行真实的测试,模拟数据这里返回【记录不存在】
|
||||||
|
* <pre>
|
||||||
|
* 商户需要核实回退结果,可调用此接口查询回退结果。
|
||||||
|
* 如果分账回退接口返回状态为处理中,可调用此接口查询回退结果。
|
||||||
|
* 接口频率:30QPS
|
||||||
|
* 文档详见: https://pay.weixin.qq.com/wiki/doc/api/allocation_sl.php?chapter=25_8&index=8
|
||||||
|
* 接口链接:https://api.mch.weixin.qq.com/pay/profitsharingreturnquery
|
||||||
|
* </pre>
|
||||||
|
*
|
||||||
|
* @param profitSharingReturnQueryRequest
|
||||||
|
* @return
|
||||||
|
* @throws WxPayException
|
||||||
|
*/
|
||||||
|
ProfitSharingReturnResult profitsharingReturnQuery(ProfitSharingReturnQueryRequest profitSharingReturnQueryRequest) throws WxPayException;
|
||||||
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package com.github.binarywang.wxpay.service.impl;
|
package com.github.binarywang.wxpay.service.impl;
|
||||||
|
|
||||||
import com.github.binarywang.wxpay.bean.entpay.EntPayResult;
|
import com.github.binarywang.wxpay.bean.profitsharing.*;
|
||||||
import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingResult;
|
import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingResult;
|
||||||
import com.github.binarywang.wxpay.bean.profitsharing.ProfitsharingRequest;
|
import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingRequest;
|
||||||
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
|
import com.github.binarywang.wxpay.bean.result.BaseWxPayResult;
|
||||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||||
import com.github.binarywang.wxpay.service.ProfitSharingService;
|
import com.github.binarywang.wxpay.service.ProfitSharingService;
|
||||||
@ -14,12 +14,13 @@ import com.github.binarywang.wxpay.service.WxPayService;
|
|||||||
*/
|
*/
|
||||||
public class ProfitSharingServiceImpl implements ProfitSharingService {
|
public class ProfitSharingServiceImpl implements ProfitSharingService {
|
||||||
private WxPayService payService;
|
private WxPayService payService;
|
||||||
|
|
||||||
public ProfitSharingServiceImpl(WxPayService payService) {
|
public ProfitSharingServiceImpl(WxPayService payService) {
|
||||||
this.payService = payService;
|
this.payService = payService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ProfitSharingResult profitsharing(ProfitsharingRequest request) throws WxPayException {
|
public ProfitSharingResult profitsharing(ProfitSharingRequest request) throws WxPayException {
|
||||||
request.checkAndSign(this.payService.getConfig());
|
request.checkAndSign(this.payService.getConfig());
|
||||||
String url = this.payService.getPayBaseUrl() + "/secapi/pay/profitsharing";
|
String url = this.payService.getPayBaseUrl() + "/secapi/pay/profitsharing";
|
||||||
|
|
||||||
@ -28,4 +29,82 @@ public class ProfitSharingServiceImpl implements ProfitSharingService {
|
|||||||
result.checkResult(this.payService, request.getSignType(), true);
|
result.checkResult(this.payService, request.getSignType(), true);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProfitSharingResult multiprofitsharing(ProfitSharingRequest request) throws WxPayException {
|
||||||
|
request.checkAndSign(this.payService.getConfig());
|
||||||
|
String url = this.payService.getPayBaseUrl() + "/secapi/pay/multiprofitsharing";
|
||||||
|
|
||||||
|
String responseContent = this.payService.post(url, request.toXML(), true);
|
||||||
|
ProfitSharingResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingResult.class);
|
||||||
|
result.checkResult(this.payService, request.getSignType(), true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProfitSharingResult profitsharingfinish(ProfitSharingFinishRequest request) throws WxPayException {
|
||||||
|
request.checkAndSign(this.payService.getConfig());
|
||||||
|
String url = this.payService.getPayBaseUrl() + "/secapi/pay/profitsharingfinish";
|
||||||
|
|
||||||
|
String responseContent = this.payService.post(url, request.toXML(), true);
|
||||||
|
ProfitSharingResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingResult.class);
|
||||||
|
result.checkResult(this.payService, request.getSignType(), true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProfitSharingReceiverResult addReceiver(ProfitSharingReceiverRequest request) throws WxPayException {
|
||||||
|
request.checkAndSign(this.payService.getConfig());
|
||||||
|
String url = this.payService.getPayBaseUrl() + "/pay/profitsharingaddreceiver";
|
||||||
|
|
||||||
|
String responseContent = this.payService.post(url, request.toXML(), true);
|
||||||
|
ProfitSharingReceiverResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingReceiverResult.class);
|
||||||
|
result.checkResult(this.payService, request.getSignType(), true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProfitSharingReceiverResult removeReceiver(ProfitSharingReceiverRequest request) throws WxPayException {
|
||||||
|
request.checkAndSign(this.payService.getConfig());
|
||||||
|
String url = this.payService.getPayBaseUrl() + "/pay/profitsharingremovereceiver";
|
||||||
|
|
||||||
|
String responseContent = this.payService.post(url, request.toXML(), true);
|
||||||
|
ProfitSharingReceiverResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingReceiverResult.class);
|
||||||
|
result.checkResult(this.payService, request.getSignType(), true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProfitSharingQueryResult profitsharingQuery(ProfitSharingQueryRequest request) throws WxPayException {
|
||||||
|
if (true) throw new WxPayException("暂不支持,微信一直返回签名失败");
|
||||||
|
request.checkAndSign(this.payService.getConfig());
|
||||||
|
String url = this.payService.getPayBaseUrl() + "/pay/profitsharingquery";
|
||||||
|
|
||||||
|
String responseContent = this.payService.post(url, request.toXML(), true);
|
||||||
|
ProfitSharingQueryResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingQueryResult.class);
|
||||||
|
result.checkResult(this.payService, request.getSignType(), true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProfitSharingReturnResult profitsharingReturn(ProfitSharingReturnRequest request) throws WxPayException {
|
||||||
|
request.checkAndSign(this.payService.getConfig());
|
||||||
|
String url = this.payService.getPayBaseUrl() + "/secapi/pay/profitsharingreturn";
|
||||||
|
|
||||||
|
String responseContent = this.payService.post(url, request.toXML(), true);
|
||||||
|
ProfitSharingReturnResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingReturnResult.class);
|
||||||
|
result.checkResult(this.payService, request.getSignType(), true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public ProfitSharingReturnResult profitsharingReturnQuery(ProfitSharingReturnQueryRequest request) throws WxPayException {
|
||||||
|
request.checkAndSign(this.payService.getConfig());
|
||||||
|
String url = this.payService.getPayBaseUrl() + "/pay/profitsharingreturnquery";
|
||||||
|
|
||||||
|
String responseContent = this.payService.post(url, request.toXML(), true);
|
||||||
|
ProfitSharingReturnResult result = BaseWxPayResult.fromXML(responseContent, ProfitSharingReturnResult.class);
|
||||||
|
result.checkResult(this.payService, request.getSignType(), true);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.github.binarywang.wxpay.service.impl;
|
package com.github.binarywang.wxpay.service.impl;
|
||||||
|
|
||||||
import com.github.binarywang.wxpay.bean.profitsharing.ProfitsharingRequest;
|
import com.github.binarywang.wxpay.bean.profitsharing.*;
|
||||||
|
import com.github.binarywang.wxpay.bean.profitsharing.ProfitSharingRequest;
|
||||||
import com.github.binarywang.wxpay.bean.profitsharing.Receiver;
|
import com.github.binarywang.wxpay.bean.profitsharing.Receiver;
|
||||||
import com.github.binarywang.wxpay.bean.profitsharing.ReceiverList;
|
import com.github.binarywang.wxpay.bean.profitsharing.ReceiverList;
|
||||||
import com.github.binarywang.wxpay.constant.WxPayConstants;
|
import com.github.binarywang.wxpay.constant.WxPayConstants;
|
||||||
@ -26,15 +27,105 @@ public class ProfitSharingServiceImplTest {
|
|||||||
ReceiverList instance = ReceiverList.getInstance();
|
ReceiverList instance = ReceiverList.getInstance();
|
||||||
instance.add(new Receiver(WxPayConstants.ReceiverType.PERSONAL_OPENID,
|
instance.add(new Receiver(WxPayConstants.ReceiverType.PERSONAL_OPENID,
|
||||||
"oyOUE5ql4TtzrBg5cVOwxq6tbjOs",
|
"oyOUE5ql4TtzrBg5cVOwxq6tbjOs",
|
||||||
100,
|
20,
|
||||||
"分到用户"));
|
"***"));
|
||||||
ProfitsharingRequest request = ProfitsharingRequest
|
//30000002922019102310811092093
|
||||||
|
ProfitSharingRequest request = ProfitSharingRequest
|
||||||
.newBuilder()
|
.newBuilder()
|
||||||
.outOrderNo("P20150806125346")
|
.outOrderNo("20191023112023031060677")
|
||||||
.transactionId("4208450740201411110007820472")
|
.transactionId("4200000431201910234736634272")
|
||||||
// .receivers("[{\"type\": \"PERSONAL_OPENID\",\"account\":\"oyOUE5ql4TtzrBg5cVOwxq6tbjOs\",\"amount\":100,\"description\": \"分到用户\"}]")
|
|
||||||
.receivers(instance.toJSONString())
|
.receivers(instance.toJSONString())
|
||||||
.build();
|
.build();
|
||||||
this.logger.info(this.payService.getProfitSharingService().profitsharing(request).toString());
|
this.logger.info(this.payService.getProfitSharingService().profitsharing(request).toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testMultiprofitsharing() throws WxPayException {
|
||||||
|
ReceiverList instance = ReceiverList.getInstance();
|
||||||
|
instance.add(new Receiver(WxPayConstants.ReceiverType.MERCHANT_ID,
|
||||||
|
"86693852",
|
||||||
|
1,
|
||||||
|
"***"));
|
||||||
|
ProfitSharingRequest request = ProfitSharingRequest
|
||||||
|
.newBuilder()
|
||||||
|
.outOrderNo("20191023154723316420060")
|
||||||
|
.transactionId("4200000448201910238249687345")//order_id=30000102922019102310821824010
|
||||||
|
.receivers(instance.toJSONString())
|
||||||
|
.build();
|
||||||
|
this.logger.info(this.payService.getProfitSharingService().multiprofitsharing(request).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testProfitsharingFinish() throws WxPayException {
|
||||||
|
ProfitSharingFinishRequest request = ProfitSharingFinishRequest
|
||||||
|
.newBuilder()
|
||||||
|
.outOrderNo("20191023103251431856285")
|
||||||
|
.transactionId("4200000441201910238267278073")
|
||||||
|
.description("分账完成")
|
||||||
|
.build();
|
||||||
|
this.logger.info(this.payService.getProfitSharingService().profitsharingfinish(request).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testAddreceiver() throws WxPayException {
|
||||||
|
Receiver receiver = new Receiver(WxPayConstants.ReceiverType.PERSONAL_OPENID,
|
||||||
|
"oyOUE5ql4TtzrBg5cVOwxq6tbjOs",
|
||||||
|
"***",
|
||||||
|
"STORE_OWNER",
|
||||||
|
null);
|
||||||
|
ProfitSharingReceiverRequest request = ProfitSharingReceiverRequest
|
||||||
|
.newBuilder()
|
||||||
|
.receiver(receiver.toJSONString())
|
||||||
|
.build();
|
||||||
|
this.logger.info(this.payService.getProfitSharingService().addReceiver(request).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testRemoveReceiver() throws WxPayException {
|
||||||
|
Receiver receiver = new Receiver(WxPayConstants.ReceiverType.PERSONAL_OPENID,
|
||||||
|
"oyOUE5ql4TtzrBg5cVOwxq6tbjOs");
|
||||||
|
ProfitSharingReceiverRequest request = ProfitSharingReceiverRequest
|
||||||
|
.newBuilder()
|
||||||
|
.receiver(receiver.toJSONString())
|
||||||
|
.build();
|
||||||
|
this.logger.info(this.payService.getProfitSharingService().removeReceiver(request).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testProfitsharingQuery() throws WxPayException {
|
||||||
|
ProfitSharingQueryRequest request = ProfitSharingQueryRequest
|
||||||
|
.newBuilder()
|
||||||
|
.outOrderNo("20191023112023031060677")
|
||||||
|
.transactionId("4200000431201910234736634272")
|
||||||
|
.build();
|
||||||
|
ProfitSharingQueryResult result = this.payService.getProfitSharingService().profitsharingQuery(request);
|
||||||
|
this.logger.info(result.formatReceivers().toString());
|
||||||
|
this.logger.info(result.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testProfitsharingReturn() throws WxPayException {
|
||||||
|
ProfitSharingReturnRequest request = ProfitSharingReturnRequest
|
||||||
|
.newBuilder()
|
||||||
|
.outOrderNo("20191023154723316420060")
|
||||||
|
.outReturnNo("R2019102315")
|
||||||
|
.returnAccountType("MERCHANT_ID")
|
||||||
|
.returnAccount("86693852")
|
||||||
|
.returnAmount(2)
|
||||||
|
.description("用户退款")
|
||||||
|
.build();
|
||||||
|
this.logger.info(this.payService.getProfitSharingService().profitsharingReturn(request).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testProfitsharingReturnQuery() throws WxPayException {
|
||||||
|
ProfitSharingReturnQueryRequest request = ProfitSharingReturnQueryRequest
|
||||||
|
.newBuilder()
|
||||||
|
.outOrderNo("20191023154723316420060")
|
||||||
|
.outReturnNo("R2019102315")
|
||||||
|
.build();
|
||||||
|
this.logger.info(this.payService.getProfitSharingService().profitsharingReturnQuery(request).toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user