diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/ReceiverType.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/ReceiverType.java new file mode 100644 index 0000000..6c1c8be --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/ReceiverType.java @@ -0,0 +1,23 @@ +package cn.felord.payment.wechat.enumeration; + + +/** + * 分账接收方类型 + * + * @author n1 + * @since 2021/5/31 17:47 + */ +public enum ReceiverType { + /** + * 商户号 + */ + MERCHANT_ID, + /** + * 个人openid(由父商户APPID转换得到) + */ + PERSONAL_OPENID, + /** + * 个人sub_openid(由子商户APPID转换得到),服务商模式 + */ + PERSONAL_SUB_OPENID +} \ No newline at end of file diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java index c4ea443..b21734d 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/enumeration/WechatPayV3Type.java @@ -496,6 +496,7 @@ public enum WechatPayV3Type { /** * 查询转账明细电子回单受理结果API. * 请求方式同{@link WechatPayV3Type#BATCH_TRANSFER_ELECTRONIC}不同 + * * @since 1.0.11.RELEASES */ BATCH_TRANSFER_ELECTRONIC_DETAIL(HttpMethod.GET, "%s/v3/transfer-detail/electronic-receipts"), @@ -510,7 +511,8 @@ public enum WechatPayV3Type { * * @since 1.0.11.RELEASES */ - BATCH_TRANSFER_FUND_DAY_BALANCE(HttpMethod.GET, "%s/v3/merchant/fund/dayendbalance/{account_type}"), /** + BATCH_TRANSFER_FUND_DAY_BALANCE(HttpMethod.GET, "%s/v3/merchant/fund/dayendbalance/{account_type}"), + /** * 商户银行来账查询API * * @since 1.0.11.RELEASES @@ -565,7 +567,56 @@ public enum WechatPayV3Type { * @since 1.0.0.RELEASE */ TRANSACTION_OUT_TRADE_NO_PARTNER(HttpMethod.GET, "%s/v3/pay/partner/transactions/out-trade-no/{out_trade_no}"), - ; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + /** + * 请求分账API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_ORDERS(HttpMethod.POST, "%s/v3/profitsharing/orders"), + /** + * 查询分账结果API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_ORDERS_RESULT(HttpMethod.GET, "%s/v3/profitsharing/orders/{out_order_no}"), + /** + * 请求分账回退API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_RETURN_ORDERS(HttpMethod.POST, "%s/v3/profitsharing/return-orders"), + /** + * 查询分账回退结果API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_RETURN_ORDERS_RESULT(HttpMethod.GET, "%s/v3/profitsharing/return-orders"), + /** + * 解冻剩余资金API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_ORDERS_UNFREEZE(HttpMethod.POST, "%s/v3/profitsharing/orders/unfreeze"), + /** + * 查询剩余待分金额API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_AMOUNTS(HttpMethod.GET, "%s/v3/profitsharing/transactions/{transaction_id}/amounts"), + /** + * 添加分账接收方API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_RECEIVERS_ADD(HttpMethod.POST, "%s/v3/profitsharing/receivers/add"), + /** + * 删除分账接收方API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_RECEIVERS_DELETE(HttpMethod.POST, "%s/v3/profitsharing/receivers/add"); /** * The Pattern. * diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v2/WechatAllocationApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v2/WechatAllocationApi.java index 6c815ca..e7c050b 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v2/WechatAllocationApi.java +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v2/WechatAllocationApi.java @@ -36,6 +36,7 @@ import java.util.List; * 微信支付分账 *
*
+ * @author felord.cn
* @since 1.0.10.RELEASE
*/
@Slf4j
@@ -72,20 +73,20 @@ public class WechatAllocationApi {
*/
@SneakyThrows
public JsonNode profitSharing(ProfitSharingModel profitSharingModel) {
- ProfitSharingSModel profitSharingSModel = new ProfitSharingSModel();
+ ProfitSharingSModel model = new ProfitSharingSModel();
List
* 受理转账明细电子回单接口,商户通过该接口可以申请受理转账明细单电子回单服务。
*
- * 返回的下载链接可调用{@link this#downloadBillResponse(String, String)}下载文件
+ * 返回的下载链接可调用{@link #downloadBillResponse(String, String)}下载文件
*
* @param params the params
* @return the wechat response entity
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java
index f6789a8..604abed 100644
--- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayCallback.java
@@ -29,6 +29,7 @@ import cn.felord.payment.wechat.v3.model.payscore.PayScoreConsumer;
import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserConfirmConsumeData;
import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserPaidConsumeData;
import cn.felord.payment.wechat.v3.model.payscore.PayScoreUserPermissionConsumeData;
+import cn.felord.payment.wechat.v3.model.profitsharing.ProfitsharingConsumeData;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationFeature;
@@ -39,7 +40,6 @@ import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Assert;
-import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
@@ -73,8 +73,8 @@ public class WechatPayCallback {
static {
MAPPER.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
.setSerializationInclusion(JsonInclude.Include.NON_NULL)
- .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,false)
- .configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT,true)
+ .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
+ .configure(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT, true)
.registerModule(new JavaTimeModule());
}
@@ -92,7 +92,7 @@ public class WechatPayCallback {
/**
- * 微信支付分账回调.
+ * 微信支付分账V2回调.
*
* @param params the params
* @param consumeDataConsumer the consume data consumer
@@ -100,14 +100,11 @@ public class WechatPayCallback {
* @since 1.0.10.RELEASE
*/
@SneakyThrows
- public Map
+ * 微信订单支付成功后,商户发起分账请求,将结算后的资金分到分账接收方
+ *
+ * 注意:
+ *
+ * 发起分账请求后,可调用此接口查询分账结果
+ *
+ * 注意:
+ *
+ * 如果订单已经分账,在退款时,可以先调此接口,将已分账的资金从分账接收方的账户回退给分账方,再发起退款
+ *
+ * 注意:
+ *
+ * 商户需要核实回退结果,可调用此接口查询回退结果
+ *
+ * 注意:
+ *
+ * 不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给特约商户
+ *
+ * 注意:
+ *
+ * 可调用此接口查询订单剩余待分金额
+ *
+ * @param transactionId the transaction id
+ * @return the wechat response entity
+ */
+ public WechatResponseEntity
+ * 商户发起添加分账接收方请求,建立分账接收方列表。后续可通过发起分账请求,将分账方商户结算后的资金,分到该分账接收方
+ *
+ * @param addReceiversParams the add receivers params
+ * @return wechat response entity
+ */
+ public WechatResponseEntity
+ * 商户发起删除分账接收方请求。删除后,不支持将分账方商户结算后的资金,分到该分账接收方
+ *
+ * @param delReceiversParams the del receivers params
+ * @return the wechat response entity
+ */
+ public WechatResponseEntity
+ * 分账接收方类型是{@code MERCHANT_ID}时,是商户全称(必传),当商户是小微商户或个体户时,是开户人姓名 分账接收方类型是{@code PERSONAL_OPENID}时,是个人姓名(选传,传则校验)
+ *
+ * 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。
+ * 只能是数字、大小写字母_-|*@
+ */
+ private String outOrderNo;
+ /**
+ * 分账接收方列表,选填
+ *
+ * 可以设置出资商户作为分账接受方,最多可有50个分账接收方
+ */
+ private List
+ *
+ * 直连模式分账发起和出资商户
+ */
+ private String mchid;
+
+ /**
+ * 微信订单号.
+ *
+ * 微信支付订单号
+ */
+ private String transactionId;
+
+ /**
+ * 微信分账/回退单号.
+ */
+ private String orderId;
+
+ /**
+ * 商户分账/回退单号.
+ *
+ * 分账方系统内部的分账/回退单号
+ */
+ private String outOrderNo;
+
+ /**
+ * 分账接收方.
+ *
+ * 分账接收方对象
+ */
+ private List
+ * Rfc3339标准
+ */
+ @JsonFormat(pattern = "yyyy-MM-dd'T'HH:mm:ssXXX", timezone = "GMT+8")
+ private LocalDateTime successTime;
+
+}
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/QueryOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/QueryOrderParams.java
new file mode 100644
index 0000000..8a25740
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/QueryOrderParams.java
@@ -0,0 +1,21 @@
+package cn.felord.payment.wechat.v3.model.profitsharing;
+
+import lombok.Data;
+
+/**
+ * 查询分账结果API-请求参数
+ *
+ * @author felord.cn
+ * @since 1.0.11.RELEASE
+ */
+@Data
+public class QueryOrderParams {
+ /**
+ * 商户分账单号,必填
+ */
+ private String outOrderNo;
+ /**
+ * 微信订单号,必填
+ */
+ private String transactionId;
+}
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/QueryReturnOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/QueryReturnOrderParams.java
new file mode 100644
index 0000000..182e72e
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/QueryReturnOrderParams.java
@@ -0,0 +1,21 @@
+package cn.felord.payment.wechat.v3.model.profitsharing;
+
+import lombok.Data;
+
+/**
+ * 查询分账回退结果API-请求参数
+ *
+ * @author felord.cn
+ * @since 1.0.11.RELEASE
+ */
+@Data
+public class QueryReturnOrderParams {
+ /**
+ * 商户回退单号,必填
+ */
+ private String outReturnNo;
+ /**
+ * 商户分账单号,必填
+ */
+ private String outOrderNo;
+}
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/Receiver.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/Receiver.java
new file mode 100644
index 0000000..3e9432b
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/Receiver.java
@@ -0,0 +1,44 @@
+package cn.felord.payment.wechat.v3.model.profitsharing;
+
+import cn.felord.payment.wechat.enumeration.ReceiverType;
+import lombok.Data;
+
+/**
+ * 分账接收方信息
+ *
+ * @author felord.cn
+ * @since 1.0.11.RELEASE
+ */
+@Data
+public class Receiver {
+ /**
+ * 分账接收方类型,必填
+ */
+ private ReceiverType type;
+ /**
+ * 分账接收方帐号,必填
+ */
+ private String account;
+ /**
+ * 分账个人接收方姓名,选填
+ *
+ * 在接收方类型为个人的时可选填,若有值,会检查与 name 是否实名匹配,不匹配会拒绝分账请求
+ *
+ * 单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额
+ */
+ private Integer amount;
+ /**
+ * 分账的原因描述,必填。分账账单中需要体现
+ */
+ private String description;
+}
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ReturnOrdersParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ReturnOrdersParams.java
new file mode 100644
index 0000000..981c3f2
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ReturnOrdersParams.java
@@ -0,0 +1,41 @@
+package cn.felord.payment.wechat.v3.model.profitsharing;
+
+import lombok.Data;
+
+/**
+ * 请求分账回退API-请求参数
+ *
+ * @author felord.cn
+ * @since 1.0.11.RELEASE
+ */
+@Data
+public class ReturnOrdersParams {
+ /**
+ * 微信分账单号,同{@link #outOrderNo} 二选一
+ */
+ private String orderId;
+ /**
+ * 商户分账单号,同{@link #orderId} 二选一
+ */
+ private String outOrderNo;
+ /**
+ * 商户回退单号,必填
+ */
+ private String outReturnNo;
+ /**
+ * 回退商户号,必填
+ *
+ * 分账回退的出资商户,只能对原分账请求中成功分给商户接收方进行回退
+ */
+ private String returnMchid;
+ /**
+ * 回退金额,必填
+ *
+ * 需要从分账接收方回退的金额,单位为分,只能为整数,不能超过原始分账单分出给该接收方的金额
+ */
+ private Integer amount;
+ /**
+ * 回退描述,必填
+ */
+ private String description;
+}
\ No newline at end of file
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/UnfreezeParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/UnfreezeParams.java
new file mode 100644
index 0000000..a53f789
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/UnfreezeParams.java
@@ -0,0 +1,25 @@
+package cn.felord.payment.wechat.v3.model.profitsharing;
+
+import lombok.Data;
+
+/**
+ * 解冻剩余资金API-请求参数
+ *
+ * @author felord.cn
+ * @since 1.0.11.RELEASE
+ */
+@Data
+public class UnfreezeParams {
+ /**
+ * 微信订单号,必填
+ */
+ private String transactionId;
+ /**
+ * 商户分账单号,必填
+ */
+ private String outOrderNo;
+ /**
+ * 分账描述,必填
+ */
+ private String description;
+}
\ No newline at end of file
+ *
+ *
+ * @param profitSharingOrder the profit sharing order
+ * @return the wechat response entity
+ */
+ public WechatResponseEntity
+ *
+ *
+ * @param queryOrderParams the query order params
+ * @return the wechat response entity
+ */
+ public WechatResponseEntity
+ *
+ *
+ * @param returnOrdersParams the return orders params
+ * @return the wechat response entity
+ */
+ public WechatResponseEntity
+ *
+ *
+ * @param queryReturnOrderParams the query return order params
+ * @return the wechat response entity
+ */
+ public WechatResponseEntity
+ *
+ *
+ * @param unfreezeParams the unfreeze params
+ * @return the wechat response entity
+ */
+ public WechatResponseEntity
+ *
+ */
+ private String name;
+ /**
+ * 与分账方的关系类型,必填
+ */
+ private RelationType relationType;
+ /**
+ * 自定义的分账关系,选填
+ */
+ private String customRelation;
+
+ /**
+ * 子商户与接收方的关系
+ */
+ public enum RelationType {
+ /**
+ * 门店.
+ */
+ STORE,
+ /**
+ * 员工.
+ */
+ STAFF,
+ /**
+ * 店主.
+ */
+ STORE_OWNER,
+ /**
+ * 合作伙伴.
+ */
+ PARTNER,
+ /**
+ * 总部.
+ */
+ HEADQUARTER,
+ /**
+ * 品牌方.
+ */
+ BRAND,
+ /**
+ * 分销商.
+ */
+ DISTRIBUTOR,
+ /**
+ * 用户.
+ */
+ USER,
+ /**
+ * 供应商.
+ */
+ SUPPLIER,
+ /**
+ * 自定义.
+ */
+ CUSTOM
+ }
+}
\ No newline at end of file
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/DelReceiversParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/DelReceiversParams.java
new file mode 100644
index 0000000..e306eb7
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/DelReceiversParams.java
@@ -0,0 +1,26 @@
+package cn.felord.payment.wechat.v3.model.profitsharing;
+
+import cn.felord.payment.wechat.enumeration.ReceiverType;
+import lombok.Data;
+
+/**
+ * 删除分账接收方API-请求参数
+ *
+ * @author felord.cn
+ * @since 1.0.11.RELEASE
+ */
+@Data
+public class DelReceiversParams {
+ /**
+ * 应用ID,自动注入
+ */
+ private String appid;
+ /**
+ * 分账接收方类型,必填
+ */
+ private ReceiverType type;
+ /**
+ * 分账接收方帐号,必填
+ */
+ private String account;
+}
\ No newline at end of file
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ProfitSharingOrder.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ProfitSharingOrder.java
new file mode 100644
index 0000000..4dd55fe
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ProfitSharingOrder.java
@@ -0,0 +1,45 @@
+package cn.felord.payment.wechat.v3.model.profitsharing;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 直连商户请求分账API-请求参数
+ *
+ * @author felord.cn
+ * @since 1.0.11.RELEASE
+ */
+@Data
+public class ProfitSharingOrder {
+ /**
+ * 应用ID,自动注入
+ */
+ private String appid;
+ /**
+ * 微信订单号,必填
+ */
+ private String transactionId;
+ /**
+ * 商户分账单号,必填
+ *
+ *
+ */
+ private Boolean unfreezeUnsplit;
+}
\ No newline at end of file
diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ProfitsharingConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ProfitsharingConsumeData.java
new file mode 100644
index 0000000..3b65f51
--- /dev/null
+++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ProfitsharingConsumeData.java
@@ -0,0 +1,78 @@
+/*
+ *
+ * Copyright 2019-2020 felord.cn
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * Website:
+ * https://felord.cn
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package cn.felord.payment.wechat.v3.model.profitsharing;
+
+import cn.felord.payment.wechat.v2.model.allocation.Receiver;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 微信支付分账通知参数
+ *
+ * @author felord.cn
+ * @since 1.0.11.RELEASE
+ */
+@Data
+public class ProfitsharingConsumeData {
+
+ /**
+ * 直连商户号.
+ *
+ *
+ */
+ private String name;
+ /**
+ * 分账金额,必填
+ *