From 126750b298e5e9deea68fde99ff3a3fd0e054e46 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Fri, 5 Jun 2026 18:29:15 +0800 Subject: [PATCH] =?UTF-8?q?:art:=20#4022=20=E3=80=90=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E5=8F=B7=E3=80=91=E5=B0=8F=E5=BA=97=E2=80=9C=E6=8B=92=E7=BB=9D?= =?UTF-8?q?=E5=94=AE=E5=90=8E=E2=80=9D=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E6=8B=92=E7=BB=9D=E5=87=AD=E8=AF=81=E5=8F=82=E6=95=B0=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../channel/api/WxChannelAfterSaleService.java | 16 ++++++++++++++++ .../api/impl/WxChannelAfterSaleServiceImpl.java | 8 +++++++- .../channel/bean/after/AfterSaleRejectParam.java | 16 ++++++++++++++++ .../impl/WxChannelAfterSaleServiceImplTest.java | 12 ++++++++++++ 4 files changed, 51 insertions(+), 1 deletion(-) diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelAfterSaleService.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelAfterSaleService.java index 85c945d42..b8d1156b6 100644 --- a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelAfterSaleService.java +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelAfterSaleService.java @@ -77,6 +77,22 @@ public interface WxChannelAfterSaleService { */ WxChannelBaseResponse reject(String afterSaleOrderId, String rejectReason, Integer rejectReasonType) throws WxErrorException; + /** + * 拒绝售后(支持拒绝凭证) + * 文档地址 https://developers.weixin.qq.com/doc/channels/API/aftersale/rejectapply.html + * + * @param afterSaleOrderId 售后单号 + * @param rejectReason 拒绝原因 + * @param rejectReasonType 拒绝原因枚举值 + * @param rejectCertificates 拒绝凭证图片列表,可使用图片上传接口获取media_id + * @see #getRejectReason() + * @return BaseResponse + * + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse reject(String afterSaleOrderId, String rejectReason, Integer rejectReasonType, + List rejectCertificates) throws WxErrorException; + /** * 上传退款凭证 * diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImpl.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImpl.java index 92f865444..c7cdf9167 100644 --- a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImpl.java +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImpl.java @@ -61,7 +61,13 @@ public class WxChannelAfterSaleServiceImpl implements WxChannelAfterSaleService @Override public WxChannelBaseResponse reject(String afterSaleOrderId, String rejectReason, Integer rejectReasonType) throws WxErrorException { - AfterSaleRejectParam param = new AfterSaleRejectParam(afterSaleOrderId, rejectReason, rejectReasonType); + return reject(afterSaleOrderId, rejectReason, rejectReasonType, null); + } + + @Override + public WxChannelBaseResponse reject(String afterSaleOrderId, String rejectReason, Integer rejectReasonType, + List rejectCertificates) throws WxErrorException { + AfterSaleRejectParam param = new AfterSaleRejectParam(afterSaleOrderId, rejectReason, rejectReasonType, rejectCertificates); String resJson = shopService.post(AFTER_SALE_REJECT_URL, param); return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); } diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleRejectParam.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleRejectParam.java index cbde459fe..6b19a8058 100644 --- a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleRejectParam.java +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/after/AfterSaleRejectParam.java @@ -5,6 +5,8 @@ import com.fasterxml.jackson.annotation.JsonInclude.Include; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import java.util.List; + /** * 售后单拒绝信息 * @@ -27,6 +29,12 @@ public class AfterSaleRejectParam extends AfterSaleIdParam { @JsonProperty("reject_reason_type") private Integer rejectReasonType; + /** + * 拒绝凭证图片列表,可使用图片上传接口获取media_id + */ + @JsonProperty("reject_certificates") + private List rejectCertificates; + public AfterSaleRejectParam() { } @@ -40,4 +48,12 @@ public class AfterSaleRejectParam extends AfterSaleIdParam { this.rejectReason = rejectReason; this.rejectReasonType = rejectReasonType; } + + public AfterSaleRejectParam(String afterSaleOrderId, String rejectReason, Integer rejectReasonType, + List rejectCertificates) { + super(afterSaleOrderId); + this.rejectReason = rejectReason; + this.rejectReasonType = rejectReasonType; + this.rejectCertificates = rejectCertificates; + } } diff --git a/weixin-java-channel/src/test/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImplTest.java b/weixin-java-channel/src/test/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImplTest.java index 81122f7a0..529d455d4 100644 --- a/weixin-java-channel/src/test/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImplTest.java +++ b/weixin-java-channel/src/test/java/me/chanjar/weixin/channel/api/impl/WxChannelAfterSaleServiceImplTest.java @@ -70,6 +70,18 @@ public class WxChannelAfterSaleServiceImplTest { assertTrue(response.isSuccess()); } + @Test + public void testRejectWithCertificates() throws WxErrorException { + WxChannelAfterSaleService afterSaleService = channelService.getAfterSaleService(); + String afterSaleOrderId = ""; + String rejectReason = null; + List rejectCertificates = new ArrayList<>(4); + rejectCertificates.add("THE_FILE_ID_1"); + WxChannelBaseResponse response = afterSaleService.reject(afterSaleOrderId, rejectReason, 1, rejectCertificates); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + @Test public void testUploadRefundEvidence() throws WxErrorException { WxChannelAfterSaleService afterSaleService = channelService.getAfterSaleService();