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 7be0382bac..e2da5c7a5b 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.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 @@ WxChannelBaseResponse updatePrice(String orderId, Integer expressFee, 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 0000000000..cd26719e62 --- /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 0000000000..5aff82bd07 --- /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 0000000000..1e0ea0e484 --- /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 0000000000..f550a47a6d --- /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 0000000000..ec0d558e57 --- /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 0000000000..4a531a1137 --- /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 0000000000..e0dda182d5 --- /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 0000000000..0698d29a77 --- /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 0000000000..4ffa77bce1 --- /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 6c2076d85b..5204855d91 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 interface Order { 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 2c70c7bde8..c72d6da513 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.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 void testDecodeSensitiveInfo() throws WxErrorException { 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()); + } }