From b0b3211d9ed1115c45358125d370ff23231b635c Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Sat, 11 Jul 2026 17:29:12 +0800 Subject: [PATCH] =?UTF-8?q?:new:=20#4038=20=E3=80=90=E8=A7=86=E9=A2=91?= =?UTF-8?q?=E5=8F=B7=E3=80=91=E8=A1=A5=E5=85=85=E5=AE=9E=E7=8E=B0=E5=B0=8F?= =?UTF-8?q?=E5=BA=97=E8=AE=A2=E5=8D=95=E7=AE=A1=E7=90=86=E7=BC=BA=E5=A4=B1?= =?UTF-8?q?=E7=9A=8413=E4=B8=AA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../channel/api/WxChannelOrderService.java | 123 +++++++++++++++++ .../api/impl/WxChannelOrderServiceImpl.java | 113 ++++++++++++++++ .../order/OrderCompensationDeliveryParam.java | 34 +++++ .../PreShipmentChangeSkuRejectParam.java | 32 +++++ .../order/PreShipmentChangeSkuResponse.java | 25 ++++ .../bean/order/PresentNoteAddParam.java | 32 +++++ .../bean/order/PresentSubOrderResponse.java | 26 ++++ .../order/PrivateNumberAddPhoneParam.java | 28 ++++ .../order/PrivateNumberGetPhoneResponse.java | 26 ++++ .../bean/order/PrivateNumberPhoneInfo.java | 29 ++++ .../PrivateNumberSendVerifyCodeParam.java | 28 ++++ .../order/RealNumberViewAuditResponse.java | 31 +++++ .../constant/WxChannelApiUrlConstants.java | 31 +++++ .../impl/WxChannelOrderServiceImplTest.java | 124 ++++++++++++++++++ 14 files changed, 682 insertions(+) create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/OrderCompensationDeliveryParam.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PreShipmentChangeSkuRejectParam.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PreShipmentChangeSkuResponse.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PresentNoteAddParam.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PresentSubOrderResponse.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberAddPhoneParam.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberGetPhoneResponse.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberPhoneInfo.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberSendVerifyCodeParam.java create mode 100644 weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/RealNumberViewAuditResponse.java diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelOrderService.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelOrderService.java index 7be0382ba..e2da5c7a5 100644 --- a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelOrderService.java +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/WxChannelOrderService.java @@ -9,10 +9,15 @@ import me.chanjar.weixin.channel.bean.delivery.DeliveryInfo; import me.chanjar.weixin.channel.bean.order.ChangeOrderInfo; import me.chanjar.weixin.channel.bean.order.DecodeSensitiveInfoResponse; import me.chanjar.weixin.channel.bean.order.DeliveryUpdateParam; +import me.chanjar.weixin.channel.bean.order.OrderCompensationDeliveryParam; import me.chanjar.weixin.channel.bean.order.OrderInfoResponse; import me.chanjar.weixin.channel.bean.order.OrderListParam; import me.chanjar.weixin.channel.bean.order.OrderListResponse; import me.chanjar.weixin.channel.bean.order.OrderSearchParam; +import me.chanjar.weixin.channel.bean.order.PreShipmentChangeSkuResponse; +import me.chanjar.weixin.channel.bean.order.PresentSubOrderResponse; +import me.chanjar.weixin.channel.bean.order.PrivateNumberGetPhoneResponse; +import me.chanjar.weixin.channel.bean.order.RealNumberViewAuditResponse; import me.chanjar.weixin.channel.bean.order.VirtualTelNumberResponse; import me.chanjar.weixin.common.error.WxErrorException; @@ -200,4 +205,122 @@ public interface WxChannelOrderService { * @throws WxErrorException 异常 */ DecodeSensitiveInfoResponse decodeSensitiveInfo(String orderId) throws WxErrorException; + + /** + * 礼物订单新增备注信息 + * + * @param orderId 礼物订单ID + * @param note 备注内容 + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse addPresentNote(String orderId, String note) throws WxErrorException; + + /** + * 获取礼物单的子单列表 + * + * @param orderId 礼物订单ID + * @return 子单列表 + * @throws WxErrorException 异常 + */ + PresentSubOrderResponse getPresentSubOrders(String orderId) throws WxErrorException; + + /** + * 获取待发货前更换SKU待处理请求 + * + * @param orderId 订单ID + * @return 换SKU信息 + * @throws WxErrorException 异常 + */ + PreShipmentChangeSkuResponse getPreShipmentChangeSku(String orderId) throws WxErrorException; + + /** + * 同意待发货前更换SKU请求 + * + * @param orderId 订单ID + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse approvePreShipmentChangeSku(String orderId) throws WxErrorException; + + /** + * 拒绝待发货前更换SKU请求 + * + * @param orderId 订单ID + * @param rejectReason 拒绝原因 + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse rejectPreShipmentChangeSku(String orderId, String rejectReason) throws WxErrorException; + + /** + * 申请查看订单真实号码 + * + * @param orderId 订单ID + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse applyRealNumber(String orderId) throws WxErrorException; + + /** + * 查看订单真实号审核状态 + * + * @param orderId 订单ID + * @return 审核状态 + * @throws WxErrorException 异常 + */ + RealNumberViewAuditResponse getRealNumberViewAudit(String orderId) throws WxErrorException; + + /** + * 订单再次申请虚拟号 + * + * @param orderId 订单ID + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse applyVirtualNumberAgain(String orderId) throws WxErrorException; + + /** + * 订单虚拟号延期 + * + * @param orderId 订单ID + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse delayVirtualNumber(String orderId) throws WxErrorException; + + /** + * 添加待认证的手机号 + * + * @param phone 手机号 + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse addPrivatePhone(String phone) throws WxErrorException; + + /** + * 获取短信验证码 + * + * @param phone 手机号 + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse sendPrivatePhoneVerifyCode(String phone) throws WxErrorException; + + /** + * 获取小店手机号认证状态 + * + * @return 手机号认证状态 + * @throws WxErrorException 异常 + */ + PrivateNumberGetPhoneResponse getPrivatePhone() throws WxErrorException; + + /** + * 订单补发货 + * + * @param param 补发货参数 + * @return BaseResponse + * @throws WxErrorException 异常 + */ + WxChannelBaseResponse compensationDelivery(OrderCompensationDeliveryParam param) throws WxErrorException; } diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImpl.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImpl.java index fd2626833..eff93082d 100644 --- a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImpl.java +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImpl.java @@ -5,16 +5,29 @@ import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Delive import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Delivery.GET_DELIVERY_COMPANY_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.ACCEPT_ADDRESS_MODIFY_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.DECODE_SENSITIVE_INFO_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.DELIVERY_COMPENSATION_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.ORDER_GET_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.ORDER_LIST_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.ORDER_SEARCH_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.PRE_SHIPMENT_CHANGE_SKU_APPROVE_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.PRE_SHIPMENT_CHANGE_SKU_GET_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.PRE_SHIPMENT_CHANGE_SKU_REJECT_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.PRESENT_NOTE_ADD_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.PRESENT_SUB_ORDER_GET_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.REAL_NUMBER_APPLY_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.REAL_NUMBER_VIEW_AUDIT_GET_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.REJECT_ADDRESS_MODIFY_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.UPDATE_ADDRESS_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.UPDATE_EXPRESS_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.UPDATE_PRICE_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.UPDATE_REMARK_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.UPLOAD_FRESH_INSPECT_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.VIRTUAL_NUMBER_APPLY_AGAIN_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.VIRTUAL_NUMBER_DELAY_URL; import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Order.VIRTUAL_TEL_NUMBER_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.PrivateNumber.ADD_PHONE_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.PrivateNumber.GET_PHONE_URL; +import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.PrivateNumber.SEND_VERIFY_CODE_URL; import java.util.List; import lombok.extern.slf4j.Slf4j; @@ -30,6 +43,7 @@ import me.chanjar.weixin.channel.bean.order.ChangeOrderInfo; import me.chanjar.weixin.channel.bean.order.DecodeSensitiveInfoResponse; import me.chanjar.weixin.channel.bean.order.DeliveryUpdateParam; import me.chanjar.weixin.channel.bean.order.OrderAddressParam; +import me.chanjar.weixin.channel.bean.order.OrderCompensationDeliveryParam; import me.chanjar.weixin.channel.bean.order.OrderIdParam; import me.chanjar.weixin.channel.bean.order.OrderInfoParam; import me.chanjar.weixin.channel.bean.order.OrderInfoResponse; @@ -38,6 +52,14 @@ import me.chanjar.weixin.channel.bean.order.OrderListResponse; import me.chanjar.weixin.channel.bean.order.OrderPriceParam; import me.chanjar.weixin.channel.bean.order.OrderRemarkParam; import me.chanjar.weixin.channel.bean.order.OrderSearchParam; +import me.chanjar.weixin.channel.bean.order.PreShipmentChangeSkuRejectParam; +import me.chanjar.weixin.channel.bean.order.PreShipmentChangeSkuResponse; +import me.chanjar.weixin.channel.bean.order.PresentNoteAddParam; +import me.chanjar.weixin.channel.bean.order.PresentSubOrderResponse; +import me.chanjar.weixin.channel.bean.order.PrivateNumberAddPhoneParam; +import me.chanjar.weixin.channel.bean.order.PrivateNumberGetPhoneResponse; +import me.chanjar.weixin.channel.bean.order.PrivateNumberSendVerifyCodeParam; +import me.chanjar.weixin.channel.bean.order.RealNumberViewAuditResponse; import me.chanjar.weixin.channel.bean.order.VirtualTelNumberResponse; import me.chanjar.weixin.channel.util.ResponseUtils; import me.chanjar.weixin.common.error.WxErrorException; @@ -178,4 +200,95 @@ public class WxChannelOrderServiceImpl implements WxChannelOrderService { String resJson = shopService.post(DECODE_SENSITIVE_INFO_URL, reqJson); return ResponseUtils.decode(resJson, DecodeSensitiveInfoResponse.class); } + + @Override + public WxChannelBaseResponse addPresentNote(String orderId, String note) throws WxErrorException { + PresentNoteAddParam param = new PresentNoteAddParam(orderId, note); + String resJson = shopService.post(PRESENT_NOTE_ADD_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } + + @Override + public PresentSubOrderResponse getPresentSubOrders(String orderId) throws WxErrorException { + OrderIdParam param = new OrderIdParam(orderId); + String resJson = shopService.post(PRESENT_SUB_ORDER_GET_URL, param); + return ResponseUtils.decode(resJson, PresentSubOrderResponse.class); + } + + @Override + public PreShipmentChangeSkuResponse getPreShipmentChangeSku(String orderId) throws WxErrorException { + OrderIdParam param = new OrderIdParam(orderId); + String resJson = shopService.post(PRE_SHIPMENT_CHANGE_SKU_GET_URL, param); + return ResponseUtils.decode(resJson, PreShipmentChangeSkuResponse.class); + } + + @Override + public WxChannelBaseResponse approvePreShipmentChangeSku(String orderId) throws WxErrorException { + OrderIdParam param = new OrderIdParam(orderId); + String resJson = shopService.post(PRE_SHIPMENT_CHANGE_SKU_APPROVE_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } + + @Override + public WxChannelBaseResponse rejectPreShipmentChangeSku(String orderId, String rejectReason) + throws WxErrorException { + PreShipmentChangeSkuRejectParam param = new PreShipmentChangeSkuRejectParam(orderId, rejectReason); + String resJson = shopService.post(PRE_SHIPMENT_CHANGE_SKU_REJECT_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } + + @Override + public WxChannelBaseResponse applyRealNumber(String orderId) throws WxErrorException { + OrderIdParam param = new OrderIdParam(orderId); + String resJson = shopService.post(REAL_NUMBER_APPLY_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } + + @Override + public RealNumberViewAuditResponse getRealNumberViewAudit(String orderId) throws WxErrorException { + OrderIdParam param = new OrderIdParam(orderId); + String resJson = shopService.post(REAL_NUMBER_VIEW_AUDIT_GET_URL, param); + return ResponseUtils.decode(resJson, RealNumberViewAuditResponse.class); + } + + @Override + public WxChannelBaseResponse applyVirtualNumberAgain(String orderId) throws WxErrorException { + OrderIdParam param = new OrderIdParam(orderId); + String resJson = shopService.post(VIRTUAL_NUMBER_APPLY_AGAIN_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } + + @Override + public WxChannelBaseResponse delayVirtualNumber(String orderId) throws WxErrorException { + OrderIdParam param = new OrderIdParam(orderId); + String resJson = shopService.post(VIRTUAL_NUMBER_DELAY_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } + + @Override + public WxChannelBaseResponse addPrivatePhone(String phone) throws WxErrorException { + PrivateNumberAddPhoneParam param = new PrivateNumberAddPhoneParam(phone); + String resJson = shopService.post(ADD_PHONE_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } + + @Override + public WxChannelBaseResponse sendPrivatePhoneVerifyCode(String phone) throws WxErrorException { + PrivateNumberSendVerifyCodeParam param = new PrivateNumberSendVerifyCodeParam(phone); + String resJson = shopService.post(SEND_VERIFY_CODE_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } + + @Override + public PrivateNumberGetPhoneResponse getPrivatePhone() throws WxErrorException { + String resJson = shopService.post(GET_PHONE_URL, "{}"); + return ResponseUtils.decode(resJson, PrivateNumberGetPhoneResponse.class); + } + + @Override + public WxChannelBaseResponse compensationDelivery(OrderCompensationDeliveryParam param) + throws WxErrorException { + String resJson = shopService.post(DELIVERY_COMPENSATION_URL, param); + return ResponseUtils.decode(resJson, WxChannelBaseResponse.class); + } } diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/OrderCompensationDeliveryParam.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/OrderCompensationDeliveryParam.java new file mode 100644 index 000000000..760762ade --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/OrderCompensationDeliveryParam.java @@ -0,0 +1,34 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import java.util.List; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import me.chanjar.weixin.channel.bean.delivery.DeliveryInfo; + +/** + * 订单补发货 请求参数 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(Include.NON_NULL) +public class OrderCompensationDeliveryParam implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 订单ID */ + @JsonProperty("order_id") + private String orderId; + + /** 物流信息列表 */ + @JsonProperty("delivery_list") + private List deliveryList; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PreShipmentChangeSkuRejectParam.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PreShipmentChangeSkuRejectParam.java new file mode 100644 index 000000000..cd26719e6 --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PreShipmentChangeSkuRejectParam.java @@ -0,0 +1,32 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 拒绝待发货前更换SKU请求 请求参数 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(Include.NON_NULL) +public class PreShipmentChangeSkuRejectParam implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 订单ID */ + @JsonProperty("order_id") + private String orderId; + + /** 拒绝原因 */ + @JsonProperty("reject_reason") + private String rejectReason; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PreShipmentChangeSkuResponse.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PreShipmentChangeSkuResponse.java new file mode 100644 index 000000000..5aff82bd0 --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PreShipmentChangeSkuResponse.java @@ -0,0 +1,25 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse; + +/** + * 获取待发货前更换SKU待处理请求 响应 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class PreShipmentChangeSkuResponse extends WxChannelBaseResponse { + + private static final long serialVersionUID = 1L; + + /** 更换SKU信息 */ + @JsonProperty("change_sku_info") + private ChangeSkuInfo changeSkuInfo; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PresentNoteAddParam.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PresentNoteAddParam.java new file mode 100644 index 000000000..1e0ea0e48 --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PresentNoteAddParam.java @@ -0,0 +1,32 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 礼物订单新增备注信息 请求参数 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(Include.NON_NULL) +public class PresentNoteAddParam implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 礼物订单ID */ + @JsonProperty("order_id") + private String orderId; + + /** 备注内容 */ + @JsonProperty("note") + private String note; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PresentSubOrderResponse.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PresentSubOrderResponse.java new file mode 100644 index 000000000..f550a47a6 --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PresentSubOrderResponse.java @@ -0,0 +1,26 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse; + +/** + * 获取礼物单的子单列表 响应 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class PresentSubOrderResponse extends WxChannelBaseResponse { + + private static final long serialVersionUID = 1L; + + /** 子单列表 */ + @JsonProperty("sub_order_ids") + private List subOrderIds; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberAddPhoneParam.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberAddPhoneParam.java new file mode 100644 index 000000000..ec0d558e5 --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberAddPhoneParam.java @@ -0,0 +1,28 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 添加待认证手机号 请求参数 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(Include.NON_NULL) +public class PrivateNumberAddPhoneParam implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 手机号 */ + @JsonProperty("phone") + private String phone; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberGetPhoneResponse.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberGetPhoneResponse.java new file mode 100644 index 000000000..4a531a113 --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberGetPhoneResponse.java @@ -0,0 +1,26 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.List; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse; + +/** + * 获取小店手机号认证状态 响应 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class PrivateNumberGetPhoneResponse extends WxChannelBaseResponse { + + private static final long serialVersionUID = 1L; + + /** 手机号认证信息列表 */ + @JsonProperty("phone_list") + private List phoneList; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberPhoneInfo.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberPhoneInfo.java new file mode 100644 index 000000000..e0dda182d --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberPhoneInfo.java @@ -0,0 +1,29 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 手机号认证信息 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +public class PrivateNumberPhoneInfo implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 手机号 */ + @JsonProperty("phone") + private String phone; + + /** + * 认证状态:1-待认证,2-认证成功,3-认证失败 + */ + @JsonProperty("auth_status") + private Integer authStatus; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberSendVerifyCodeParam.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberSendVerifyCodeParam.java new file mode 100644 index 000000000..0698d29a7 --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/PrivateNumberSendVerifyCodeParam.java @@ -0,0 +1,28 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.annotation.JsonProperty; +import java.io.Serializable; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 获取短信验证码 请求参数 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@AllArgsConstructor +@JsonInclude(Include.NON_NULL) +public class PrivateNumberSendVerifyCodeParam implements Serializable { + + private static final long serialVersionUID = 1L; + + /** 手机号 */ + @JsonProperty("phone") + private String phone; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/RealNumberViewAuditResponse.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/RealNumberViewAuditResponse.java new file mode 100644 index 000000000..4ffa77bce --- /dev/null +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/bean/order/RealNumberViewAuditResponse.java @@ -0,0 +1,31 @@ +package me.chanjar.weixin.channel.bean.order; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse; + +/** + * 查看订单真实号审核状态 响应 + * + * @author GitHub Copilot + */ +@Data +@NoArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class RealNumberViewAuditResponse extends WxChannelBaseResponse { + + private static final long serialVersionUID = 1L; + + /** + * 审核状态:1-审核中,2-审核通过,3-审核拒绝 + */ + @JsonProperty("audit_status") + private Integer auditStatus; + + /** 真实号码(审核通过后返回)*/ + @JsonProperty("real_number") + private String realNumber; + +} diff --git a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/constant/WxChannelApiUrlConstants.java b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/constant/WxChannelApiUrlConstants.java index 7493f2180..7155a84a4 100644 --- a/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/constant/WxChannelApiUrlConstants.java +++ b/weixin-java-channel/src/main/java/me/chanjar/weixin/channel/constant/WxChannelApiUrlConstants.java @@ -215,6 +215,37 @@ public class WxChannelApiUrlConstants { String VIRTUAL_TEL_NUMBER_URL = "https://api.weixin.qq.com/channels/ec/order/virtualtelnumber/get"; /** 解码订单包含的敏感数据 */ String DECODE_SENSITIVE_INFO_URL = "https://api.weixin.qq.com/channels/ec/order/sensitiveinfo/decode"; + /** 礼物订单新增备注信息 */ + String PRESENT_NOTE_ADD_URL = "https://api.weixin.qq.com/channels/ec/order/presentnote/add"; + /** 获取礼物单的子单列表 */ + String PRESENT_SUB_ORDER_GET_URL = "https://api.weixin.qq.com/channels/ec/order/presentsuborder/get"; + /** 获取待发货前更换sku待处理请求 */ + String PRE_SHIPMENT_CHANGE_SKU_GET_URL = "https://api.weixin.qq.com/channels/ec/order/preshipmentchangesku/get"; + /** 同意待发货前更换sku请求 */ + String PRE_SHIPMENT_CHANGE_SKU_APPROVE_URL = "https://api.weixin.qq.com/channels/ec/order/preshipmentchangesku/approve"; + /** 拒绝待发货前更换sku请求 */ + String PRE_SHIPMENT_CHANGE_SKU_REJECT_URL = "https://api.weixin.qq.com/channels/ec/order/preshipmentchangesku/reject"; + /** 申请查看订单真实号码 */ + String REAL_NUMBER_APPLY_URL = "https://api.weixin.qq.com/channels/ec/order/realnumber/apply"; + /** 查看订单真实号审核状态 */ + String REAL_NUMBER_VIEW_AUDIT_GET_URL = "https://api.weixin.qq.com/channels/ec/order/realnumberviewaudit/get"; + /** 订单再次申请虚拟号 */ + String VIRTUAL_NUMBER_APPLY_AGAIN_URL = "https://api.weixin.qq.com/channels/ec/order/virtualnumber/applyagain"; + /** 订单虚拟号延期 */ + String VIRTUAL_NUMBER_DELAY_URL = "https://api.weixin.qq.com/channels/ec/order/virtualnumber/delay"; + /** 订单补发货 */ + String DELIVERY_COMPENSATION_URL = "https://api.weixin.qq.com/channels/ec/order/delivery/compensation"; + } + + /** 虚拟号管理相关接口 */ + public interface PrivateNumber { + + /** 添加待认证的手机号 */ + String ADD_PHONE_URL = "https://api.weixin.qq.com/channels/ec/merchant/privatenumber/addphone"; + /** 获取短信验证码 */ + String SEND_VERIFY_CODE_URL = "https://api.weixin.qq.com/channels/ec/merchant/privatenumber/sendverifycode"; + /** 获取小店手机号认证状态 */ + String GET_PHONE_URL = "https://api.weixin.qq.com/channels/ec/merchant/privatenumber/getphone"; } /** 售后相关接口 */ diff --git a/weixin-java-channel/src/test/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImplTest.java b/weixin-java-channel/src/test/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImplTest.java index 2c70c7bde..c72d6da51 100644 --- a/weixin-java-channel/src/test/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImplTest.java +++ b/weixin-java-channel/src/test/java/me/chanjar/weixin/channel/api/impl/WxChannelOrderServiceImplTest.java @@ -17,11 +17,16 @@ import me.chanjar.weixin.channel.bean.order.ChangeOrderInfo; import me.chanjar.weixin.channel.bean.order.DecodeSensitiveInfoResponse; import me.chanjar.weixin.channel.bean.order.DeliveryUpdateParam; import me.chanjar.weixin.channel.bean.order.OrderAddressInfo; +import me.chanjar.weixin.channel.bean.order.OrderCompensationDeliveryParam; import me.chanjar.weixin.channel.bean.order.OrderInfoResponse; import me.chanjar.weixin.channel.bean.order.OrderListParam; import me.chanjar.weixin.channel.bean.order.OrderListResponse; import me.chanjar.weixin.channel.bean.order.OrderSearchCondition; import me.chanjar.weixin.channel.bean.order.OrderSearchParam; +import me.chanjar.weixin.channel.bean.order.PreShipmentChangeSkuResponse; +import me.chanjar.weixin.channel.bean.order.PresentSubOrderResponse; +import me.chanjar.weixin.channel.bean.order.PrivateNumberGetPhoneResponse; +import me.chanjar.weixin.channel.bean.order.RealNumberViewAuditResponse; import me.chanjar.weixin.channel.bean.order.VirtualTelNumberResponse; import me.chanjar.weixin.channel.test.ApiTestModule; import me.chanjar.weixin.common.error.WxErrorException; @@ -198,4 +203,123 @@ public class WxChannelOrderServiceImplTest { assertNotNull(response); assertTrue(response.isSuccess()); } + + @Test + public void testAddPresentNote() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + String note = "测试备注"; + WxChannelBaseResponse response = orderService.addPresentNote(orderId, note); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testGetPresentSubOrders() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + PresentSubOrderResponse response = orderService.getPresentSubOrders(orderId); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testGetPreShipmentChangeSku() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + PreShipmentChangeSkuResponse response = orderService.getPreShipmentChangeSku(orderId); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testApprovePreShipmentChangeSku() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + WxChannelBaseResponse response = orderService.approvePreShipmentChangeSku(orderId); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testRejectPreShipmentChangeSku() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + String rejectReason = "库存不足"; + WxChannelBaseResponse response = orderService.rejectPreShipmentChangeSku(orderId, rejectReason); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testApplyRealNumber() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + WxChannelBaseResponse response = orderService.applyRealNumber(orderId); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testGetRealNumberViewAudit() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + RealNumberViewAuditResponse response = orderService.getRealNumberViewAudit(orderId); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testApplyVirtualNumberAgain() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + WxChannelBaseResponse response = orderService.applyVirtualNumberAgain(orderId); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testDelayVirtualNumber() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String orderId = ""; + WxChannelBaseResponse response = orderService.delayVirtualNumber(orderId); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testAddPrivatePhone() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String phone = "13800138000"; + WxChannelBaseResponse response = orderService.addPrivatePhone(phone); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testSendPrivatePhoneVerifyCode() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + String phone = "13800138000"; + WxChannelBaseResponse response = orderService.sendPrivatePhoneVerifyCode(phone); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testGetPrivatePhone() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + PrivateNumberGetPhoneResponse response = orderService.getPrivatePhone(); + assertNotNull(response); + assertTrue(response.isSuccess()); + } + + @Test + public void testCompensationDelivery() throws WxErrorException { + WxChannelOrderService orderService = channelService.getOrderService(); + OrderCompensationDeliveryParam param = new OrderCompensationDeliveryParam(); + param.setOrderId(""); + WxChannelBaseResponse response = orderService.compensationDelivery(param); + assertNotNull(response); + assertTrue(response.isSuccess()); + } }