From 0cad673be5afd9185cd7575c3aa98021fc85b5f5 Mon Sep 17 00:00:00 2001 From: tostyle <491733638@qq.com> Date: Wed, 8 May 2024 11:02:17 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BE=AE=E4=BF=A1v3=E8=BD=AC=E8=B4=A6?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E5=BC=82=E6=AD=A5=E9=80=9A=E7=9F=A5=E5=8F=82?= =?UTF-8?q?=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pay/channel/AbstractTransferService.java | 45 +++++++++++++++++++ .../channel/wxpay/WxpayTransferService.java | 12 +++-- .../wxpay/model/TransferV3BatchesRequest.java | 24 ++++++++++ 3 files changed, 74 insertions(+), 7 deletions(-) create mode 100644 jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/AbstractTransferService.java create mode 100644 jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/model/TransferV3BatchesRequest.java diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/AbstractTransferService.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/AbstractTransferService.java new file mode 100644 index 00000000..f89f5ec2 --- /dev/null +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/AbstractTransferService.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2021-2031, 河北计全科技有限公司 (https://www.jeequan.com & jeequan@126.com). + *

+ * Licensed under the GNU LESSER GENERAL PUBLIC LICENSE 3.0; + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + *

+ * http://www.gnu.org/licenses/lgpl.html + *

+ * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.jeequan.jeepay.pay.channel; + + +import com.jeequan.jeepay.pay.service.ConfigContextQueryService; +import com.jeequan.jeepay.pay.util.ChannelCertConfigKitBean; +import com.jeequan.jeepay.service.impl.SysConfigService; +import org.springframework.beans.factory.annotation.Autowired; + +/* +* 退款接口抽象类 +* +* @author terrfly +* @site https://www.jeequan.com +* @date 2021/6/17 9:37 +*/ +public abstract class AbstractTransferService implements ITransferService{ + + @Autowired protected SysConfigService sysConfigService; + @Autowired protected ChannelCertConfigKitBean channelCertConfigKitBean; + @Autowired protected ConfigContextQueryService configContextQueryService; + + protected String getNotifyUrl(){ + return sysConfigService.getDBApplicationConfig().getPaySiteUrl() + "/api/transfer/notify/" + getIfCode(); + } + + protected String getNotifyUrl(String transferId){ + return sysConfigService.getDBApplicationConfig().getPaySiteUrl() + "/api/transfer/notify/" + getIfCode() + "/" + transferId; + } + +} diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayTransferService.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayTransferService.java index b79f7cfc..da1c30d5 100644 --- a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayTransferService.java +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayTransferService.java @@ -15,7 +15,6 @@ */ package com.jeequan.jeepay.pay.channel.wxpay; -import com.github.binarywang.wxpay.bean.entpay.EntPayQueryRequest; import com.github.binarywang.wxpay.bean.entpay.EntPayQueryResult; import com.github.binarywang.wxpay.bean.entpay.EntPayRequest; import com.github.binarywang.wxpay.bean.entpay.EntPayResult; @@ -23,12 +22,11 @@ import com.github.binarywang.wxpay.bean.transfer.TransferBatchDetailResult; import com.github.binarywang.wxpay.bean.transfer.TransferBatchesRequest; import com.github.binarywang.wxpay.bean.transfer.TransferBatchesResult; import com.github.binarywang.wxpay.exception.WxPayException; -import com.github.binarywang.wxpay.service.WxPayService; import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.TransferOrder; -import com.jeequan.jeepay.core.model.params.wxpay.WxpayNormalMchParams; -import com.jeequan.jeepay.pay.channel.ITransferService; +import com.jeequan.jeepay.pay.channel.AbstractTransferService; import com.jeequan.jeepay.pay.channel.wxpay.kits.WxpayKit; +import com.jeequan.jeepay.pay.channel.wxpay.model.TransferV3BatchesRequest; import com.jeequan.jeepay.pay.model.MchAppConfigContext; import com.jeequan.jeepay.pay.model.WxServiceWrapper; import com.jeequan.jeepay.pay.rqrs.msg.ChannelRetMsg; @@ -51,7 +49,7 @@ import java.util.List; */ @Slf4j @Service -public class WxpayTransferService implements ITransferService { +public class WxpayTransferService extends AbstractTransferService { @Autowired private ConfigContextQueryService configContextQueryService; @@ -116,7 +114,7 @@ public class WxpayTransferService implements ITransferService { return ChannelRetMsg.waiting(); } else if (CS.PAY_IF_VERSION.WX_V3.equals(wxServiceWrapper.getApiVersion())) { - TransferBatchesRequest request = new TransferBatchesRequest(); + TransferV3BatchesRequest request = new TransferV3BatchesRequest(); request.setAppid(wxServiceWrapper.getWxPayService().getConfig().getAppId()); request.setOutBatchNo(transferOrder.getTransferId()); if(StringUtils.isNotBlank(transferOrder.getAccountName())){ @@ -137,7 +135,7 @@ public class WxpayTransferService implements ITransferService { transferDetail.setTransferRemark(transferOrder.getTransferDesc()); list.add(transferDetail); request.setTransferDetailList(list); - + request.setNotifyUrl(getNotifyUrl(transferOrder.getTransferId())); TransferBatchesResult transferBatchesResult = wxServiceWrapper.getWxPayService().getTransferService().transferBatches(request); return ChannelRetMsg.waiting(); } else { diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/model/TransferV3BatchesRequest.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/model/TransferV3BatchesRequest.java new file mode 100644 index 00000000..ccf21706 --- /dev/null +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/model/TransferV3BatchesRequest.java @@ -0,0 +1,24 @@ +package com.jeequan.jeepay.pay.channel.wxpay.model; + +import com.github.binarywang.wxpay.bean.transfer.TransferBatchesRequest; +import com.google.gson.annotations.SerializedName; + +/** + * 微信v3转账增加异步通知参数 + * @ClassName : TransferV3BatchesRequest + * @Author : tostyle + * @Date: 2024-05-08 10:54 + */ +public class TransferV3BatchesRequest extends TransferBatchesRequest { + + @SerializedName("notify_url") + private String notifyUrl; + + public String getNotifyUrl() { + return notifyUrl; + } + + public void setNotifyUrl(String notifyUrl) { + this.notifyUrl = notifyUrl; + } +} -- Gitee From 5041da76f105935303a17858c41c08f832ab71cd Mon Sep 17 00:00:00 2001 From: tostyle <491733638@qq.com> Date: Thu, 9 May 2024 16:17:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BE=AE=E4=BF=A1=E8=BD=AC=E8=B4=A6?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=E5=8E=9F=E5=9B=A0=E7=8A=B6=E6=80=81=E7=A0=81?= =?UTF-8?q?=E8=BD=AC=E5=8C=96=E4=B8=BA=E4=B8=AD=E6=96=87=E6=8F=8F=E8=BF=B0?= =?UTF-8?q?=E6=A0=BC=E5=BC=8F=E4=B8=BA:=E7=8A=B6=E6=80=81=E7=A0=81[?= =?UTF-8?q?=E4=B8=AD=E6=96=87=E6=8F=8F=E8=BF=B0]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../channel/wxpay/WxpayTransferService.java | 3 +- .../wxpay/model/ChannelTransferFailEnums.java | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/model/ChannelTransferFailEnums.java diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayTransferService.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayTransferService.java index da1c30d5..c8a8cf94 100644 --- a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayTransferService.java +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/WxpayTransferService.java @@ -26,6 +26,7 @@ import com.jeequan.jeepay.core.constants.CS; import com.jeequan.jeepay.core.entity.TransferOrder; import com.jeequan.jeepay.pay.channel.AbstractTransferService; import com.jeequan.jeepay.pay.channel.wxpay.kits.WxpayKit; +import com.jeequan.jeepay.pay.channel.wxpay.model.ChannelTransferFailEnums; import com.jeequan.jeepay.pay.channel.wxpay.model.TransferV3BatchesRequest; import com.jeequan.jeepay.pay.model.MchAppConfigContext; import com.jeequan.jeepay.pay.model.WxServiceWrapper; @@ -186,7 +187,7 @@ public class WxpayTransferService extends AbstractTransferService { if("SUCCESS".equalsIgnoreCase(transferBatchDetailResult.getDetailStatus())){ return ChannelRetMsg.confirmSuccess(transferBatchDetailResult.getDetailId()); } else if ("FAIL".equalsIgnoreCase(transferBatchDetailResult.getDetailStatus())){ // FAIL,明确失败 - return ChannelRetMsg.confirmFail(transferBatchDetailResult.getDetailStatus(), transferBatchDetailResult.getFailReason()); + return ChannelRetMsg.confirmFail(transferBatchDetailResult.getDetailStatus(), ChannelTransferFailEnums.getFailMsg(transferBatchDetailResult.getFailReason())); } else{ return ChannelRetMsg.waiting(); } diff --git a/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/model/ChannelTransferFailEnums.java b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/model/ChannelTransferFailEnums.java new file mode 100644 index 00000000..fb4af9f5 --- /dev/null +++ b/jeepay-payment/src/main/java/com/jeequan/jeepay/pay/channel/wxpay/model/ChannelTransferFailEnums.java @@ -0,0 +1,58 @@ +package com.jeequan.jeepay.pay.channel.wxpay.model; + +import lombok.Getter; + +/** + * 微信转账错误原因枚举类 + * @ClassName : ChannelFailEnums + * @Author : tostyle + * @Date: 2024-05-09 15:40 + */ +@Getter +public enum ChannelTransferFailEnums { + + /** 测试 */ + ACCOUNT_FROZEN("该用户账户被冻结"), + REAL_NAME_CHECK_FAIL("收款人未实名认证,需要用户完成微信实名认证"), + NAME_NOT_CORRECT("收款人姓名校验不通过,请核实信息"), + OPENID_INVALID("Openid格式错误或者不属于商家公众账号"), + TRANSFER_QUOTA_EXCEED("超过用户单笔收款额度,核实产品设置是否准确"), + DAY_RECEIVED_QUOTA_EXCEED("超过用户单日收款额度,核实产品设置是否准确"), + MONTH_RECEIVED_QUOTA_EXCEED("超过用户单月收款额度,核实产品设置是否准确"), + DAY_RECEIVED_COUNT_EXCEED("超过用户单日收款次数,核实产品设置是否准确"), + PRODUCT_AUTH_CHECK_FAIL("未开通该权限或权限被冻结,请核实产品权限状态"), + OVERDUE_CLOSE("超过系统重试期,系统自动关闭"), + ID_CARD_NOT_CORRECT("收款人身份证校验不通过,请核实信息"), + ACCOUNT_NOT_EXIST("该用户账户不存在"), + TRANSFER_RISK("该笔转账可能存在风险,已被微信拦截"), + OTHER_FAIL_REASON_TYPE("其它失败原因"), + REALNAME_ACCOUNT_RECEIVED_QUOTA_EXCEED("用户账户收款受限,请引导用户在微信支付查看详情"), + RECEIVE_ACCOUNT_NOT_PERMMIT("未配置该用户为转账收款人,请在产品设置中调整,添加该用户为收款人"), + PAYEE_ACCOUNT_ABNORMAL("用户账户收款异常,请联系用户完善其在微信支付的身份信息以继续收款"), + PAYER_ACCOUNT_ABNORMAL("商户账户付款受限,可前往商户平台获取解除功能限制指引"), + + TRANSFER_SCENE_UNAVAILABLE("该转账场景暂不可用,请确认转账场景ID是否正确"), + TRANSFER_SCENE_INVALID("你尚未获取该转账场景,请确认转账场景ID是否正确"), + TRANSFER_REMARK_SET_FAIL("转账备注设置失败, 请调整后重新再试"), + RECEIVE_ACCOUNT_NOT_CONFIGURE("请前往商户平台-商家转账到零钱-前往功能-转账场景中添加"), + BLOCK_B2C_USERLIMITAMOUNT_BSRULE_MONTH("超出用户单月转账收款20w限额,本月不支持继续向该用户付款"), + BLOCK_B2C_USERLIMITAMOUNT_MONTH("用户账户存在风险收款受限,本月不支持继续向该用户付款"), + MERCHANT_REJECT("商户员工(转账验密人)已驳回转账"), + MERCHANT_NOT_CONFIRM("商户员工(转账验密人)超时未验密"); + + private final String value; + + ChannelTransferFailEnums(String value) { + this.value = value; + } + + public static String getFailMsg(String errCode){ + ChannelTransferFailEnums[] values = ChannelTransferFailEnums.values(); + for (ChannelTransferFailEnums value:values){ + if(value.name().equals(errCode)){ + return errCode+"["+value.getValue()+"]"; + } + } + return errCode; + } +} -- Gitee