From a8c4267aef4a4ffd213a50c33ddc948785aafda6 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 27 May 2026 12:47:53 +0000 Subject: [PATCH 1/2] Initial plan From f5d76ee827b9a43ec94cb7e78a6b99be5c0ed6bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 27 May 2026 12:55:45 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=E4=BF=AE=E5=A4=8D:=20=E5=94=AE=E5=90=8E?= =?UTF-8?q?=E6=8B=92=E7=BB=9D=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0=E6=8B=92?= =?UTF-8?q?=E7=BB=9D=E5=87=AD=E8=AF=81=E5=8F=82=E6=95=B0=E6=94=AF=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 | 11 +++++++++++ 4 files changed, 50 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 85c945d428..b8d1156b66 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 @@ AfterSaleListResponse listIds(Long beginCreateTime, Long endCreateTime, String n */ 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 92f865444b..c7cdf9167a 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 WxChannelBaseResponse accept(String afterSaleOrderId, String addressId, I @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 cbde459fea..6b19a8058c 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.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 AfterSaleRejectParam(String afterSaleOrderId, String rejectReason, Intege 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 81122f7a03..6c77cc53aa 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,17 @@ public void testReject() throws WxErrorException { assertTrue(response.isSuccess()); } + @Test + public void testRejectWithCertificates() throws WxErrorException { + WxChannelAfterSaleService afterSaleService = channelService.getAfterSaleService(); + String afterSaleOrderId = ""; + String rejectReason = null; + List rejectCertificates = new ArrayList<>(4); + WxChannelBaseResponse response = afterSaleService.reject(afterSaleOrderId, rejectReason, 1, rejectCertificates); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + @Test public void testUploadRefundEvidence() throws WxErrorException { WxChannelAfterSaleService afterSaleService = channelService.getAfterSaleService();