diff --git a/docs/quick_start.md b/docs/quick_start.md index f44643c..c61df5f 100644 --- a/docs/quick_start.md +++ b/docs/quick_start.md @@ -92,7 +92,7 @@ wechat: ### 支付宝 -在Spring Boot项目中的`application.yaml`中配置`ali.pay.v1`相关参数。 +在Spring Boot项目中的`application.yaml`中配置`ali.pay.v1`相关参数。证书细节参见【日常踩坑】 ```yaml ali: pay: 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 b21734d..654ef68 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 @@ -605,6 +605,12 @@ public enum WechatPayV3Type { * @since 1.0.11.RELEASE */ PROFITSHARING_AMOUNTS(HttpMethod.GET, "%s/v3/profitsharing/transactions/{transaction_id}/amounts"), + /** + * 服务商专用-查询最大分账比例API. + * + * @since 1.0.11.RELEASE + */ + PROFITSHARING_MCH_CONFIG(HttpMethod.GET, "%s/v3/profitsharing/merchant-configs/{sub_mchid}"), /** * 添加分账接收方API. * diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatApiProvider.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatApiProvider.java index b7c9778..cb9e442 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatApiProvider.java +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatApiProvider.java @@ -123,7 +123,7 @@ public class WechatApiProvider { } /** - * 批量转账到零钱. + * 批量转账到零钱. *

* 批量转账到零钱提供商户同时向多个用户微信零钱转账的能力。商户可以使用批量转账到零钱用于费用报销、员工福利发放、合作伙伴货款或服务款项支付等场景,提高转账效率。 * @@ -193,4 +193,23 @@ public class WechatApiProvider { return new WechatAllocationApi(wechatV2Client); } + /** + * 直连商户微信支付分账,基于V3 + * + * @param tenantId the tenant id + * @return the wechat profitsharing api + */ + public WechatProfitsharingApi profitsharingApi(String tenantId) { + return new WechatProfitsharingApi(wechatPayClient, tenantId); + } + + /** + * 服务商微信支付分账,基于V3 + * + * @param tenantId the tenant id + * @return the wechat partner profitsharing api + */ + public WechatPartnerProfitsharingApi partnerProfitsharingApi(String tenantId) { + return new WechatPartnerProfitsharingApi(wechatPayClient, tenantId); + } } diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatBatchTransferApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatBatchTransferApi.java index 01f6189..5f4ef78 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatBatchTransferApi.java +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatBatchTransferApi.java @@ -140,7 +140,7 @@ public class WechatBatchTransferApi extends AbstractApi { WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); this.client().withType(WechatPayV3Type.BATCH_TRANSFER_DETAIL_WECHAT, queryBatchTransferDetailParams) .function((type, params) -> { - Map queryParams = new HashMap<>(); + Map queryParams = new HashMap<>(2); queryParams.put("batch_id", params.getBatchIdOrOutBatchNo()); queryParams.put("detail_id", params.getDetailIdOrOutDetailNo()); @@ -195,7 +195,7 @@ public class WechatBatchTransferApi extends AbstractApi { WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); this.client().withType(WechatPayV3Type.BATCH_TRANSFER_DETAIL_MCH, queryBatchTransferDetailParams) .function((type, params) -> { - Map queryParams = new HashMap<>(); + Map queryParams = new HashMap<>(2); queryParams.put("batch_id", params.getBatchIdOrOutBatchNo()); queryParams.put("detail_id", params.getDetailIdOrOutDetailNo()); diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.java index 6f27922..8bba96f 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.java +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatMarketingFavorApi.java @@ -353,9 +353,9 @@ public class WechatMarketingFavorApi extends AbstractApi { MultiValueMap queryParams = new LinkedMultiValueMap<>(); queryParams.add("appid", v3.getAppId()); - MultiValueMap pathParams = new LinkedMultiValueMap<>(); - pathParams.add("openid", params.getOpenId()); - pathParams.add("coupon_id", params.getCouponId()); + Map pathParams = new HashMap<>(2); + pathParams.put("openid", params.getOpenId()); + pathParams.put("coupon_id", params.getCouponId()); URI uri = UriComponentsBuilder.fromHttpUrl(type.uri(WeChatServer.CHINA)) .queryParams(queryParams) .build() diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPartnerProfitsharingApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPartnerProfitsharingApi.java new file mode 100644 index 0000000..3504cf5 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPartnerProfitsharingApi.java @@ -0,0 +1,318 @@ +package cn.felord.payment.wechat.v3; + +import cn.felord.payment.wechat.WechatPayProperties; +import cn.felord.payment.wechat.enumeration.WeChatServer; +import cn.felord.payment.wechat.enumeration.WechatPayV3Type; +import cn.felord.payment.wechat.v3.model.profitsharing.*; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.springframework.http.HttpHeaders; +import org.springframework.util.CollectionUtils; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.util.StringUtils; +import org.springframework.web.util.UriComponentsBuilder; + +import java.net.URI; +import java.security.cert.X509Certificate; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +/** + * 微信V3服务商分账 + * + * @author felord.cn + * @since 1.0.11.RELEASE + */ +public class WechatPartnerProfitsharingApi extends AbstractApi { + + /** + * Instantiates a new Abstract api. + * + * @param wechatPayClient the wechat pay client + * @param tenantId the tenant id + */ + public WechatPartnerProfitsharingApi(WechatPayClient wechatPayClient, String tenantId) { + super(wechatPayClient, tenantId); + } + + /** + * 请求分账API + *

+ * 微信订单支付成功后,商户发起分账请求,将结算后的资金分到分账接收方 + *

+ * 注意: + *

+ * + * @param profitSharingOrder the profit sharing order + * @return the wechat response entity + */ + public WechatResponseEntity profitsharingOrders(PartnerProfitSharingOrder profitSharingOrder) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_ORDERS, profitSharingOrder) + .function((wechatPayV3Type, params) -> { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + SignatureProvider signatureProvider = this.client().signatureProvider(); + X509WechatCertificateInfo certificate = signatureProvider.getCertificate(); + final X509Certificate x509Certificate = certificate.getX509Certificate(); + params.setAppid(v3.getAppId()); + List receivers = params.getReceivers(); + if (!CollectionUtils.isEmpty(receivers)) { + List encrypted = receivers.stream() + .peek(receiversItem -> { + String name = receiversItem.getName(); + if (StringUtils.hasText(name)) { + String encryptedName = signatureProvider.encryptRequestMessage(name, x509Certificate); + receiversItem.setName(encryptedName); + } + }).collect(Collectors.toList()); + params.setReceivers(encrypted); + } + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Wechatpay-Serial", certificate.getWechatPaySerial()); + return Post(uri, params, httpHeaders); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 查询分账结果API + *

+ * 发起分账请求后,可调用此接口查询分账结果 + *

+ * 注意: + *

    + *
  • 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果
  • + *
+ * + * @param queryOrderParams the query order params + * @return the wechat response entity + */ + public WechatResponseEntity queryProfitsharingOrder(PartnerQueryOrderParams queryOrderParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_ORDERS_RESULT, queryOrderParams) + .function((wechatPayV3Type, params) -> { + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("transaction_id", params.getTransactionId()); + Optional.ofNullable(params.getSubMchid()) + .ifPresent(mchId -> queryParams.add("sub_mchid", params.getSubMchid())); + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .expand(params.getOutOrderNo()) + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 请求分账回退API + *

+ * 如果订单已经分账,在退款时,可以先调此接口,将已分账的资金从分账接收方的账户回退给分账方,再发起退款 + *

+ * 注意: + *

    + *
  • 分账回退以原分账单为依据,支持多次回退,申请回退总金额不能超过原分账单分给该接收方的金额
  • + *
  • 此接口采用同步处理模式,即在接收到商户请求后,会实时返回处理结果
  • + *
  • 对同一笔分账单最多能发起20次分账回退请求
  • + *
  • 退款和分账回退没有耦合,分账回退可以先于退款请求,也可以后于退款请求
  • + *
  • 此功能需要接收方在商户平台-交易中心-分账-分账接收设置下,开启同意分账回退后,才能使用
  • + *
+ * + * @param returnOrdersParams the return orders params + * @return the wechat response entity + */ + public WechatResponseEntity returnOrders(PartnerReturnOrdersParams returnOrdersParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_RETURN_ORDERS, returnOrdersParams) + .function((wechatPayV3Type, params) -> { + + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return Post(uri, params); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 查询分账回退结果API + *

+ * 商户需要核实回退结果,可调用此接口查询回退结果 + *

+ * 注意: + *

    + *
  • 如果分账回退接口返回状态为处理中,可调用此接口查询回退结果
  • + *
+ * + * @param queryReturnOrderParams the query return order params + * @return the wechat response entity + */ + public WechatResponseEntity queryReturnOrders(PartnerQueryReturnOrderParams queryReturnOrderParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_RETURN_ORDERS_RESULT, queryReturnOrderParams) + .function((wechatPayV3Type, params) -> { + MultiValueMap queryParams = new LinkedMultiValueMap<>(); + queryParams.add("out_order_no", params.getOutOrderNo()); + Optional.ofNullable(params.getSubMchid()) + .ifPresent(mchId -> queryParams.add("sub_mchid", params.getSubMchid())); + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .queryParams(queryParams) + .build() + .expand(params.getOutReturnNo()) + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 解冻剩余资金API + *

+ * 不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给特约商户 + *

+ * 注意: + *

    + *
  • 调用分账接口后,需要解冻剩余资金时,调用本接口将剩余的分账金额全部解冻给特约商户
  • + *
  • 此接口采用异步处理模式,即在接收到商户请求后,优先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取
  • + *
+ * + * @param unfreezeParams the unfreeze params + * @return the wechat response entity + */ + public WechatResponseEntity unfreeze(PartnerUnfreezeParams unfreezeParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_ORDERS_UNFREEZE, unfreezeParams) + .function((wechatPayV3Type, params) -> { + + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return Post(uri, params); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 查询剩余待分金额API + *

+ * 可调用此接口查询订单剩余待分金额 + * + * @param transactionId the transaction id + * @return the wechat response entity + */ + public WechatResponseEntity queryAmounts(String transactionId) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_AMOUNTS, transactionId) + .function((wechatPayV3Type, id) -> { + + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(id) + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * (服务商)查询剩余待分金额API + *

+ * 可调用此接口查询订单剩余待分金额 + * + * @param subMchid the sub mchid + * @return the wechat response entity + */ + public WechatResponseEntity queryMchConfigs(String subMchid) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_MCH_CONFIG, subMchid) + .function((wechatPayV3Type, id) -> { + + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .expand(id) + .toUri(); + return Get(uri); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 添加分账接收方API + *

+ * 商户发起添加分账接收方请求,建立分账接收方列表。后续可通过发起分账请求,将分账方商户结算后的资金,分到该分账接收方 + * + * @param addReceiversParams the add receivers params + * @return wechat response entity + */ + public WechatResponseEntity addReceivers(PartnerAddReceiversParams addReceiversParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_RECEIVERS_ADD, addReceiversParams) + .function((wechatPayV3Type, params) -> { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + SignatureProvider signatureProvider = this.client().signatureProvider(); + X509WechatCertificateInfo certificate = signatureProvider.getCertificate(); + final X509Certificate x509Certificate = certificate.getX509Certificate(); + params.setAppid(v3.getAppId()); + String name = params.getName(); + if (StringUtils.hasText(name)) { + String encryptedName = signatureProvider.encryptRequestMessage(name, x509Certificate); + params.setName(encryptedName); + } + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.add("Wechatpay-Serial", certificate.getWechatPaySerial()); + return Post(uri, params, httpHeaders); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } + + /** + * 删除分账接收方API + *

+ * 商户发起删除分账接收方请求。删除后,不支持将分账方商户结算后的资金,分到该分账接收方 + * + * @param delReceiversParams the del receivers params + * @return the wechat response entity + */ + public WechatResponseEntity deleteReceivers(PartnerDelReceiversParams delReceiversParams) { + WechatResponseEntity wechatResponseEntity = new WechatResponseEntity<>(); + this.client().withType(WechatPayV3Type.PROFITSHARING_RECEIVERS_DELETE, delReceiversParams) + .function((wechatPayV3Type, params) -> { + WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); + params.setAppid(v3.getAppId()); + URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) + .build() + .toUri(); + return Post(uri, params); + }) + .consumer(wechatResponseEntity::convert) + .request(); + return wechatResponseEntity; + } +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java index 86068ae..aef65eb 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/WechatPayScoreApi.java @@ -29,6 +29,8 @@ import org.springframework.util.StringUtils; import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; +import java.util.HashMap; +import java.util.Map; /** * 微信支付分API. @@ -63,10 +65,10 @@ public class WechatPayScoreApi extends AbstractApi { .function((wechatPayV3Type, userServiceStateParams) -> { WechatPayProperties.V3 v3 = this.wechatMetaBean().getV3(); - MultiValueMap expandParams = new LinkedMultiValueMap<>(); - expandParams.add("appid", v3.getAppId()); - expandParams.add("service_id", params.getServiceId()); - expandParams.add("openid", params.getOpenId()); + Map expandParams = new HashMap<>(3); + expandParams.put("appid", v3.getAppId()); + expandParams.put("service_id", params.getServiceId()); + expandParams.put("openid", params.getOpenId()); URI uri = UriComponentsBuilder.fromHttpUrl(wechatPayV3Type.uri(WeChatServer.CHINA)) .build() diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/AddReceiversParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/AddReceiversParams.java index 5a9bf30..14f3a67 100644 --- a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/AddReceiversParams.java +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/AddReceiversParams.java @@ -4,7 +4,7 @@ import cn.felord.payment.wechat.enumeration.ReceiverType; import lombok.Data; /** - * 添加分账接收方API-请求参数 + * 直连商户-添加分账接收方API-请求参数 * * @author felord.cn * @since 1.0.11.RELEASE 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 index e306eb7..a08cc45 100644 --- 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 @@ -4,7 +4,7 @@ import cn.felord.payment.wechat.enumeration.ReceiverType; import lombok.Data; /** - * 删除分账接收方API-请求参数 + * 直连商户-删除分账接收方API-请求参数 * * @author felord.cn * @since 1.0.11.RELEASE diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerAddReceiversParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerAddReceiversParams.java new file mode 100644 index 0000000..25e04d4 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerAddReceiversParams.java @@ -0,0 +1,102 @@ +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 PartnerAddReceiversParams { + /** + * 子商户号,选填 + */ + private String subMchid; + /** + * 应用ID,自动注入 + */ + private String appid; + /** + * 子商户应用ID,选填 + *

+ * 分账接收方类型包含{@code PERSONAL_SUB_OPENID}时必填 + */ + private String subAppid; + /** + * 分账接收方类型,必填 + */ + private ReceiverType type; + /** + * 分账接收方帐号,必填 + */ + private String account; + /** + * 分账个人接收方姓名,选填 + *

+ * 分账接收方类型是{@code MERCHANT_ID}时,是商户全称(必传),当商户是小微商户或个体户时,是开户人姓名 分账接收方类型是{@code PERSONAL_OPENID}时,是个人姓名(选传,传则校验) + *

    + *
  1. 分账接收方类型是{@code PERSONAL_OPENID},是个人姓名的密文(选传,传则校验) 此字段的加密方法详见:敏感信息加密说明
  2. + *
  3. 使用微信支付平台证书中的公钥
  4. + *
  5. 使用RSAES-OAEP算法进行加密
  6. + *
  7. 将请求中HTTP头部的Wechatpay-Serial设置为证书序列号
  8. + *
+ */ + 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/PartnerDelReceiversParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerDelReceiversParams.java new file mode 100644 index 0000000..cd66d4b --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerDelReceiversParams.java @@ -0,0 +1,36 @@ +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 PartnerDelReceiversParams { + /** + * 子商户号,选填 + */ + private String subMchid; + /** + * 应用ID,自动注入 + */ + private String appid; + /** + * 子商户应用ID,选填 + *

+ * 分账接收方类型包含{@code PERSONAL_SUB_OPENID}时必填 + */ + private String subAppid; + /** + * 分账接收方类型,必填 + */ + 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/PartnerProfitSharingOrder.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerProfitSharingOrder.java new file mode 100644 index 0000000..7407529 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerProfitSharingOrder.java @@ -0,0 +1,55 @@ +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 PartnerProfitSharingOrder { + /** + * 子商户号,选填 + */ + private String subMchid; + /** + * 服务商应用ID,自动注入 + */ + private String appid; + /** + * 子商户应用ID,选填 + *

+ * 分账接收方类型包含{@code PERSONAL_SUB_OPENID}时必填 + */ + private String subAppid; + /** + * 微信订单号,必填 + */ + private String transactionId; + /** + * 商户分账单号,必填 + *

+ * 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。 + * 只能是数字、大小写字母_-|*@ + */ + private String outOrderNo; + /** + * 分账接收方列表,选填 + *

+ * 可以设置出资商户作为分账接受方,最多可有50个分账接收方 + */ + private List receivers; + /** + * 是否解冻剩余未分资金,必填 + *

+ *

    + *
  1. 如果为{@code true},该笔订单剩余未分账的金额会解冻回分账方商户;
  2. + *
  3. 如果为{@code false},该笔订单剩余未分账的金额不会解冻回分账方商户,可以对该笔订单再次进行分账。
  4. + *
+ */ + 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/PartnerProfitsharingConsumeData.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerProfitsharingConsumeData.java new file mode 100644 index 0000000..6c4b67d --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerProfitsharingConsumeData.java @@ -0,0 +1,84 @@ +/* + * + * 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 PartnerProfitsharingConsumeData { + + /** + * 服务商商户号. + *

+ * 服务商模式分账发起商户 + */ + private String mchid; + /** + * 子商户号 + *

+ * 服务商模式分账出资商户 + */ + private String subMchid; + + /** + * 微信订单号. + *

+ * 微信支付订单号 + */ + private String transactionId; + + /** + * 微信分账/回退单号. + */ + private String orderId; + + /** + * 商户分账/回退单号. + *

+ * 分账方系统内部的分账/回退单号 + */ + private String outOrderNo; + + /** + * 分账接收方. + *

+ * 分账接收方对象 + */ + private List receivers; + + /** + * 成功时间. + *

+ * 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/PartnerQueryOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerQueryOrderParams.java new file mode 100644 index 0000000..fa12dc9 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerQueryOrderParams.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 PartnerQueryOrderParams { + /** + * 子商户号,选填 + */ + private String subMchid; + /** + * 商户分账单号,必填 + */ + private String outOrderNo; + /** + * 微信订单号,必填 + */ + private String transactionId; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerQueryReturnOrderParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerQueryReturnOrderParams.java new file mode 100644 index 0000000..3f6ce01 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerQueryReturnOrderParams.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 PartnerQueryReturnOrderParams { + /** + * 子商户号,选填 + */ + private String subMchid; + /** + * 商户回退单号,必填 + */ + private String outReturnNo; + /** + * 商户分账单号,必填 + */ + private String outOrderNo; +} diff --git a/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerReturnOrdersParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerReturnOrdersParams.java new file mode 100644 index 0000000..65cf588 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerReturnOrdersParams.java @@ -0,0 +1,45 @@ +package cn.felord.payment.wechat.v3.model.profitsharing; + +import lombok.Data; + +/** + * 服务商-请求分账回退API-请求参数 + * + * @author felord.cn + * @since 1.0.11.RELEASE + */ +@Data +public class PartnerReturnOrdersParams { + /** + * 子商户号,选填 + */ + private String subMchid; + /** + * 微信分账单号,同{@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/PartnerUnfreezeParams.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerUnfreezeParams.java new file mode 100644 index 0000000..0b3f192 --- /dev/null +++ b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/PartnerUnfreezeParams.java @@ -0,0 +1,29 @@ +package cn.felord.payment.wechat.v3.model.profitsharing; + +import lombok.Data; + +/** + * 服务商-解冻剩余资金API-请求参数 + * + * @author felord.cn + * @since 1.0.11.RELEASE + */ +@Data +public class PartnerUnfreezeParams { + /** + * 子商户号,选填 + */ + private String subMchid; + /** + * 微信订单号,必填 + */ + private String transactionId; + /** + * 商户分账单号,必填 + */ + private String outOrderNo; + /** + * 分账描述,必填 + */ + 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/ProfitSharingOrder.java b/payment-spring-boot-autoconfigure/src/main/java/cn/felord/payment/wechat/v3/model/profitsharing/ProfitSharingOrder.java index 4dd55fe..b58174a 100644 --- 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 @@ -5,7 +5,7 @@ import lombok.Data; import java.util.List; /** - * 直连商户请求分账API-请求参数 + * 直连商户-请求分账API-请求参数 * * @author felord.cn * @since 1.0.11.RELEASE 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 index 3b65f51..f02951c 100644 --- 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 @@ -26,7 +26,7 @@ import java.time.LocalDateTime; import java.util.List; /** - * 微信支付分账通知参数 + * 直连商户-微信支付分账动账通知参数 * * @author felord.cn * @since 1.0.11.RELEASE 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 index 8a25740..9778454 100644 --- 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 @@ -3,7 +3,7 @@ package cn.felord.payment.wechat.v3.model.profitsharing; import lombok.Data; /** - * 查询分账结果API-请求参数 + * 直连商户-查询分账结果API-请求参数 * * @author felord.cn * @since 1.0.11.RELEASE 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 index 182e72e..fd5420c 100644 --- 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 @@ -3,7 +3,7 @@ package cn.felord.payment.wechat.v3.model.profitsharing; import lombok.Data; /** - * 查询分账回退结果API-请求参数 + * 直连商户-查询分账回退结果API-请求参数 * * @author felord.cn * @since 1.0.11.RELEASE 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 index 981c3f2..23e375b 100644 --- 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 @@ -3,7 +3,7 @@ package cn.felord.payment.wechat.v3.model.profitsharing; import lombok.Data; /** - * 请求分账回退API-请求参数 + * 直连商户-请求分账回退API-请求参数 * * @author felord.cn * @since 1.0.11.RELEASE 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 index a53f789..a2d3ed2 100644 --- 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 @@ -3,7 +3,7 @@ package cn.felord.payment.wechat.v3.model.profitsharing; import lombok.Data; /** - * 解冻剩余资金API-请求参数 + * 直连商户-解冻剩余资金API-请求参数 * * @author felord.cn * @since 1.0.11.RELEASE