From 625c3c4600c88f09f0466a0d94ae865981290e43 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9B=9B=E5=8F=B6=E8=8D=89?= <362692680@qq.com> Date: Wed, 23 Aug 2023 11:24:56 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=88=86=E8=B4=A6?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=EF=BC=8C=E9=87=8D=E5=91=BD?= =?UTF-8?q?=E5=90=8D=E6=8E=A5=E5=8F=A3=E6=96=B9=E6=B3=95=EF=BC=8C=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=E5=AE=9E=E4=BD=93=EF=BC=8C=E6=96=B9=E4=BE=BFv2?= =?UTF-8?q?=E3=80=81v3=E7=89=88=E6=9C=AC=E5=90=8C=E6=97=B6=E4=BD=BF?= =?UTF-8?q?=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wxpay/bean/profitsharing/Receiver.java | 80 +++++++++++ .../ProfitSharingNotifyV3Response.java} | 4 +- .../ProfitSharingNotifyV3Result.java} | 20 ++- .../ProfitSharingBillV3Request.java} | 4 +- ...rofitSharingMerchantRatioQueryRequest.java | 2 +- .../ProfitSharingOrderAmountQueryRequest.java | 2 +- .../ProfitSharingQueryRequest.java | 2 +- .../ProfitSharingQueryV3Request.java} | 9 +- .../ProfitSharingReceiverRequest.java | 2 +- .../ProfitSharingReceiverV3Request.java} | 63 ++------- .../{ => request}/ProfitSharingRequest.java | 10 +- .../ProfitSharingReturnQueryRequest.java | 2 +- .../ProfitSharingReturnRequest.java | 2 +- .../ProfitSharingReturnV3Request.java} | 4 +- .../ProfitSharingUnfreezeRequest.java} | 5 +- .../ProfitSharingUnfreezeV3Request.java} | 4 +- .../ProfitSharingV3Request.java} | 93 ++++++++++++- .../ProfitSharingBillV3Result.java} | 4 +- ...ProfitSharingMerchantRatioQueryResult.java | 2 +- ...fitSharingMerchantRatioQueryV3Result.java} | 4 +- .../ProfitSharingOrderAmountQueryResult.java | 2 +- ...rofitSharingOrderAmountQueryV3Result.java} | 4 +- .../ProfitSharingQueryResult.java | 2 +- .../ProfitSharingReceiverResult.java | 2 +- .../result/ProfitSharingReceiverV3Result.java | 102 ++++++++++++++ .../{ => result}/ProfitSharingResult.java | 2 +- .../ProfitSharingReturnResult.java | 2 +- .../ProfitSharingReturnV3Result.java} | 4 +- .../ProfitSharingUnfreezeV3Result.java} | 4 +- .../ProfitSharingV3Result.java} | 4 +- .../v3/ProfitSharingNotifyResult.java | 128 ------------------ .../wxpay/service/ProfitSharingService.java | 5 +- .../wxpay/service/ProfitSharingV3Service.java | 123 ++++++++--------- .../impl/ProfitSharingServiceImpl.java | 5 +- .../impl/ProfitSharingV3ServiceImpl.java | 89 ++++++------ .../ProfitSharingQueryResultTest.java | 1 + ...st.java => ProfitSharingV3ResultTest.java} | 3 +- .../impl/ProfitSharingServiceImplTest.java | 6 +- .../impl/ProfitSharingV3ServiceImplTest.java | 2 +- 39 files changed, 450 insertions(+), 358 deletions(-) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingNotifyData.java => notify/ProfitSharingNotifyV3Response.java} (95%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingPartnerNotifyResult.java => notify/ProfitSharingNotifyV3Result.java} (87%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingBillRequest.java => request/ProfitSharingBillV3Request.java} (90%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => request}/ProfitSharingMerchantRatioQueryRequest.java (94%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => request}/ProfitSharingOrderAmountQueryRequest.java (95%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => request}/ProfitSharingQueryRequest.java (96%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingQueryRequest.java => request/ProfitSharingQueryV3Request.java} (78%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => request}/ProfitSharingReceiverRequest.java (95%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingReceiver.java => request/ProfitSharingReceiverV3Request.java} (62%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => request}/ProfitSharingRequest.java (91%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => request}/ProfitSharingReturnQueryRequest.java (97%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => request}/ProfitSharingReturnRequest.java (98%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingReturnRequest.java => request/ProfitSharingReturnV3Request.java} (94%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ProfitSharingFinishRequest.java => request/ProfitSharingUnfreezeRequest.java} (92%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingUnfreezeRequest.java => request/ProfitSharingUnfreezeV3Request.java} (91%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingRequest.java => request/ProfitSharingV3Request.java} (45%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingBillResult.java => result/ProfitSharingBillV3Result.java} (91%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => result}/ProfitSharingMerchantRatioQueryResult.java (93%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingMerchantMaxRatioQueryResult.java => result/ProfitSharingMerchantRatioQueryV3Result.java} (80%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => result}/ProfitSharingOrderAmountQueryResult.java (93%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingUnsplitResult.java => result/ProfitSharingOrderAmountQueryV3Result.java} (83%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => result}/ProfitSharingQueryResult.java (98%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => result}/ProfitSharingReceiverResult.java (92%) create mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReceiverV3Result.java rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => result}/ProfitSharingResult.java (98%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{ => result}/ProfitSharingReturnResult.java (97%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingReturnResult.java => result/ProfitSharingReturnV3Result.java} (97%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingUnfreezeResult.java => result/ProfitSharingUnfreezeV3Result.java} (97%) rename weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/{v3/ProfitSharingResult.java => result/ProfitSharingV3Result.java} (97%) delete mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingNotifyResult.java rename weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/{ProfitSharingResultTest.java => ProfitSharingV3ResultTest.java} (94%) diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/Receiver.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/Receiver.java index 671e2951d..e9dfbf87c 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/Receiver.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/Receiver.java @@ -1,8 +1,10 @@ package com.github.binarywang.wxpay.bean.profitsharing; +import com.github.binarywang.wxpay.v3.SpecEncrypt; import com.google.gson.FieldNamingPolicy; import com.google.gson.Gson; import com.google.gson.GsonBuilder; +import com.google.gson.annotations.SerializedName; import java.io.Serializable; @@ -11,12 +13,90 @@ import java.io.Serializable; * @version 1.0 */ public class Receiver implements Serializable { + /** + *
+ * 字段名:分账接收方类型 + * 是否必填:是 + * 描述: + * 1、MERCHANT_ID:商户号 + * 2、PERSONAL_OPENID:个人openid(由父商户APPID转换得到) + *+ */ + @SerializedName("type") private String type; + /** + *
+ * 字段名:分账接收方帐号 + * 是否必填:是 + * 描述: + * 1、分账接收方类型为MERCHANT_ID时,分账接收方账号为商户号 + * 2、分账接收方类型为PERSONAL_OPENID时,分账接收方账号为个人openid + *+ */ + @SerializedName("account") private String account; + /** + *
+ * 字段名:分账金额 + * 是否必填:是 + * 描述: 分账金额,单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额 + *+ */ + @SerializedName("amount") private Integer amount; + /** + *
+ * 字段名:分账描述 + * 是否必填:是 + * 描述: 分账的原因描述,分账账单中需要体现 + *+ */ + @SerializedName("description") private String description; + /** + *
+ * 字段名:分账个人接收方姓名 + * 是否必填:否 + * 描述: + * 可选项,在接收方类型为个人的时可选填,若有值,会检查与 name 是否实名匹配,不匹配会拒绝分账请求 + * 1、分账接收方类型是PERSONAL_OPENID,是个人姓名的密文(选传,传则校验) 此字段的加密方法详见:敏感信息加密说明 + * 2、使用微信支付平台证书中的公钥 + * 3、使用RSAES-OAEP算法进行加密 + * 4、将请求中HTTP头部的Wechatpay-Serial设置为证书序列号 + *+ */ + @SerializedName("name") + @SpecEncrypt private String name; + /** + *
+ * 字段名:与分账方的关系类型 + * 是否必填:是 + * 描述:子商户与接收方的关系。 本字段值为枚举: + * STORE:门店 + * STAFF:员工 + * STORE_OWNER:店主 + * PARTNER:合作伙伴 + * HEADQUARTER:总部 + * BRAND:品牌方 + * DISTRIBUTOR:分销商 + * USER:用户 + * SUPPLIER: 供应商 + * CUSTOM:自定义 + *+ */ + @SerializedName("relation_type") private String relationType; + /** + *
+ * 字段名:自定义的分账关系 + * 是否必填:是 + * 描述:子商户与接收方具体的关系,本字段最多10个字。 + * 当字段relationType的值为CUSTOM时,本字段必填; + * 当字段relationType的值不为CUSTOM时,本字段无需填写。 + *+ */ + @SerializedName("custom_relation") private String customRelation; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingNotifyData.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/notify/ProfitSharingNotifyV3Response.java similarity index 95% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingNotifyData.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/notify/ProfitSharingNotifyV3Response.java index 8e3dec271..ea147eea9 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingNotifyData.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/notify/ProfitSharingNotifyV3Response.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.notify; import com.google.gson.annotations.SerializedName; import lombok.Data; @@ -16,7 +16,7 @@ import java.io.Serializable; */ @Data @NoArgsConstructor -public class ProfitSharingNotifyData implements Serializable{ +public class ProfitSharingNotifyV3Response implements Serializable{ private static final long serialVersionUID = 4242383310854692441L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingPartnerNotifyResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/notify/ProfitSharingNotifyV3Result.java similarity index 87% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingPartnerNotifyResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/notify/ProfitSharingNotifyV3Result.java index 77f628cff..0a86269da 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingPartnerNotifyResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/notify/ProfitSharingNotifyV3Result.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.notify; import com.google.gson.annotations.SerializedName; import lombok.Data; @@ -8,17 +8,27 @@ import java.io.Serializable; /** * - * 微信V3接口-服务商 + * 微信V3接口 * 分账动账通知解密后数据实体 * - * @author linyaqiang - * @since 2023-08-01 + * @author yuanbo + * @since 2022-04-26-21:08 PM */ @Data @NoArgsConstructor -public class ProfitSharingPartnerNotifyResult implements Serializable { +public class ProfitSharingNotifyV3Result implements Serializable { private static final long serialVersionUID = -2875006651351414624L; + /** + *
+ * 字段名:直连商户号 + * 是否必填:是 + * 描述:直连模式分账发起和出资商户 + *+ */ + @SerializedName("mchid") + private String mchId; + /** *
* 字段名:服务商商户号 diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingBillRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingBillV3Request.java similarity index 90% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingBillRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingBillV3Request.java index 1eaebbacb..dcda949dc 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingBillRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingBillV3Request.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.request; import java.io.Serializable; @@ -19,7 +19,7 @@ import lombok.NoArgsConstructor; @Builder(builderMethodName = "newBuilder") @NoArgsConstructor @AllArgsConstructor -public class ProfitSharingBillRequest implements Serializable { +public class ProfitSharingBillV3Request implements Serializable { private static final long serialVersionUID = 5200819754873844593L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingMerchantRatioQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingMerchantRatioQueryRequest.java similarity index 94% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingMerchantRatioQueryRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingMerchantRatioQueryRequest.java index 0381fe64a..43902c782 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingMerchantRatioQueryRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingMerchantRatioQueryRequest.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingOrderAmountQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingOrderAmountQueryRequest.java similarity index 95% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingOrderAmountQueryRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingOrderAmountQueryRequest.java index 455f72f2b..416c35d7d 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingOrderAmountQueryRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingOrderAmountQueryRequest.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingQueryRequest.java similarity index 96% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingQueryRequest.java index d342153a9..56a0d5840 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingQueryRequest.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingQueryV3Request.java similarity index 78% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingQueryRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingQueryV3Request.java index ae50d5e52..981adad59 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingQueryRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingQueryV3Request.java @@ -1,16 +1,11 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.request; -import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; -import com.github.binarywang.wxpay.constant.WxPayConstants; -import com.github.binarywang.wxpay.exception.WxPayException; import com.google.gson.annotations.SerializedName; import com.thoughtworks.xstream.annotations.XStreamAlias; import lombok.*; -import lombok.experimental.Accessors; import me.chanjar.weixin.common.annotation.Required; import java.io.Serializable; -import java.util.Map; /** * @author lyt 2023/08/21 15:44 @@ -20,7 +15,7 @@ import java.util.Map; @Builder(builderMethodName = "newBuilder") @NoArgsConstructor @AllArgsConstructor -public class ProfitSharingQueryRequest implements Serializable { +public class ProfitSharingQueryV3Request implements Serializable { private static final long serialVersionUID = 1L; /** *diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReceiverRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReceiverRequest.java similarity index 95% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReceiverRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReceiverRequest.java index db6485439..5bca6b60f 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReceiverRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReceiverRequest.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReceiver.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReceiverV3Request.java similarity index 62% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReceiver.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReceiverV3Request.java index 10ba3821b..b8de4f5d5 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReceiver.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReceiverV3Request.java @@ -1,29 +1,29 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.request; +import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; +import com.github.binarywang.wxpay.constant.WxPayConstants; +import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.v3.SpecEncrypt; import com.google.gson.annotations.SerializedName; -import lombok.AllArgsConstructor; -import lombok.Builder; -import lombok.Data; -import lombok.NoArgsConstructor; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import lombok.*; +import me.chanjar.weixin.common.annotation.Required; import java.io.Serializable; +import java.util.Map; /** + * 添加/删除分账接受方请求对象 * - * 微信V3接口 分账接收方实体 - * @author pg - * created on 2021-6-25 - * + * @author lyt 2023-08-23 10:09:21 + * @version 1.0 */ @Data @Builder(builderMethodName = "newBuilder") @NoArgsConstructor @AllArgsConstructor -public class ProfitSharingReceiver implements Serializable { - private static final long serialVersionUID = -4391888575149767840L; - - +public class ProfitSharingReceiverV3Request implements Serializable { + private static final long serialVersionUID = 1L; /** ** 字段名:子商户号 @@ -125,41 +125,4 @@ public class ProfitSharingReceiver implements Serializable { */ @SerializedName("custom_relation") private String customRelation; - - /** - *- * 字段名:分账描述 - * 是否必填:是 - * 描述: 分账的原因描述,分账账单中需要体现 - *- */ - private String description; - /** - *- * 字段名:分账金额 - * 是否必填:是 - * 描述: 分账金额,单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额 - *- */ - private Long amount; - - /** - * 此构造函数用于分账接口 - * - * @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 amount 分账金额,单位为分,只能为整数,不能超过原订单支付金额及最大分账比例金额 - * @param description 分账的原因描述,分账账单中需要体现 - */ - public ProfitSharingReceiver(String type, String account, Long amount, String description) { - this.type = type; - this.account = account; - this.amount = amount; - this.description = description; - } - } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingRequest.java similarity index 91% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingRequest.java index e3b1f5690..95b5e67fc 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingRequest.java @@ -1,12 +1,16 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.exception.WxPayException; +import com.github.binarywang.wxpay.v3.SpecEncrypt; +import com.google.gson.Gson; +import com.google.gson.annotations.SerializedName; import com.thoughtworks.xstream.annotations.XStreamAlias; import lombok.*; import me.chanjar.weixin.common.annotation.Required; +import java.io.Serializable; import java.util.Map; /** @@ -21,7 +25,6 @@ import java.util.Map; @XStreamAlias("xml") public class ProfitSharingRequest extends BaseWxPayRequest { private static final long serialVersionUID = 212049937430575842L; - /** ** 字段名:微信订单号. @@ -35,7 +38,6 @@ public class ProfitSharingRequest extends BaseWxPayRequest { @XStreamAlias("transaction_id") @Required private String transactionId; - /** ** 字段名:商户分账单号. @@ -49,7 +51,6 @@ public class ProfitSharingRequest extends BaseWxPayRequest { @XStreamAlias("out_order_no") @Required private String outOrderNo; - /** ** 字段名:分账接收方列表. @@ -77,7 +78,6 @@ public class ProfitSharingRequest extends BaseWxPayRequest { @Required private String receivers; - @Override protected void checkConstraints() throws WxPayException { // 目前仅支持HMAC-SHA256. diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnQueryRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnQueryRequest.java similarity index 97% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnQueryRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnQueryRequest.java index d3c781602..8e6be32a2 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnQueryRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnQueryRequest.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnRequest.java similarity index 98% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnRequest.java index 3e389a467..b2a1d9aae 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnRequest.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReturnRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnV3Request.java similarity index 94% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReturnRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnV3Request.java index 6cbeed241..6f4fd9026 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReturnRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingReturnV3Request.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.google.gson.annotations.SerializedName; import lombok.AllArgsConstructor; @@ -19,7 +19,7 @@ import java.io.Serializable; @Builder(builderMethodName = "newBuilder") @NoArgsConstructor @AllArgsConstructor -public class ProfitSharingReturnRequest implements Serializable { +public class ProfitSharingReturnV3Request implements Serializable { private static final long serialVersionUID = -2175582517588397426L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingFinishRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingUnfreezeRequest.java similarity index 92% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingFinishRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingUnfreezeRequest.java index 3bff328b8..5644ae475 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingFinishRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingUnfreezeRequest.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.bean.request.BaseWxPayRequest; import com.github.binarywang.wxpay.constant.WxPayConstants; @@ -9,6 +9,7 @@ import me.chanjar.weixin.common.annotation.Required; import java.util.Map; /** + * 解冻剩余资金API请求实体 * @author Wang GuangXin 2019/10/23 14:02 * @version 1.0 */ @@ -18,7 +19,7 @@ import java.util.Map; @NoArgsConstructor @AllArgsConstructor @XStreamAlias("xml") -public class ProfitSharingFinishRequest extends BaseWxPayRequest { +public class ProfitSharingUnfreezeRequest extends BaseWxPayRequest { private static final long serialVersionUID = -4265779954583596627L; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnfreezeRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingUnfreezeV3Request.java similarity index 91% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnfreezeRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingUnfreezeV3Request.java index 946919c22..3ecc513c1 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnfreezeRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingUnfreezeV3Request.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.google.gson.annotations.SerializedName; import lombok.AllArgsConstructor; @@ -19,7 +19,7 @@ import java.io.Serializable; @Builder(builderMethodName = "newBuilder") @NoArgsConstructor @AllArgsConstructor -public class ProfitSharingUnfreezeRequest implements Serializable { +public class ProfitSharingUnfreezeV3Request implements Serializable { private static final long serialVersionUID = 6835471990040104843L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingRequest.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingV3Request.java similarity index 45% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingRequest.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingV3Request.java index 44e72dec2..e007ad15a 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingRequest.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/request/ProfitSharingV3Request.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.request; import com.github.binarywang.wxpay.v3.SpecEncrypt; import com.google.gson.annotations.SerializedName; @@ -21,7 +21,7 @@ import java.util.List; @Builder(builderMethodName = "newBuilder") @NoArgsConstructor @AllArgsConstructor -public class ProfitSharingRequest implements Serializable { +public class ProfitSharingV3Request implements Serializable { private static final long serialVersionUID = 3644929701624280800L; /** @@ -83,7 +83,7 @@ public class ProfitSharingRequest implements Serializable { */ @SpecEncrypt @SerializedName("receivers") - private Listreceivers; + private List receivers; /** * @@ -96,4 +96,91 @@ public class ProfitSharingRequest implements Serializable { */ @SerializedName("unfreeze_unsplit") private boolean unfreezeUnsplit; + /** + * 分账接收方实体 + */ + @Data + @NoArgsConstructor + public static class Receiver implements Serializable { + private static final long serialVersionUID = 1L; + /** + *+ * 字段名:分账接收方类型 + * 是否必填:是 + * 描述: + * 1、MERCHANT_ID:商户号 + * 2、PERSONAL_OPENID:个人openid(由父商户APPID转换得到) + *+ */ + @SerializedName("type") + private String type; + + /** + *+ * 字段名:分账接收方帐号 + * 是否必填:是 + * 描述: + * 1、分账接收方类型为MERCHANT_ID时,分账接收方账号为商户号 + * 2、分账接收方类型为PERSONAL_OPENID时,分账接收方账号为个人openid + *+ */ + @SerializedName("account") + private String account; + + /** + *+ * 字段名:分账个人接收方姓名 + * 是否必填:否 + * 描述: + * 可选项,在接收方类型为个人的时可选填,若有值,会检查与 name 是否实名匹配,不匹配会拒绝分账请求 + * 1、分账接收方类型是PERSONAL_OPENID,是个人姓名的密文(选传,传则校验) 此字段的加密方法详见:敏感信息加密说明 + * 2、使用微信支付平台证书中的公钥 + * 3、使用RSAES-OAEP算法进行加密 + * 4、将请求中HTTP头部的Wechatpay-Serial设置为证书序列号 + *+ */ + @SerializedName("name") + @SpecEncrypt + private String name; + + /** + *+ * 字段名:与分账方的关系类型 + * 是否必填:是 + * 描述:子商户与接收方的关系。 本字段值为枚举: + * STORE:门店 + * STAFF:员工 + * STORE_OWNER:店主 + * PARTNER:合作伙伴 + * HEADQUARTER:总部 + * BRAND:品牌方 + * DISTRIBUTOR:分销商 + * USER:用户 + * SUPPLIER: 供应商 + * CUSTOM:自定义 + *+ */ + @SerializedName("relation_type") + private String relationType; + + /** + *+ * 字段名:自定义的分账关系 + * 是否必填:是 + * 描述:子商户与接收方具体的关系,本字段最多10个字。 + * 当字段relationType的值为CUSTOM时,本字段必填; + * 当字段relationType的值不为CUSTOM时,本字段无需填写。 + *+ */ + @SerializedName("custom_relation") + private String customRelation; + /** + *+ * 字段名:分账描述 + * 是否必填:是 + * 描述: 分账的原因描述,分账账单中需要体现 + *+ */ + private String description; + } } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingBillResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingBillV3Result.java similarity index 91% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingBillResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingBillV3Result.java index d9d9ca824..cc2ddd009 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingBillResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingBillV3Result.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.result; import java.io.Serializable; @@ -15,7 +15,7 @@ import lombok.NoArgsConstructor; */ @Data @NoArgsConstructor -public class ProfitSharingBillResult implements Serializable { +public class ProfitSharingBillV3Result implements Serializable { private static final long serialVersionUID = -704896948531566657L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingMerchantRatioQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingMerchantRatioQueryResult.java similarity index 93% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingMerchantRatioQueryResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingMerchantRatioQueryResult.java index fa0c4c3fb..3630014ff 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingMerchantRatioQueryResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingMerchantRatioQueryResult.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.thoughtworks.xstream.annotations.XStreamAlias; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingMerchantMaxRatioQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingMerchantRatioQueryV3Result.java similarity index 80% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingMerchantMaxRatioQueryResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingMerchantRatioQueryV3Result.java index 8772d3cd1..28c078e34 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingMerchantMaxRatioQueryResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingMerchantRatioQueryV3Result.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.result; import java.io.Serializable; @@ -13,7 +13,7 @@ import lombok.Data; * @date 2022-12-09 */ @Data -public class ProfitSharingMerchantMaxRatioQueryResult implements Serializable { +public class ProfitSharingMerchantRatioQueryV3Result implements Serializable { private static final long serialVersionUID = -6259241881199571683L; /** 子商户号 */ diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingOrderAmountQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingOrderAmountQueryResult.java similarity index 93% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingOrderAmountQueryResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingOrderAmountQueryResult.java index b877cce97..4b79064b6 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingOrderAmountQueryResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingOrderAmountQueryResult.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.thoughtworks.xstream.annotations.XStreamAlias; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnsplitResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingOrderAmountQueryV3Result.java similarity index 83% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnsplitResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingOrderAmountQueryV3Result.java index 49474bd14..58e11b1bf 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnsplitResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingOrderAmountQueryV3Result.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.google.gson.annotations.SerializedName; import lombok.Data; @@ -13,7 +13,7 @@ import java.io.Serializable; * created on 2021-6-25 */ @Data -public class ProfitSharingUnsplitResult implements Serializable { +public class ProfitSharingOrderAmountQueryV3Result implements Serializable { private static final long serialVersionUID = -7025255772409082288L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingQueryResult.java similarity index 98% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingQueryResult.java index 09e83d9d9..437a82e18 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingQueryResult.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.google.gson.FieldNamingPolicy; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReceiverResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReceiverResult.java similarity index 92% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReceiverResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReceiverResult.java index bcd7ac1e0..6047d4246 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReceiverResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReceiverResult.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.thoughtworks.xstream.annotations.XStreamAlias; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReceiverV3Result.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReceiverV3Result.java new file mode 100644 index 000000000..996bb5e78 --- /dev/null +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReceiverV3Result.java @@ -0,0 +1,102 @@ +package com.github.binarywang.wxpay.bean.profitsharing.result; + +import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; +import com.github.binarywang.wxpay.v3.SpecEncrypt; +import com.google.gson.annotations.SerializedName; +import com.thoughtworks.xstream.annotations.XStreamAlias; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import org.w3c.dom.Document; + +import java.io.Serializable; + +/** + * @author 添加/删除分账接收方结果 + * @version 1.0 + */ +@Data +public class ProfitSharingReceiverV3Result implements Serializable { + private static final long serialVersionUID = 876204163877798066L; + /** + *+ * 字段名:子商户号 + * 是否必填:是 + * 描述:微信支付分配的子商户号,即分账的出资商户号。 + *+ */ + @SerializedName("sub_mchid") + private String subMchId; + + /** + *+ * 字段名:分账接收方类型 + * 是否必填:是 + * 描述: + * 1、MERCHANT_ID:商户号 + * 2、PERSONAL_OPENID:个人openid(由父商户APPID转换得到) + *+ */ + @SerializedName("type") + private String type; + + /** + *+ * 字段名:分账接收方帐号 + * 是否必填:是 + * 描述: + * 1、分账接收方类型为MERCHANT_ID时,分账接收方账号为商户号 + * 2、分账接收方类型为PERSONAL_OPENID时,分账接收方账号为个人openid + *+ */ + @SerializedName("account") + private String account; + + /** + *+ * 字段名:分账个人接收方姓名 + * 是否必填:否 + * 描述: + * 可选项,在接收方类型为个人的时可选填,若有值,会检查与 name 是否实名匹配,不匹配会拒绝分账请求 + * 1、分账接收方类型是PERSONAL_OPENID,是个人姓名的密文(选传,传则校验) 此字段的加密方法详见:敏感信息加密说明 + * 2、使用微信支付平台证书中的公钥 + * 3、使用RSAES-OAEP算法进行加密 + * 4、将请求中HTTP头部的Wechatpay-Serial设置为证书序列号 + *+ */ + @SerializedName("name") + @SpecEncrypt + private String name; + + /** + *+ * 字段名:与分账方的关系类型 + * 是否必填:是 + * 描述:子商户与接收方的关系。 本字段值为枚举: + * STORE:门店 + * STAFF:员工 + * STORE_OWNER:店主 + * PARTNER:合作伙伴 + * HEADQUARTER:总部 + * BRAND:品牌方 + * DISTRIBUTOR:分销商 + * USER:用户 + * SUPPLIER: 供应商 + * CUSTOM:自定义 + *+ */ + @SerializedName("relation_type") + private String relationType; + + /** + *+ * 字段名:自定义的分账关系 + * 是否必填:是 + * 描述:子商户与接收方具体的关系,本字段最多10个字。 + * 当字段relationType的值为CUSTOM时,本字段必填; + * 当字段relationType的值不为CUSTOM时,本字段无需填写。 + *+ */ + @SerializedName("custom_relation") + private String customRelation; +} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingResult.java similarity index 98% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingResult.java index 3b5107276..e9ace7092 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingResult.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.google.gson.Gson; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReturnResult.java similarity index 97% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReturnResult.java index 7af95570c..c366c3ca5 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingReturnResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReturnResult.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.thoughtworks.xstream.annotations.XStreamAlias; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReturnResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReturnV3Result.java similarity index 97% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReturnResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReturnV3Result.java index d862454ab..de6b633b5 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingReturnResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingReturnV3Result.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.google.gson.annotations.SerializedName; import lombok.Data; @@ -13,7 +13,7 @@ import java.io.Serializable; * created on 2021-6-25 */ @Data -public class ProfitSharingReturnResult implements Serializable { +public class ProfitSharingReturnV3Result implements Serializable { private static final long serialVersionUID = -2175582517588397426L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnfreezeResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingUnfreezeV3Result.java similarity index 97% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnfreezeResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingUnfreezeV3Result.java index 2e3fdc761..a30017ade 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingUnfreezeResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingUnfreezeV3Result.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.google.gson.annotations.SerializedName; import lombok.Data; @@ -14,7 +14,7 @@ import java.util.List; * created on 2021-6-25 */ @Data -public class ProfitSharingUnfreezeResult implements Serializable { +public class ProfitSharingUnfreezeV3Result implements Serializable { private static final long serialVersionUID = 5053171678880645337L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingV3Result.java similarity index 97% rename from weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingResult.java rename to weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingV3Result.java index 6fd84afdd..1038f4d64 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingResult.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/result/ProfitSharingV3Result.java @@ -1,4 +1,4 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; +package com.github.binarywang.wxpay.bean.profitsharing.result; import com.google.gson.annotations.SerializedName; @@ -15,7 +15,7 @@ import java.util.List; * created on 2021-6-24 */ @Data -public class ProfitSharingResult implements Serializable { +public class ProfitSharingV3Result implements Serializable { private static final long serialVersionUID = -6201692412535987502L; /** diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingNotifyResult.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingNotifyResult.java deleted file mode 100644 index 238561a7a..000000000 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/profitsharing/v3/ProfitSharingNotifyResult.java +++ /dev/null @@ -1,128 +0,0 @@ -package com.github.binarywang.wxpay.bean.profitsharing.v3; - -import com.google.gson.annotations.SerializedName; -import lombok.Data; -import lombok.NoArgsConstructor; - -import java.io.Serializable; - -/** - * - * 微信V3接口 - * 分账动账通知解密后数据实体 - * - * @author yuanbo - * @since 2022-04-26-21:08 PM - */ -@Data -@NoArgsConstructor -public class ProfitSharingNotifyResult implements Serializable { - private static final long serialVersionUID = -2875006651351414624L; - - /** - *- * 字段名:直连商户号 - * 是否必填:是 - * 描述:直连模式分账发起和出资商户 - *- */ - @SerializedName("mchid") - private String mchId; - - /** - *- * 字段名:微信订单号 - * 是否必填:是 - * 描述:微信支付订单号 - *- */ - @SerializedName("transaction_id") - private String transactionId; - - /** - *- * 字段名:微信分账/回退单号 - * 是否必填:是 - * 描述:微信分账/回退单号 - *- */ - @SerializedName("order_id") - private String orderId; - - /** - *- * 字段名:商户分账/回退单号 - * 是否必填:是 - * 描述:分账方系统内部的分账/回退单号 - *- */ - @SerializedName("out_order_no") - private String outOrderNo; - - /** - *- * 字段名:分账接收方 - * 是否必填:是 - * 描述:分账接收方对象 - *- */ - @SerializedName("receiver") - private Receiver receiver; - - /** - *- * 字段名:成功时间 - * 是否必填:是 - * 描述:成功时间,Rfc3339标准 - *- */ - @SerializedName("success_time") - private String successTime; - - @Data - @NoArgsConstructor - public static class Receiver implements Serializable { - - private static final long serialVersionUID = -931070141604645363L; - - /** - *- * 字段名:分账接收方类型 - * 是否必填:是 - * 描述:MERCHANT_ID:商户号(mch_id或者sub_mch_id) - *- */ - @SerializedName("type") - private String type; - - /** - *- * 字段名:分账接收方账号 - * 是否必填:是 - * 描述:申请本功能商户号 - *- */ - @SerializedName("account") - private String account; - - /** - *- * 字段名:分账动账金额 - * 是否必填:是 - * 描述:分账动账金额,单位为分,只能为整数 - *- */ - @SerializedName("amount") - private Integer amount; - - /** - *- * 字段名:分账/回退描述 - * 是否必填:是 - * 描述:分账/回退描述 - *- */ - @SerializedName("description") - private String description; - } -} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingService.java index df21cfdab..a7026e8bb 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingService.java @@ -1,6 +1,7 @@ package com.github.binarywang.wxpay.service; -import com.github.binarywang.wxpay.bean.profitsharing.*; +import com.github.binarywang.wxpay.bean.profitsharing.request.*; +import com.github.binarywang.wxpay.bean.profitsharing.result.*; import com.github.binarywang.wxpay.exception.WxPayException; /** @@ -55,7 +56,7 @@ public interface ProfitSharingService { * @return . * @throws WxPayException the wx pay exception */ - ProfitSharingResult profitSharingFinish(ProfitSharingFinishRequest request) throws WxPayException; + ProfitSharingResult profitSharingFinish(ProfitSharingUnfreezeRequest request) throws WxPayException; /** *diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingV3Service.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingV3Service.java index 27d66e4e7..05d891998 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingV3Service.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingV3Service.java @@ -1,7 +1,10 @@ package com.github.binarywang.wxpay.service; import com.github.binarywang.wxpay.bean.notify.SignatureHeader; -import com.github.binarywang.wxpay.bean.profitsharing.v3.*; +import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Response; +import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Result; +import com.github.binarywang.wxpay.bean.profitsharing.request.*; +import com.github.binarywang.wxpay.bean.profitsharing.result.*; import com.github.binarywang.wxpay.exception.WxPayException; /** @@ -21,13 +24,13 @@ public interface ProfitSharingV3Service { ** * @param subMchId 子商户号(微信支付分配的子商户号,即分账的出资商户号) - * @return {@link ProfitSharingMerchantMaxRatioQueryResult} 特约商户设置的允许服务商分账的最大比例结果 + * @return {@link ProfitSharingMerchantRatioQueryV3Result} 特约商户设置的允许服务商分账的最大比例结果 * @throws WxPayException the wx pay exception * @see 服务商平台>>API字典>>资金应用>>分账>>查询最大分账比例 * @since 4.4.0 * @date 2022-12-09 */ - ProfitSharingMerchantMaxRatioQueryResult getProfitSharingMerchantMaxRatio(String subMchId) throws WxPayException; + ProfitSharingMerchantRatioQueryV3Result profitSharingMerchantRatioQuery(String subMchId) throws WxPayException; /** *@@ -42,12 +45,12 @@ public interface ProfitSharingV3Service { * 此接口采用异步处理模式,即在接收到商户请求后,优先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取 ** - * @param request {@link ProfitSharingRequest} 针对某一笔支付订单的分账方法 - * @return {@link ProfitSharingResult} 微信返回的分账结果 + * @param request {@link ProfitSharingV3Request} 针对某一笔支付订单的分账方法 + * @return {@link ProfitSharingV3Result} 微信返回的分账结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingResult profitSharing(ProfitSharingRequest request) throws WxPayException; + ProfitSharingV3Result profitSharing(ProfitSharingV3Request request) throws WxPayException; /** *@@ -63,11 +66,11 @@ public interface ProfitSharingV3Service { * * @param outOrderNo 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@ 。 * @param transactionId 微信支付订单号 - * @return {@link ProfitSharingResult} 微信返回的分账结果 + * @return {@link ProfitSharingV3Result} 微信返回的分账结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingResult getProfitSharingResult(String outOrderNo, String transactionId) throws WxPayException; + ProfitSharingV3Result profitSharingQuery(String outOrderNo, String transactionId) throws WxPayException; /** *@@ -84,11 +87,30 @@ public interface ProfitSharingV3Service { * @param outOrderNo 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@ 。 * @param transactionId 微信支付订单号 * @param subMchId 微信支付分配的子商户号,即分账的出资商户号。 - * @return {@link ProfitSharingResult} 微信返回的分账结果 + * @return {@link ProfitSharingV3Result} 微信返回的分账结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingResult getProfitSharingResult(String outOrderNo, String transactionId, String subMchId) throws WxPayException; + ProfitSharingV3Result profitSharingQuery(String outOrderNo, String transactionId, String subMchId) throws WxPayException; + + /** + *+ * 请求分账查询API + * + * 发起分账请求后,可调用此接口查询分账结果 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_2.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} + * + * 注意: + * 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 + *+ * + * @param request {@link ProfitSharingQueryV3Request} 针对某一笔分账订单的分账方法 + * @return {@link ProfitSharingV3Result} 微信返回的分账查询结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingV3Result profitSharingQuery(ProfitSharingQueryV3Request request) throws WxPayException; /** *@@ -106,12 +128,12 @@ public interface ProfitSharingV3Service { * • 此功能需要接收方在商户平台-交易中心-分账-分账接收设置下,开启同意分账回退后,才能使用 ** - * @param request {@link ProfitSharingReturnRequest} 针对某一笔支付订单的分账方法 - * @return {@link ProfitSharingReturnResult} 微信返回的分账回退结果 + * @param request {@link ProfitSharingReturnV3Request} 针对某一笔支付订单的分账方法 + * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingReturnResult profitSharingReturn(ProfitSharingReturnRequest request) throws WxPayException; + ProfitSharingReturnV3Result profitSharingReturn(ProfitSharingReturnV3Request request) throws WxPayException; /** *@@ -127,11 +149,11 @@ public interface ProfitSharingV3Service { * * @param outOrderNo 原发起分账请求时使用的商户系统内部的分账单号 * @param outReturnNo 调用回退接口提供的商户系统内部的回退单号 - * @return {@link ProfitSharingReturnResult} 微信返回的分账回退结果 + * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingReturnResult getProfitSharingReturnResult(String outOrderNo, String outReturnNo) throws WxPayException; + ProfitSharingReturnV3Result profitSharingReturnQuery(String outOrderNo, String outReturnNo) throws WxPayException; /** *@@ -148,11 +170,11 @@ public interface ProfitSharingV3Service { * @param outOrderNo 原发起分账请求时使用的商户系统内部的分账单号 * @param outReturnNo 调用回退接口提供的商户系统内部的回退单号 * @param subMchId 微信支付分配的子商户号,即分账的回退方商户号。 - * @return {@link ProfitSharingReturnResult} 微信返回的分账回退结果 + * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingReturnResult getProfitSharingReturnResult(String outOrderNo, String outReturnNo, String subMchId) throws WxPayException; + ProfitSharingReturnV3Result profitSharingReturnQuery(String outOrderNo, String outReturnNo, String subMchId) throws WxPayException; /** ** - * @param request {@link ProfitSharingQueryRequest} 针对某一笔分账订单的分账方法 - * @return {@link ProfitSharingResult} 微信返回的分账查询结果 + * @param request {@link ProfitSharingQueryV3Request} 针对某一笔分账订单的分账方法 + * @return {@link ProfitSharingV3Result} 微信返回的分账查询结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ @Override - public ProfitSharingResult profitSharingQuery(ProfitSharingQueryRequest request) throws WxPayException { + public ProfitSharingV3Result profitSharingQuery(ProfitSharingQueryV3Request request) throws WxPayException { String url = String.format("%s/v3/profitsharing/orders/%s?transaction_id=%s", this.payService.getPayBaseUrl(), request.getOutOrderNo(), request.getOutOrderNo()); if(StringUtils.isNotEmpty(request.getSubMchId())){ url += "&sub_mchid=" + request.getSubMchId(); } String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingResult.class); + return GSON.fromJson(result, ProfitSharingV3Result.class); } - private ProfitSharingNotifyData parseNotifyData(String data, SignatureHeader header) throws WxPayException { + private ProfitSharingNotifyV3Response parseNotifyData(String data, SignatureHeader header) throws WxPayException { if (Objects.nonNull(header) && !this.verifyNotifySign(header, data)) { throw new WxPayException("非法请求,头部信息验证失败"); } - return GSON.fromJson(data, ProfitSharingNotifyData.class); + return GSON.fromJson(data, ProfitSharingNotifyV3Response.class); } /** diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryResultTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryResultTest.java index 321131368..516b8e1b5 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryResultTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingQueryResultTest.java @@ -1,5 +1,6 @@ package com.github.binarywang.wxpay.bean.profitsharing; +import com.github.binarywang.wxpay.bean.profitsharing.result.ProfitSharingQueryResult; import org.testng.annotations.Test; import java.util.List; diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingResultTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingV3ResultTest.java similarity index 94% rename from weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingResultTest.java rename to weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingV3ResultTest.java index f9bf0e838..2d558b9b5 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingResultTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/bean/profitsharing/ProfitSharingV3ResultTest.java @@ -1,12 +1,13 @@ package com.github.binarywang.wxpay.bean.profitsharing; +import com.github.binarywang.wxpay.bean.profitsharing.result.ProfitSharingResult; import org.testng.annotations.Test; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -public class ProfitSharingResultTest { +public class ProfitSharingV3ResultTest { @Test public void testGetReceiverList() { diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java index 2dab5b1ab..3a50c2528 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java @@ -1,6 +1,10 @@ package com.github.binarywang.wxpay.service.impl; import com.github.binarywang.wxpay.bean.profitsharing.*; +import com.github.binarywang.wxpay.bean.profitsharing.request.*; +import com.github.binarywang.wxpay.bean.profitsharing.result.ProfitSharingMerchantRatioQueryResult; +import com.github.binarywang.wxpay.bean.profitsharing.result.ProfitSharingOrderAmountQueryResult; +import com.github.binarywang.wxpay.bean.profitsharing.result.ProfitSharingQueryResult; import com.github.binarywang.wxpay.constant.WxPayConstants; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.WxPayService; @@ -52,7 +56,7 @@ public class ProfitSharingServiceImplTest { @Test public void testProfitSharingFinish() throws WxPayException { - ProfitSharingFinishRequest request = ProfitSharingFinishRequest + ProfitSharingUnfreezeRequest request = ProfitSharingUnfreezeRequest .newBuilder() .outOrderNo("20191023103251431856285") .transactionId("4200000441201910238267278073") diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImplTest.java index 72314dad7..76af66b9e 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImplTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImplTest.java @@ -30,6 +30,6 @@ public class ProfitSharingV3ServiceImplTest { header.setNonce("Wechatpay-Nonce"); header.setSignature("Wechatpay-Signature"); String data = "body"; - log.info(this.payService.getProfitSharingV3Service().getProfitSharingNotifyResult(data,header).toString()); + log.info(this.payService.getProfitSharingV3Service().parseProfitSharingNotifyResult(data,header).toString()); } } -- Gitee From 8afeab87227f64a6b2181a6ca37690ce401c23e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=9B=9B=E5=8F=B6=E8=8D=89?= <362692680@qq.com> Date: Wed, 23 Aug 2023 13:12:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E9=87=8D=E6=9E=84=E5=88=86=E8=B4=A6?= =?UTF-8?q?=E7=9B=B8=E5=85=B3=E6=8E=A5=E5=8F=A3=EF=BC=8C=E5=90=88=E5=B9=B6?= =?UTF-8?q?=E5=88=86=E8=B4=A6v2=E3=80=81v3=E5=AE=9E=E7=8E=B0=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../wxpay/service/ProfitSharingService.java | 270 ++++++++++++++++- .../wxpay/service/ProfitSharingV3Service.java | 282 ------------------ .../wxpay/service/WxPayService.java | 9 +- .../service/impl/BaseWxPayServiceImpl.java | 3 - .../impl/ProfitSharingServiceImpl.java | 171 +++++++++++ .../impl/ProfitSharingV3ServiceImpl.java | 207 ------------- .../impl/ProfitSharingServiceImplTest.java | 12 + .../impl/ProfitSharingV3ServiceImplTest.java | 35 --- 8 files changed, 452 insertions(+), 537 deletions(-) delete mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingV3Service.java delete mode 100644 weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImpl.java delete mode 100644 weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImplTest.java diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingService.java index a7026e8bb..64e887282 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingService.java @@ -1,5 +1,8 @@ package com.github.binarywang.wxpay.service; +import com.github.binarywang.wxpay.bean.notify.SignatureHeader; +import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Response; +import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Result; import com.github.binarywang.wxpay.bean.profitsharing.request.*; import com.github.binarywang.wxpay.bean.profitsharing.result.*; import com.github.binarywang.wxpay.exception.WxPayException; @@ -42,6 +45,26 @@ public interface ProfitSharingService { */ ProfitSharingResult multiProfitSharing(ProfitSharingRequest request) throws WxPayException; + /** + *@@ -167,12 +189,12 @@ public interface ProfitSharingV3Service { * • 此接口采用异步处理模式,即在接收到商户请求后,优先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取 ** - * @param request 解冻剩余资金请求实体 {@link ProfitSharingUnfreezeRequest} - * @return {@link ProfitSharingReturnResult} 微信返回的解冻剩余资金结果 + * @param request 解冻剩余资金请求实体 {@link ProfitSharingUnfreezeV3Request} + * @return {@link ProfitSharingReturnV3Result} 微信返回的解冻剩余资金结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingUnfreezeResult profitSharingUnfreeze(ProfitSharingUnfreezeRequest request) throws WxPayException; + ProfitSharingUnfreezeV3Result profitSharingUnfreeze(ProfitSharingUnfreezeV3Request request) throws WxPayException; /** *@@ -184,11 +206,11 @@ public interface ProfitSharingV3Service { ** * @param transactionId 微信订单号,微信支付订单号 - * @return {@link ProfitSharingUnsplitResult} 微信返回的订单剩余待分金额结果 + * @return {@link ProfitSharingOrderAmountQueryV3Result} 微信返回的订单剩余待分金额结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingUnsplitResult getProfitSharingUnsplitAmount(String transactionId) throws WxPayException; + ProfitSharingOrderAmountQueryV3Result profitSharingUnsplitAmountQuery(String transactionId) throws WxPayException; /** *@@ -199,12 +221,12 @@ public interface ProfitSharingV3Service { * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/receivers/add ** - * @param receiver 分账接收方实体 {@link ProfitSharingReceiver} - * @return {@link ProfitSharingReceiver} 微信返回的分账接收方结果 + * @param request 分账接收方实体 {@link ProfitSharingReceiverV3Request} + * @return {@link ProfitSharingReceiverV3Result} 微信返回的分账接收方结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingReceiver addProfitSharingReceiver(ProfitSharingReceiver receiver) throws WxPayException; + ProfitSharingReceiverV3Result addReceiver(ProfitSharingReceiverV3Request request) throws WxPayException; /** *@@ -215,12 +237,12 @@ public interface ProfitSharingV3Service { * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/receivers/delete ** - * @param receiver 分账接收方实体 {@link ProfitSharingReceiver} - * @return {@link ProfitSharingReceiver} 微信返回的删除的分账接收方结果 + * @param request 分账接收方实体 {@link ProfitSharingReceiverV3Request} + * @return {@link ProfitSharingReceiverV3Result} 微信返回的删除的分账接收方结果 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingReceiver deleteProfitSharingReceiver(ProfitSharingReceiver receiver) throws WxPayException; + ProfitSharingReceiverV3Result removeReceiver(ProfitSharingReceiverV3Request request) throws WxPayException; /** @@ -234,28 +256,11 @@ public interface ProfitSharingV3Service { * * @param notifyData 分账通知实体 * @param header 分账通知头 {@link SignatureHeader} - * @return {@link ProfitSharingNotifyData} 资源对象 + * @return {@link ProfitSharingNotifyV3Response} 资源对象 * @throws WxPayException the wx pay exception * @see 微信文档 */ - ProfitSharingNotifyResult getProfitSharingNotifyResult(String notifyData, SignatureHeader header) throws WxPayException; - - /** - *- * 分账动账通知-服务商 - * - * 分账或分账回退成功后,微信会把相关变动结果发送给分账接收方(只支持商户)。 - * 对后台通知交互时,如果微信收到应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_10.shtml - *- * - * @param notifyData 分账通知实体 - * @param header 分账通知头 {@link SignatureHeader} - * @return {@link ProfitSharingNotifyData} 资源对象 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingPartnerNotifyResult getProfitSharingPartnerNotifyResult(String notifyData, SignatureHeader header) throws WxPayException; + ProfitSharingNotifyV3Result parseProfitSharingNotifyResult(String notifyData, SignatureHeader header) throws WxPayException; /** *@@ -266,30 +271,12 @@ public interface ProfitSharingV3Service { * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/bills ** - * @param request 申请分账账单请求实体({@link ProfitSharingBillRequest}) - * @return {@link ProfitSharingBillResult} 申请分账账单结果类 + * @param request 申请分账账单请求实体({@link ProfitSharingBillV3Request}) + * @return {@link ProfitSharingBillV3Result} 申请分账账单结果类 * @throws WxPayException the wx pay exception * @see 服务商平台>>API字典>>资金应用>>分账>>申请分账账单API * @since 4.4.0 * @date 2022-12-09 */ - ProfitSharingBillResult getProfitSharingBill(ProfitSharingBillRequest request) throws WxPayException; - /** - *- * 请求分账查询API - * - * 发起分账请求后,可调用此接口查询分账结果 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_2.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} - * - * 注意: - * 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 - *- * - * @param request {@link ProfitSharingQueryRequest} 针对某一笔分账订单的分账方法 - * @return {@link ProfitSharingResult} 微信返回的分账查询结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingResult profitSharingQuery(ProfitSharingQueryRequest request) throws WxPayException; + ProfitSharingBillV3Result profitSharingBill(ProfitSharingBillV3Request request) throws WxPayException; } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java index 8d25a63d1..71d957619 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java @@ -1,6 +1,7 @@ package com.github.binarywang.wxpay.service.impl; -import com.github.binarywang.wxpay.bean.profitsharing.*; +import com.github.binarywang.wxpay.bean.profitsharing.request.*; +import com.github.binarywang.wxpay.bean.profitsharing.result.*; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.ProfitSharingService; @@ -40,7 +41,7 @@ public class ProfitSharingServiceImpl implements ProfitSharingService { } @Override - public ProfitSharingResult profitSharingFinish(ProfitSharingFinishRequest request) throws WxPayException { + public ProfitSharingResult profitSharingFinish(ProfitSharingUnfreezeRequest request) throws WxPayException { request.checkAndSign(this.payService.getConfig()); String url = this.payService.getPayBaseUrl() + "/secapi/pay/profitsharingfinish"; diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImpl.java index f2a1cf597..56c0278b4 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImpl.java @@ -1,7 +1,10 @@ package com.github.binarywang.wxpay.service.impl; import com.github.binarywang.wxpay.bean.notify.SignatureHeader; -import com.github.binarywang.wxpay.bean.profitsharing.v3.*; +import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Response; +import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Result; +import com.github.binarywang.wxpay.bean.profitsharing.request.*; +import com.github.binarywang.wxpay.bean.profitsharing.result.*; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.ProfitSharingV3Service; import com.github.binarywang.wxpay.service.WxPayService; @@ -32,127 +35,111 @@ public class ProfitSharingV3ServiceImpl implements ProfitSharingV3Service { private final WxPayService payService; @Override - public ProfitSharingMerchantMaxRatioQueryResult getProfitSharingMerchantMaxRatio(String subMchId) throws WxPayException { + public ProfitSharingMerchantRatioQueryV3Result profitSharingMerchantRatioQuery(String subMchId) throws WxPayException { String url = String.format("%s/v3/profitsharing/merchant-configs/%s", this.payService.getPayBaseUrl(), subMchId); String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingMerchantMaxRatioQueryResult.class); + return GSON.fromJson(result, ProfitSharingMerchantRatioQueryV3Result.class); } @Override - public ProfitSharingResult profitSharing(ProfitSharingRequest request) throws WxPayException { + public ProfitSharingV3Result profitSharing(ProfitSharingV3Request request) throws WxPayException { String url = String.format("%s/v3/profitsharing/orders", this.payService.getPayBaseUrl()); RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingResult.class); + return GSON.fromJson(result, ProfitSharingV3Result.class); } @Override - public ProfitSharingResult getProfitSharingResult(String outOrderNo, String transactionId) throws WxPayException { + public ProfitSharingV3Result profitSharingQuery(String outOrderNo, String transactionId) throws WxPayException { String url = String.format("%s/v3/profitsharing/orders/%s?transaction_id=%s", this.payService.getPayBaseUrl(), outOrderNo, transactionId); String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingResult.class); + return GSON.fromJson(result, ProfitSharingV3Result.class); } @Override - public ProfitSharingResult getProfitSharingResult(String outOrderNo, String transactionId, String subMchId) + public ProfitSharingV3Result profitSharingQuery(String outOrderNo, String transactionId, String subMchId) throws WxPayException { String url = String.format("%s/v3/profitsharing/orders/%s?sub_mchid=%s&transaction_id=%s", this.payService.getPayBaseUrl(), outOrderNo, subMchId, transactionId); String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingResult.class); + return GSON.fromJson(result, ProfitSharingV3Result.class); } @Override - public ProfitSharingReturnResult profitSharingReturn(ProfitSharingReturnRequest request) throws WxPayException { + public ProfitSharingReturnV3Result profitSharingReturn(ProfitSharingReturnV3Request request) throws WxPayException { String url = String.format("%s/v3/profitsharing/return-orders", this.payService.getPayBaseUrl()); RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingReturnResult.class); + return GSON.fromJson(result, ProfitSharingReturnV3Result.class); } @Override - public ProfitSharingReturnResult getProfitSharingReturnResult(String outOrderNo, String outReturnNo) throws WxPayException { + public ProfitSharingReturnV3Result profitSharingReturnQuery(String outOrderNo, String outReturnNo) throws WxPayException { String url = String.format("%s/v3/profitsharing/return-orders/%s?out_order_no=%s", this.payService.getPayBaseUrl(), outReturnNo, outOrderNo); String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingReturnResult.class); + return GSON.fromJson(result, ProfitSharingReturnV3Result.class); } @Override - public ProfitSharingReturnResult getProfitSharingReturnResult(String outOrderNo, String outReturnNo, String subMchId) + public ProfitSharingReturnV3Result profitSharingReturnQuery(String outOrderNo, String outReturnNo, String subMchId) throws WxPayException { String url = String.format("%s/v3/profitsharing/return-orders/%s?sub_mchid=%s&out_order_no=%s", this.payService.getPayBaseUrl(), outReturnNo, subMchId, outOrderNo); String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingReturnResult.class); + return GSON.fromJson(result, ProfitSharingReturnV3Result.class); } @Override - public ProfitSharingUnfreezeResult profitSharingUnfreeze(ProfitSharingUnfreezeRequest request) throws WxPayException { + public ProfitSharingUnfreezeV3Result profitSharingUnfreeze(ProfitSharingUnfreezeV3Request request) throws WxPayException { String url = String.format("%s/v3/profitsharing/orders/unfreeze", this.payService.getPayBaseUrl()); RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingUnfreezeResult.class); + return GSON.fromJson(result, ProfitSharingUnfreezeV3Result.class); } @Override - public ProfitSharingUnsplitResult getProfitSharingUnsplitAmount(String transactionId) throws WxPayException { + public ProfitSharingOrderAmountQueryV3Result profitSharingUnsplitAmountQuery(String transactionId) throws WxPayException { String url = String.format("%s/v3/profitsharing/transactions/%s/amounts", this.payService.getPayBaseUrl(), transactionId); String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingUnsplitResult.class); + return GSON.fromJson(result, ProfitSharingOrderAmountQueryV3Result.class); } @Override - public ProfitSharingReceiver addProfitSharingReceiver(ProfitSharingReceiver request) throws WxPayException { + public ProfitSharingReceiverV3Result addReceiver(ProfitSharingReceiverV3Request request) throws WxPayException { String url = String.format("%s/v3/profitsharing/receivers/add", this.payService.getPayBaseUrl()); RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingReceiver.class); + return GSON.fromJson(result, ProfitSharingReceiverV3Result.class); } @Override - public ProfitSharingReceiver deleteProfitSharingReceiver(ProfitSharingReceiver request) throws WxPayException { + public ProfitSharingReceiverV3Result removeReceiver(ProfitSharingReceiverV3Request request) throws WxPayException { String url = String.format("%s/v3/profitsharing/receivers/delete", this.payService.getPayBaseUrl()); RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingReceiver.class); + return GSON.fromJson(result, ProfitSharingReceiverV3Result.class); } @Override - public ProfitSharingNotifyResult getProfitSharingNotifyResult(String notifyData, SignatureHeader header) throws WxPayException { - ProfitSharingNotifyData response = parseNotifyData(notifyData, header); - ProfitSharingNotifyData.Resource resource = response.getResource(); + public ProfitSharingNotifyV3Result parseProfitSharingNotifyResult(String notifyData, SignatureHeader header) throws WxPayException { + ProfitSharingNotifyV3Response response = parseNotifyData(notifyData, header); + ProfitSharingNotifyV3Response.Resource resource = response.getResource(); String cipherText = resource.getCipherText(); String associatedData = resource.getAssociatedData(); String nonce = resource.getNonce(); String apiV3Key = this.payService.getConfig().getApiV3Key(); try { String result = AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key); - return GSON.fromJson(result, ProfitSharingNotifyResult.class); + return GSON.fromJson(result, ProfitSharingNotifyV3Result.class); } catch (GeneralSecurityException | IOException e) { throw new WxPayException("解析报文异常!", e); } } @Override - public ProfitSharingPartnerNotifyResult getProfitSharingPartnerNotifyResult(String notifyData, SignatureHeader header) throws WxPayException { - ProfitSharingNotifyData response = parseNotifyData(notifyData, header); - ProfitSharingNotifyData.Resource resource = response.getResource(); - String cipherText = resource.getCipherText(); - String associatedData = resource.getAssociatedData(); - String nonce = resource.getNonce(); - String apiV3Key = this.payService.getConfig().getApiV3Key(); - try { - String result = AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key); - return GSON.fromJson(result, ProfitSharingPartnerNotifyResult.class); - } catch (GeneralSecurityException | IOException e) { - throw new WxPayException("解析报文异常!", e); - } - } - - @Override - public ProfitSharingBillResult getProfitSharingBill(ProfitSharingBillRequest request) throws WxPayException { + public ProfitSharingBillV3Result profitSharingBill(ProfitSharingBillV3Request request) throws WxPayException { String url = String.format("%s/v3/profitsharing/bills?bill_date=%s", this.payService.getPayBaseUrl(), request.getBillDate()); @@ -163,7 +150,7 @@ public class ProfitSharingV3ServiceImpl implements ProfitSharingV3Service { url = String.format("%s&tar_type=%s", url, request.getTarType()); } String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingBillResult.class); + return GSON.fromJson(result, ProfitSharingBillV3Result.class); } /** @@ -178,27 +165,27 @@ public class ProfitSharingV3ServiceImpl implements ProfitSharingV3Service { * 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 *+ * 请求分账API + * + * 微信订单支付成功后,商户发起分账请求,将结算后的资金分到分账接收方 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_1.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders + * + * 注意: + * 对同一笔订单最多能发起20次分账请求,每次请求最多分给50个接收方 + * 此接口采用异步处理模式,即在接收到商户请求后,优先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取 + *+ * + * @param request {@link ProfitSharingV3Request} 针对某一笔支付订单的分账方法 + * @return {@link ProfitSharingV3Result} 微信返回的分账结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingV3Result profitSharingV3(ProfitSharingV3Request request) throws WxPayException; + /** ** 1、不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给特约商户 @@ -84,6 +107,38 @@ public interface ProfitSharingService { */ ProfitSharingReceiverResult removeReceiver(ProfitSharingReceiverRequest request) throws WxPayException; + /** + *+ * 添加分账接收方API + * + * 商户发起添加分账接收方请求,建立分账接收方列表。后续可通过发起分账请求,将分账方商户结算后的资金,分到该分账接收方 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_8.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/receivers/add + *+ * + * @param request 分账接收方实体 {@link ProfitSharingReceiverV3Request} + * @return {@link ProfitSharingReceiverV3Result} 微信返回的分账接收方结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingReceiverV3Result addReceiverV3(ProfitSharingReceiverV3Request request) throws WxPayException; + + /** + *+ * 删除分账接收方API + * + * 商户发起删除分账接收方请求。删除后,不支持将分账方商户结算后的资金,分到该分账接收方 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_9.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/receivers/delete + *+ * + * @param request 分账接收方实体 {@link ProfitSharingReceiverV3Request} + * @return {@link ProfitSharingReceiverV3Result} 微信返回的删除的分账接收方结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingReceiverV3Result removeReceiverV3(ProfitSharingReceiverV3Request request) throws WxPayException; + /** * TODO:微信返回签名失败 *@@ -97,6 +152,66 @@ public interface ProfitSharingService { */ ProfitSharingQueryResult profitSharingQuery(ProfitSharingQueryRequest request) throws WxPayException; + /** + *+ * 查询分账结果API(商户平台) + * + * 发起分账请求后,可调用此接口查询分账结果 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_2.shtml + * 接口链接:https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} + * + * 注意: + * • 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 + *+ * + * @param outOrderNo 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@ 。 + * @param transactionId 微信支付订单号 + * @return {@link ProfitSharingV3Result} 微信返回的分账结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingV3Result profitSharingQueryV3(String outOrderNo, String transactionId) throws WxPayException; + + /** + *+ * 查询分账结果API(服务商平台) + * + * 发起分账请求后,可调用此接口查询分账结果 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_1_2.shtml + * 接口链接:https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} + * + * 注意: + * • 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 + *+ * + * @param outOrderNo 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@ 。 + * @param transactionId 微信支付订单号 + * @param subMchId 微信支付分配的子商户号,即分账的出资商户号。 + * @return {@link ProfitSharingV3Result} 微信返回的分账结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingV3Result profitSharingQueryV3(String outOrderNo, String transactionId, String subMchId) throws WxPayException; + + /** + *+ * 请求分账查询API + * + * 发起分账请求后,可调用此接口查询分账结果 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_2.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} + * + * 注意: + * 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 + *+ * + * @param request {@link ProfitSharingQueryV3Request} 针对某一笔分账订单的分账方法 + * @return {@link ProfitSharingV3Result} 微信返回的分账查询结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingV3Result profitSharingQueryV3(ProfitSharingQueryV3Request request) throws WxPayException; + /** ** 服务商可通过调用此接口查询订单剩余待分金额。 @@ -111,6 +226,22 @@ public interface ProfitSharingService { */ ProfitSharingOrderAmountQueryResult profitSharingOrderAmountQuery(ProfitSharingOrderAmountQueryRequest request) throws WxPayException; + /** + *+ * 查询剩余待分金额API + * + * 可调用此接口查询订单剩余待分金额 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_6.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/transactions/{transaction_id}/amounts + *+ * + * @param transactionId 微信订单号,微信支付订单号 + * @return {@link ProfitSharingOrderAmountQueryV3Result} 微信返回的订单剩余待分金额结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingOrderAmountQueryV3Result profitSharingUnsplitAmountQueryV3(String transactionId) throws WxPayException; + /** ** 服务商可以查询子商户设置的允许服务商分账的最大比例。 @@ -125,6 +256,24 @@ public interface ProfitSharingService { */ ProfitSharingMerchantRatioQueryResult profitSharingMerchantRatioQuery(ProfitSharingMerchantRatioQueryRequest request) throws WxPayException; + /** + *+ * 查询最大分账比例 + * + * 可调用此接口查询特约商户设置的允许服务商分账的最大比例 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_1_7.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/merchant-configs/{sub_mchid} + *+ * + * @param subMchId 子商户号(微信支付分配的子商户号,即分账的出资商户号) + * @return {@link ProfitSharingMerchantRatioQueryV3Result} 特约商户设置的允许服务商分账的最大比例结果 + * @throws WxPayException the wx pay exception + * @see 服务商平台>>API字典>>资金应用>>分账>>查询最大分账比例 + * @since 4.4.0 + * @date 2022-12-09 + */ + ProfitSharingMerchantRatioQueryV3Result profitSharingMerchantRatioQueryV3(String subMchId) throws WxPayException; + /** * TODO:这个接口用真实的数据返回【参数不正确】,我对比官方文档除了缺少sub_mch_id,和sub_appid之外其他相同,当我随便填了一个商户id的时候,提示【回退方没有开通分账回退功能】 *@@ -143,6 +292,29 @@ public interface ProfitSharingService { */ ProfitSharingReturnResult profitSharingReturn(ProfitSharingReturnRequest returnRequest) throws WxPayException; + /** + *+ * 请求分账回退API + * + * 如果订单已经分账,在退款时,可以先调此接口,将已分账的资金从分账接收方的账户回退给分账方,再发起退款 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_3.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/return-orders + * + * 注意: + * • 分账回退以原分账单为依据,支持多次回退,申请回退总金额不能超过原分账单分给该接收方的金额 + * • 此接口采用同步处理模式,即在接收到商户请求后,会实时返回处理结果 + * • 对同一笔分账单最多能发起20次分账回退请求 + * • 退款和分账回退没有耦合,分账回退可以先于退款请求,也可以后于退款请求 + * • 此功能需要接收方在商户平台-交易中心-分账-分账接收设置下,开启同意分账回退后,才能使用 + *+ * + * @param request {@link ProfitSharingReturnV3Request} 针对某一笔支付订单的分账方法 + * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingReturnV3Result profitSharingReturnV3(ProfitSharingReturnV3Request request) throws WxPayException; + /** * TODO:因profitsharingReturn接口无法使用,没有办法对这里进行真实的测试,模拟数据这里返回【记录不存在】 *@@ -157,7 +329,101 @@ public interface ProfitSharingService { * @return . * @throws WxPayException . */ - ProfitSharingReturnResult profitSharingReturnQuery(ProfitSharingReturnQueryRequest queryRequest) - throws WxPayException; + ProfitSharingReturnResult profitSharingReturnQuery(ProfitSharingReturnQueryRequest queryRequest) throws WxPayException; + /** + *+ * 查询分账回退结果API(商户平台) + * + * 商户需要核实回退结果,可调用此接口查询回退结果 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_4.shtml + * 接口链接:https://api.mch.weixin.qq.com/v3/profitsharing/return-orders/{out_return_no} + * + * 注意: + * • 如果分账回退接口返回状态为处理中,可调用此接口查询回退结果 + *+ * + * @param outOrderNo 原发起分账请求时使用的商户系统内部的分账单号 + * @param outReturnNo 调用回退接口提供的商户系统内部的回退单号 + * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingReturnV3Result profitSharingReturnQueryV3(String outOrderNo, String outReturnNo) throws WxPayException; + + /** + *+ * 查询分账回退结果API(服务商平台) + * + * 商户需要核实回退结果,可调用此接口查询回退结果 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_1_3.shtml + * 接口链接:https://api.mch.weixin.qq.com/v3/profitsharing/return-orders/{out_return_no} + * + * 注意: + * • 如果分账回退接口返回状态为处理中,可调用此接口查询回退结果 + *+ * + * @param outOrderNo 原发起分账请求时使用的商户系统内部的分账单号 + * @param outReturnNo 调用回退接口提供的商户系统内部的回退单号 + * @param subMchId 微信支付分配的子商户号,即分账的回退方商户号。 + * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingReturnV3Result profitSharingReturnQueryV3(String outOrderNo, String outReturnNo, String subMchId) throws WxPayException; + + /** + *+ * 解冻剩余资金API + * + * 不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给特约商户 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_5.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders/unfreeze + * + * 注意: + * • 调用分账接口后,需要解冻剩余资金时,调用本接口将剩余的分账金额全部解冻给特约商户 + * • 此接口采用异步处理模式,即在接收到商户请求后,优先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取 + *+ * + * @param request 解冻剩余资金请求实体 {@link ProfitSharingUnfreezeV3Request} + * @return {@link ProfitSharingReturnV3Result} 微信返回的解冻剩余资金结果 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingUnfreezeV3Result profitSharingUnfreeze(ProfitSharingUnfreezeV3Request request) throws WxPayException; + + /** + *+ * 分账动账通知 + * + * 分账或分账回退成功后,微信会把相关变动结果发送给分账接收方(只支持商户)。 + * 对后台通知交互时,如果微信收到应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_10.shtml + *+ * + * @param notifyData 分账通知实体 + * @param header 分账通知头 {@link SignatureHeader} + * @return {@link ProfitSharingNotifyV3Response} 资源对象 + * @throws WxPayException the wx pay exception + * @see 微信文档 + */ + ProfitSharingNotifyV3Result parseProfitSharingNotifyResult(String notifyData, SignatureHeader header) throws WxPayException; + + /** + *+ * 申请分账账单 + * + * 微信支付按天提供分账账单文件,商户可以通过该接口获取账单文件的下载地址 + * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_1_11.shtml + * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/bills + *+ * + * @param request 申请分账账单请求实体({@link ProfitSharingBillV3Request}) + * @return {@link ProfitSharingBillV3Result} 申请分账账单结果类 + * @throws WxPayException the wx pay exception + * @see 服务商平台>>API字典>>资金应用>>分账>>申请分账账单API + * @since 4.4.0 + * @date 2022-12-09 + */ + ProfitSharingBillV3Result profitSharingBill(ProfitSharingBillV3Request request) throws WxPayException; } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingV3Service.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingV3Service.java deleted file mode 100644 index 05d891998..000000000 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/ProfitSharingV3Service.java +++ /dev/null @@ -1,282 +0,0 @@ -package com.github.binarywang.wxpay.service; - -import com.github.binarywang.wxpay.bean.notify.SignatureHeader; -import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Response; -import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Result; -import com.github.binarywang.wxpay.bean.profitsharing.request.*; -import com.github.binarywang.wxpay.bean.profitsharing.result.*; -import com.github.binarywang.wxpay.exception.WxPayException; - -/** - * 微信支付V3-资金应用-分账 - * - * @author pg 2021-6-23 - * @date 2021-6-23 - */ -public interface ProfitSharingV3Service { - /** - *- * 查询最大分账比例 - * - * 可调用此接口查询特约商户设置的允许服务商分账的最大比例 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_1_7.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/merchant-configs/{sub_mchid} - *- * - * @param subMchId 子商户号(微信支付分配的子商户号,即分账的出资商户号) - * @return {@link ProfitSharingMerchantRatioQueryV3Result} 特约商户设置的允许服务商分账的最大比例结果 - * @throws WxPayException the wx pay exception - * @see 服务商平台>>API字典>>资金应用>>分账>>查询最大分账比例 - * @since 4.4.0 - * @date 2022-12-09 - */ - ProfitSharingMerchantRatioQueryV3Result profitSharingMerchantRatioQuery(String subMchId) throws WxPayException; - - /** - *- * 请求分账API - * - * 微信订单支付成功后,商户发起分账请求,将结算后的资金分到分账接收方 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_1.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders - * - * 注意: - * 对同一笔订单最多能发起20次分账请求,每次请求最多分给50个接收方 - * 此接口采用异步处理模式,即在接收到商户请求后,优先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取 - *- * - * @param request {@link ProfitSharingV3Request} 针对某一笔支付订单的分账方法 - * @return {@link ProfitSharingV3Result} 微信返回的分账结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingV3Result profitSharing(ProfitSharingV3Request request) throws WxPayException; - - /** - *- * 查询分账结果API(商户平台) - * - * 发起分账请求后,可调用此接口查询分账结果 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_2.shtml - * 接口链接:https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} - * - * 注意: - * • 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 - *- * - * @param outOrderNo 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@ 。 - * @param transactionId 微信支付订单号 - * @return {@link ProfitSharingV3Result} 微信返回的分账结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingV3Result profitSharingQuery(String outOrderNo, String transactionId) throws WxPayException; - - /** - *- * 查询分账结果API(服务商平台) - * - * 发起分账请求后,可调用此接口查询分账结果 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_1_2.shtml - * 接口链接:https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} - * - * 注意: - * • 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 - *- * - * @param outOrderNo 商户系统内部的分账单号,在商户系统内部唯一,同一分账单号多次请求等同一次。只能是数字、大小写字母_-|*@ 。 - * @param transactionId 微信支付订单号 - * @param subMchId 微信支付分配的子商户号,即分账的出资商户号。 - * @return {@link ProfitSharingV3Result} 微信返回的分账结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingV3Result profitSharingQuery(String outOrderNo, String transactionId, String subMchId) throws WxPayException; - - /** - *- * 请求分账查询API - * - * 发起分账请求后,可调用此接口查询分账结果 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_2.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} - * - * 注意: - * 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 - *- * - * @param request {@link ProfitSharingQueryV3Request} 针对某一笔分账订单的分账方法 - * @return {@link ProfitSharingV3Result} 微信返回的分账查询结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingV3Result profitSharingQuery(ProfitSharingQueryV3Request request) throws WxPayException; - - /** - *- * 请求分账回退API - * - * 如果订单已经分账,在退款时,可以先调此接口,将已分账的资金从分账接收方的账户回退给分账方,再发起退款 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_3.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/return-orders - * - * 注意: - * • 分账回退以原分账单为依据,支持多次回退,申请回退总金额不能超过原分账单分给该接收方的金额 - * • 此接口采用同步处理模式,即在接收到商户请求后,会实时返回处理结果 - * • 对同一笔分账单最多能发起20次分账回退请求 - * • 退款和分账回退没有耦合,分账回退可以先于退款请求,也可以后于退款请求 - * • 此功能需要接收方在商户平台-交易中心-分账-分账接收设置下,开启同意分账回退后,才能使用 - *- * - * @param request {@link ProfitSharingReturnV3Request} 针对某一笔支付订单的分账方法 - * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingReturnV3Result profitSharingReturn(ProfitSharingReturnV3Request request) throws WxPayException; - - /** - *- * 查询分账回退结果API(商户平台) - * - * 商户需要核实回退结果,可调用此接口查询回退结果 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_4.shtml - * 接口链接:https://api.mch.weixin.qq.com/v3/profitsharing/return-orders/{out_return_no} - * - * 注意: - * • 如果分账回退接口返回状态为处理中,可调用此接口查询回退结果 - *- * - * @param outOrderNo 原发起分账请求时使用的商户系统内部的分账单号 - * @param outReturnNo 调用回退接口提供的商户系统内部的回退单号 - * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingReturnV3Result profitSharingReturnQuery(String outOrderNo, String outReturnNo) throws WxPayException; - - /** - *- * 查询分账回退结果API(服务商平台) - * - * 商户需要核实回退结果,可调用此接口查询回退结果 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_1_3.shtml - * 接口链接:https://api.mch.weixin.qq.com/v3/profitsharing/return-orders/{out_return_no} - * - * 注意: - * • 如果分账回退接口返回状态为处理中,可调用此接口查询回退结果 - *- * - * @param outOrderNo 原发起分账请求时使用的商户系统内部的分账单号 - * @param outReturnNo 调用回退接口提供的商户系统内部的回退单号 - * @param subMchId 微信支付分配的子商户号,即分账的回退方商户号。 - * @return {@link ProfitSharingReturnV3Result} 微信返回的分账回退结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingReturnV3Result profitSharingReturnQuery(String outOrderNo, String outReturnNo, String subMchId) throws WxPayException; - - /** - *- * 解冻剩余资金API - * - * 不需要进行分账的订单,可直接调用本接口将订单的金额全部解冻给特约商户 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_5.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders/unfreeze - * - * 注意: - * • 调用分账接口后,需要解冻剩余资金时,调用本接口将剩余的分账金额全部解冻给特约商户 - * • 此接口采用异步处理模式,即在接收到商户请求后,优先受理请求再异步处理,最终的分账结果可以通过查询分账接口获取 - *- * - * @param request 解冻剩余资金请求实体 {@link ProfitSharingUnfreezeV3Request} - * @return {@link ProfitSharingReturnV3Result} 微信返回的解冻剩余资金结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingUnfreezeV3Result profitSharingUnfreeze(ProfitSharingUnfreezeV3Request request) throws WxPayException; - - /** - *- * 查询剩余待分金额API - * - * 可调用此接口查询订单剩余待分金额 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_6.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/transactions/{transaction_id}/amounts - *- * - * @param transactionId 微信订单号,微信支付订单号 - * @return {@link ProfitSharingOrderAmountQueryV3Result} 微信返回的订单剩余待分金额结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingOrderAmountQueryV3Result profitSharingUnsplitAmountQuery(String transactionId) throws WxPayException; - - /** - *- * 添加分账接收方API - * - * 商户发起添加分账接收方请求,建立分账接收方列表。后续可通过发起分账请求,将分账方商户结算后的资金,分到该分账接收方 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_8.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/receivers/add - *- * - * @param request 分账接收方实体 {@link ProfitSharingReceiverV3Request} - * @return {@link ProfitSharingReceiverV3Result} 微信返回的分账接收方结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingReceiverV3Result addReceiver(ProfitSharingReceiverV3Request request) throws WxPayException; - - /** - *- * 删除分账接收方API - * - * 商户发起删除分账接收方请求。删除后,不支持将分账方商户结算后的资金,分到该分账接收方 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_9.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/receivers/delete - *- * - * @param request 分账接收方实体 {@link ProfitSharingReceiverV3Request} - * @return {@link ProfitSharingReceiverV3Result} 微信返回的删除的分账接收方结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingReceiverV3Result removeReceiver(ProfitSharingReceiverV3Request request) throws WxPayException; - - - /** - *- * 分账动账通知 - * - * 分账或分账回退成功后,微信会把相关变动结果发送给分账接收方(只支持商户)。 - * 对后台通知交互时,如果微信收到应答不是成功或超时,微信认为通知失败,微信会通过一定的策略定期重新发起通知,尽可能提高通知的成功率,但微信不保证通知最终能成功。 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_10.shtml - *- * - * @param notifyData 分账通知实体 - * @param header 分账通知头 {@link SignatureHeader} - * @return {@link ProfitSharingNotifyV3Response} 资源对象 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - ProfitSharingNotifyV3Result parseProfitSharingNotifyResult(String notifyData, SignatureHeader header) throws WxPayException; - - /** - *- * 申请分账账单 - * - * 微信支付按天提供分账账单文件,商户可以通过该接口获取账单文件的下载地址 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3_partner/apis/chapter8_1_11.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/bills - *- * - * @param request 申请分账账单请求实体({@link ProfitSharingBillV3Request}) - * @return {@link ProfitSharingBillV3Result} 申请分账账单结果类 - * @throws WxPayException the wx pay exception - * @see 服务商平台>>API字典>>资金应用>>分账>>申请分账账单API - * @since 4.4.0 - * @date 2022-12-09 - */ - ProfitSharingBillV3Result profitSharingBill(ProfitSharingBillV3Request request) throws WxPayException; -} diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java index 2bddaa975..75a992adb 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/WxPayService.java @@ -240,20 +240,13 @@ public interface WxPayService { /** * 获取分账服务类. *- * V3接口 {@link WxPayService#getProfitSharingV3Service()} + * V3接口 {@link WxPayService#getProfitSharingService()} *
* * @return the ent pay service */ ProfitSharingService getProfitSharingService(); - /** - * 获取V3分账服务类. - * - * @return the ent pay service - */ - ProfitSharingV3Service getProfitSharingV3Service(); - /** * 获取支付分服务类. * diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java index 00046c871..b92f032aa 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/BaseWxPayServiceImpl.java @@ -74,9 +74,6 @@ public abstract class BaseWxPayServiceImpl implements WxPayService { @Getter private final ProfitSharingService profitSharingService = new ProfitSharingServiceImpl(this); - @Getter - private final ProfitSharingV3Service profitSharingV3Service = new ProfitSharingV3ServiceImpl(this); - @Getter private final RedpackService redpackService = new RedpackServiceImpl(this); diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java index 71d957619..7f46a3f30 100644 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java +++ b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImpl.java @@ -1,11 +1,25 @@ package com.github.binarywang.wxpay.service.impl; +import com.github.binarywang.wxpay.bean.notify.SignatureHeader; +import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Response; +import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Result; import com.github.binarywang.wxpay.bean.profitsharing.request.*; import com.github.binarywang.wxpay.bean.profitsharing.result.*; import com.github.binarywang.wxpay.bean.result.BaseWxPayResult; import com.github.binarywang.wxpay.exception.WxPayException; import com.github.binarywang.wxpay.service.ProfitSharingService; import com.github.binarywang.wxpay.service.WxPayService; +import com.github.binarywang.wxpay.v3.auth.Verifier; +import com.github.binarywang.wxpay.v3.util.AesUtils; +import com.github.binarywang.wxpay.v3.util.RsaCryptoUtil; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import org.apache.commons.lang3.StringUtils; + +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.GeneralSecurityException; +import java.util.Objects; /** * @author Wang GuangXin 2019/10/22 10:13 @@ -13,6 +27,7 @@ import com.github.binarywang.wxpay.service.WxPayService; */ public class ProfitSharingServiceImpl implements ProfitSharingService { private WxPayService payService; + private static final Gson GSON = new GsonBuilder().create(); public ProfitSharingServiceImpl(WxPayService payService) { this.payService = payService; @@ -40,6 +55,14 @@ public class ProfitSharingServiceImpl implements ProfitSharingService { return result; } + @Override + public ProfitSharingV3Result profitSharingV3(ProfitSharingV3Request request) throws WxPayException { + String url = String.format("%s/v3/profitsharing/orders", this.payService.getPayBaseUrl()); + RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); + String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); + return GSON.fromJson(result, ProfitSharingV3Result.class); + } + @Override public ProfitSharingResult profitSharingFinish(ProfitSharingUnfreezeRequest request) throws WxPayException { request.checkAndSign(this.payService.getConfig()); @@ -73,6 +96,22 @@ public class ProfitSharingServiceImpl implements ProfitSharingService { return result; } + @Override + public ProfitSharingReceiverV3Result addReceiverV3(ProfitSharingReceiverV3Request request) throws WxPayException { + String url = String.format("%s/v3/profitsharing/receivers/add", this.payService.getPayBaseUrl()); + RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); + String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); + return GSON.fromJson(result, ProfitSharingReceiverV3Result.class); + } + + @Override + public ProfitSharingReceiverV3Result removeReceiverV3(ProfitSharingReceiverV3Request request) throws WxPayException { + String url = String.format("%s/v3/profitsharing/receivers/delete", this.payService.getPayBaseUrl()); + RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); + String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); + return GSON.fromJson(result, ProfitSharingReceiverV3Result.class); + } + @Override public ProfitSharingQueryResult profitSharingQuery(ProfitSharingQueryRequest request) throws WxPayException { request.setAppid(null); @@ -87,6 +126,34 @@ public class ProfitSharingServiceImpl implements ProfitSharingService { return result; } + @Override + public ProfitSharingV3Result profitSharingQueryV3(String outOrderNo, String transactionId) throws WxPayException { + String url = String.format("%s/v3/profitsharing/orders/%s?transaction_id=%s", this.payService.getPayBaseUrl(), + outOrderNo, transactionId); + String result = this.payService.getV3(url); + return GSON.fromJson(result, ProfitSharingV3Result.class); + } + + @Override + public ProfitSharingV3Result profitSharingQueryV3(String outOrderNo, String transactionId, String subMchId) + throws WxPayException { + String url = String.format("%s/v3/profitsharing/orders/%s?sub_mchid=%s&transaction_id=%s", + this.payService.getPayBaseUrl(), outOrderNo, subMchId, transactionId); + String result = this.payService.getV3(url); + return GSON.fromJson(result, ProfitSharingV3Result.class); + } + + @Override + public ProfitSharingV3Result profitSharingQueryV3(ProfitSharingQueryV3Request request) throws WxPayException { + String url = String.format("%s/v3/profitsharing/orders/%s?transaction_id=%s", this.payService.getPayBaseUrl(), + request.getOutOrderNo(), request.getOutOrderNo()); + if(StringUtils.isNotEmpty(request.getSubMchId())){ + url += "&sub_mchid=" + request.getSubMchId(); + } + String result = this.payService.getV3(url); + return GSON.fromJson(result, ProfitSharingV3Result.class); + } + @Override public ProfitSharingOrderAmountQueryResult profitSharingOrderAmountQuery(ProfitSharingOrderAmountQueryRequest request) throws WxPayException { request.checkAndSign(this.payService.getConfig()); @@ -98,6 +165,13 @@ public class ProfitSharingServiceImpl implements ProfitSharingService { return result; } + @Override + public ProfitSharingOrderAmountQueryV3Result profitSharingUnsplitAmountQueryV3(String transactionId) throws WxPayException { + String url = String.format("%s/v3/profitsharing/transactions/%s/amounts", this.payService.getPayBaseUrl(), transactionId); + String result = this.payService.getV3(url); + return GSON.fromJson(result, ProfitSharingOrderAmountQueryV3Result.class); + } + @Override public ProfitSharingMerchantRatioQueryResult profitSharingMerchantRatioQuery(ProfitSharingMerchantRatioQueryRequest request) throws WxPayException { request.checkAndSign(this.payService.getConfig()); @@ -109,6 +183,13 @@ public class ProfitSharingServiceImpl implements ProfitSharingService { return result; } + @Override + public ProfitSharingMerchantRatioQueryV3Result profitSharingMerchantRatioQueryV3(String subMchId) throws WxPayException { + String url = String.format("%s/v3/profitsharing/merchant-configs/%s", this.payService.getPayBaseUrl(), subMchId); + String result = this.payService.getV3(url); + return GSON.fromJson(result, ProfitSharingMerchantRatioQueryV3Result.class); + } + @Override public ProfitSharingReturnResult profitSharingReturn(ProfitSharingReturnRequest returnRequest) throws WxPayException { returnRequest.checkAndSign(this.payService.getConfig()); @@ -120,6 +201,14 @@ public class ProfitSharingServiceImpl implements ProfitSharingService { return result; } + @Override + public ProfitSharingReturnV3Result profitSharingReturnV3(ProfitSharingReturnV3Request request) throws WxPayException { + String url = String.format("%s/v3/profitsharing/return-orders", this.payService.getPayBaseUrl()); + RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); + String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); + return GSON.fromJson(result, ProfitSharingReturnV3Result.class); + } + @Override public ProfitSharingReturnResult profitSharingReturnQuery(ProfitSharingReturnQueryRequest queryRequest) throws WxPayException { queryRequest.checkAndSign(this.payService.getConfig()); @@ -130,4 +219,86 @@ public class ProfitSharingServiceImpl implements ProfitSharingService { result.checkResult(this.payService, queryRequest.getSignType(), true); return result; } + + @Override + public ProfitSharingReturnV3Result profitSharingReturnQueryV3(String outOrderNo, String outReturnNo) throws WxPayException { + String url = String.format("%s/v3/profitsharing/return-orders/%s?out_order_no=%s", this.payService.getPayBaseUrl(), + outReturnNo, outOrderNo); + String result = this.payService.getV3(url); + return GSON.fromJson(result, ProfitSharingReturnV3Result.class); + } + + @Override + public ProfitSharingReturnV3Result profitSharingReturnQueryV3(String outOrderNo, String outReturnNo, String subMchId) + throws WxPayException { + String url = String.format("%s/v3/profitsharing/return-orders/%s?sub_mchid=%s&out_order_no=%s", + this.payService.getPayBaseUrl(), outReturnNo, subMchId, outOrderNo); + String result = this.payService.getV3(url); + return GSON.fromJson(result, ProfitSharingReturnV3Result.class); + } + + @Override + public ProfitSharingUnfreezeV3Result profitSharingUnfreeze(ProfitSharingUnfreezeV3Request request) throws WxPayException { + String url = String.format("%s/v3/profitsharing/orders/unfreeze", this.payService.getPayBaseUrl()); + RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); + String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); + return GSON.fromJson(result, ProfitSharingUnfreezeV3Result.class); + } + + @Override + public ProfitSharingNotifyV3Result parseProfitSharingNotifyResult(String notifyData, SignatureHeader header) throws WxPayException { + ProfitSharingNotifyV3Response response = parseNotifyData(notifyData, header); + ProfitSharingNotifyV3Response.Resource resource = response.getResource(); + String cipherText = resource.getCipherText(); + String associatedData = resource.getAssociatedData(); + String nonce = resource.getNonce(); + String apiV3Key = this.payService.getConfig().getApiV3Key(); + try { + String result = AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key); + return GSON.fromJson(result, ProfitSharingNotifyV3Result.class); + } catch (GeneralSecurityException | IOException e) { + throw new WxPayException("解析报文异常!", e); + } + } + + @Override + public ProfitSharingBillV3Result profitSharingBill(ProfitSharingBillV3Request request) throws WxPayException { + String url = String.format("%s/v3/profitsharing/bills?bill_date=%s", this.payService.getPayBaseUrl(), + request.getBillDate()); + + if (StringUtils.isNotBlank(request.getSubMchId())) { + url = String.format("%s&sub_mchid=%s", url, request.getSubMchId()); + } + if (StringUtils.isNotBlank(request.getTarType())) { + url = String.format("%s&tar_type=%s", url, request.getTarType()); + } + String result = this.payService.getV3(url); + return GSON.fromJson(result, ProfitSharingBillV3Result.class); + } + + + + private ProfitSharingNotifyV3Response parseNotifyData(String data, SignatureHeader header) throws WxPayException { + if (Objects.nonNull(header) && !this.verifyNotifySign(header, data)) { + throw new WxPayException("非法请求,头部信息验证失败"); + } + return GSON.fromJson(data, ProfitSharingNotifyV3Response.class); + } + + /** + * 校验通知签名 + * + * @param header 通知头信息 + * @param data 通知数据 + * @return true:校验通过 false:校验不通过 + */ + private boolean verifyNotifySign(SignatureHeader header, String data) throws WxPayException { + String beforeSign = String.format("%s%n%s%n%s%n", header.getTimeStamp(), header.getNonce(), data); + Verifier verifier = this.payService.getConfig().getVerifier(); + if (verifier == null) { + throw new WxPayException("证书检验对象为空"); + } + return verifier.verify(header.getSerial(), + beforeSign.getBytes(StandardCharsets.UTF_8), header.getSignature()); + } } diff --git a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImpl.java b/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImpl.java deleted file mode 100644 index 56c0278b4..000000000 --- a/weixin-java-pay/src/main/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImpl.java +++ /dev/null @@ -1,207 +0,0 @@ -package com.github.binarywang.wxpay.service.impl; - -import com.github.binarywang.wxpay.bean.notify.SignatureHeader; -import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Response; -import com.github.binarywang.wxpay.bean.profitsharing.notify.ProfitSharingNotifyV3Result; -import com.github.binarywang.wxpay.bean.profitsharing.request.*; -import com.github.binarywang.wxpay.bean.profitsharing.result.*; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.ProfitSharingV3Service; -import com.github.binarywang.wxpay.service.WxPayService; -import com.github.binarywang.wxpay.v3.auth.Verifier; -import com.github.binarywang.wxpay.v3.util.AesUtils; -import com.github.binarywang.wxpay.v3.util.RsaCryptoUtil; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import lombok.RequiredArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; - -import java.io.IOException; -import java.nio.charset.StandardCharsets; -import java.security.GeneralSecurityException; -import java.util.Objects; - -/** - * 微信支付V3-资金应用-分账Service - * - * @author pg 2021-6-23 - * @version 1.0 - */ -@Slf4j -@RequiredArgsConstructor -public class ProfitSharingV3ServiceImpl implements ProfitSharingV3Service { - private static final Gson GSON = new GsonBuilder().create(); - private final WxPayService payService; - - @Override - public ProfitSharingMerchantRatioQueryV3Result profitSharingMerchantRatioQuery(String subMchId) throws WxPayException { - String url = String.format("%s/v3/profitsharing/merchant-configs/%s", this.payService.getPayBaseUrl(), subMchId); - String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingMerchantRatioQueryV3Result.class); - } - - @Override - public ProfitSharingV3Result profitSharing(ProfitSharingV3Request request) throws WxPayException { - String url = String.format("%s/v3/profitsharing/orders", this.payService.getPayBaseUrl()); - RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); - String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingV3Result.class); - } - - @Override - public ProfitSharingV3Result profitSharingQuery(String outOrderNo, String transactionId) throws WxPayException { - String url = String.format("%s/v3/profitsharing/orders/%s?transaction_id=%s", this.payService.getPayBaseUrl(), - outOrderNo, transactionId); - String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingV3Result.class); - } - - @Override - public ProfitSharingV3Result profitSharingQuery(String outOrderNo, String transactionId, String subMchId) - throws WxPayException { - String url = String.format("%s/v3/profitsharing/orders/%s?sub_mchid=%s&transaction_id=%s", - this.payService.getPayBaseUrl(), outOrderNo, subMchId, transactionId); - String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingV3Result.class); - } - - @Override - public ProfitSharingReturnV3Result profitSharingReturn(ProfitSharingReturnV3Request request) throws WxPayException { - String url = String.format("%s/v3/profitsharing/return-orders", this.payService.getPayBaseUrl()); - RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); - String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingReturnV3Result.class); - } - - @Override - public ProfitSharingReturnV3Result profitSharingReturnQuery(String outOrderNo, String outReturnNo) throws WxPayException { - String url = String.format("%s/v3/profitsharing/return-orders/%s?out_order_no=%s", this.payService.getPayBaseUrl(), - outReturnNo, outOrderNo); - String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingReturnV3Result.class); - } - - @Override - public ProfitSharingReturnV3Result profitSharingReturnQuery(String outOrderNo, String outReturnNo, String subMchId) - throws WxPayException { - String url = String.format("%s/v3/profitsharing/return-orders/%s?sub_mchid=%s&out_order_no=%s", - this.payService.getPayBaseUrl(), outReturnNo, subMchId, outOrderNo); - String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingReturnV3Result.class); - } - - @Override - public ProfitSharingUnfreezeV3Result profitSharingUnfreeze(ProfitSharingUnfreezeV3Request request) throws WxPayException { - String url = String.format("%s/v3/profitsharing/orders/unfreeze", this.payService.getPayBaseUrl()); - RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); - String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingUnfreezeV3Result.class); - } - - @Override - public ProfitSharingOrderAmountQueryV3Result profitSharingUnsplitAmountQuery(String transactionId) throws WxPayException { - String url = String.format("%s/v3/profitsharing/transactions/%s/amounts", this.payService.getPayBaseUrl(), transactionId); - String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingOrderAmountQueryV3Result.class); - } - - @Override - public ProfitSharingReceiverV3Result addReceiver(ProfitSharingReceiverV3Request request) throws WxPayException { - String url = String.format("%s/v3/profitsharing/receivers/add", this.payService.getPayBaseUrl()); - RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); - String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingReceiverV3Result.class); - } - - @Override - public ProfitSharingReceiverV3Result removeReceiver(ProfitSharingReceiverV3Request request) throws WxPayException { - String url = String.format("%s/v3/profitsharing/receivers/delete", this.payService.getPayBaseUrl()); - RsaCryptoUtil.encryptFields(request, this.payService.getConfig().getVerifier().getValidCertificate()); - String result = this.payService.postV3WithWechatpaySerial(url, GSON.toJson(request)); - return GSON.fromJson(result, ProfitSharingReceiverV3Result.class); - } - - @Override - public ProfitSharingNotifyV3Result parseProfitSharingNotifyResult(String notifyData, SignatureHeader header) throws WxPayException { - ProfitSharingNotifyV3Response response = parseNotifyData(notifyData, header); - ProfitSharingNotifyV3Response.Resource resource = response.getResource(); - String cipherText = resource.getCipherText(); - String associatedData = resource.getAssociatedData(); - String nonce = resource.getNonce(); - String apiV3Key = this.payService.getConfig().getApiV3Key(); - try { - String result = AesUtils.decryptToString(associatedData, nonce, cipherText, apiV3Key); - return GSON.fromJson(result, ProfitSharingNotifyV3Result.class); - } catch (GeneralSecurityException | IOException e) { - throw new WxPayException("解析报文异常!", e); - } - } - - @Override - public ProfitSharingBillV3Result profitSharingBill(ProfitSharingBillV3Request request) throws WxPayException { - String url = String.format("%s/v3/profitsharing/bills?bill_date=%s", this.payService.getPayBaseUrl(), - request.getBillDate()); - - if (StringUtils.isNotBlank(request.getSubMchId())) { - url = String.format("%s&sub_mchid=%s", url, request.getSubMchId()); - } - if (StringUtils.isNotBlank(request.getTarType())) { - url = String.format("%s&tar_type=%s", url, request.getTarType()); - } - String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingBillV3Result.class); - } - - /** - *- * 请求分账查询API - * - * 发起分账请求后,可调用此接口查询分账结果 - * 文档详见: https://pay.weixin.qq.com/wiki/doc/apiv3/apis/chapter8_1_2.shtml - * 接口链接: https://api.mch.weixin.qq.com/v3/profitsharing/orders/{out_order_no} - * - * 注意: - * 发起解冻剩余资金请求后,可调用此接口查询解冻剩余资金的结果 - *- * - * @param request {@link ProfitSharingQueryV3Request} 针对某一笔分账订单的分账方法 - * @return {@link ProfitSharingV3Result} 微信返回的分账查询结果 - * @throws WxPayException the wx pay exception - * @see 微信文档 - */ - @Override - public ProfitSharingV3Result profitSharingQuery(ProfitSharingQueryV3Request request) throws WxPayException { - String url = String.format("%s/v3/profitsharing/orders/%s?transaction_id=%s", this.payService.getPayBaseUrl(), - request.getOutOrderNo(), request.getOutOrderNo()); - if(StringUtils.isNotEmpty(request.getSubMchId())){ - url += "&sub_mchid=" + request.getSubMchId(); - } - String result = this.payService.getV3(url); - return GSON.fromJson(result, ProfitSharingV3Result.class); - } - - private ProfitSharingNotifyV3Response parseNotifyData(String data, SignatureHeader header) throws WxPayException { - if (Objects.nonNull(header) && !this.verifyNotifySign(header, data)) { - throw new WxPayException("非法请求,头部信息验证失败"); - } - return GSON.fromJson(data, ProfitSharingNotifyV3Response.class); - } - - /** - * 校验通知签名 - * - * @param header 通知头信息 - * @param data 通知数据 - * @return true:校验通过 false:校验不通过 - */ - private boolean verifyNotifySign(SignatureHeader header, String data) throws WxPayException { - String beforeSign = String.format("%s%n%s%n%s%n", header.getTimeStamp(), header.getNonce(), data); - Verifier verifier = this.payService.getConfig().getVerifier(); - if (verifier == null) { - throw new WxPayException("证书检验对象为空"); - } - return verifier.verify(header.getSerial(), - beforeSign.getBytes(StandardCharsets.UTF_8), header.getSignature()); - } -} diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java index 3a50c2528..c0cc83bf7 100644 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java +++ b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingServiceImplTest.java @@ -1,5 +1,6 @@ package com.github.binarywang.wxpay.service.impl; +import com.github.binarywang.wxpay.bean.notify.SignatureHeader; import com.github.binarywang.wxpay.bean.profitsharing.*; import com.github.binarywang.wxpay.bean.profitsharing.request.*; import com.github.binarywang.wxpay.bean.profitsharing.result.ProfitSharingMerchantRatioQueryResult; @@ -144,4 +145,15 @@ public class ProfitSharingServiceImplTest { log.info(this.payService.getProfitSharingService().profitSharingReturnQuery(request).toString()); } + @Test + public void testProfitSharingNotifyData() throws WxPayException { + SignatureHeader header = new SignatureHeader(); + header.setSerial("Wechatpay-Serial"); + header.setTimeStamp("Wechatpay-Timestamp"); + header.setNonce("Wechatpay-Nonce"); + header.setSignature("Wechatpay-Signature"); + String data = "body"; + log.info(this.payService.getProfitSharingService().parseProfitSharingNotifyResult(data,header).toString()); + } + } diff --git a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImplTest.java b/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImplTest.java deleted file mode 100644 index 76af66b9e..000000000 --- a/weixin-java-pay/src/test/java/com/github/binarywang/wxpay/service/impl/ProfitSharingV3ServiceImplTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.github.binarywang.wxpay.service.impl; - -import com.github.binarywang.wxpay.bean.notify.SignatureHeader; -import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.WxPayService; -import com.github.binarywang.wxpay.testbase.ApiTestModule; -import com.google.inject.Inject; -import lombok.extern.slf4j.Slf4j; -import org.testng.annotations.Guice; -import org.testng.annotations.Test; - -/** - * 测试类 - * - * @author yuanbo - * @since 2022-04-26-22:33 PM - */ -@Test -@Slf4j -@Guice(modules = ApiTestModule.class) -public class ProfitSharingV3ServiceImplTest { - @Inject - private WxPayService payService; - - @Test - public void testProfitSharingNotifyData() throws WxPayException { - SignatureHeader header = new SignatureHeader(); - header.setSerial("Wechatpay-Serial"); - header.setTimeStamp("Wechatpay-Timestamp"); - header.setNonce("Wechatpay-Nonce"); - header.setSignature("Wechatpay-Signature"); - String data = "body"; - log.info(this.payService.getProfitSharingV3Service().parseProfitSharingNotifyResult(data,header).toString()); - } -} -- Gitee