1
0
mirror of synced 2026-10-20 14:46:11 +08:00

🆕 #4031 【视频号】新增微信小店代发管理模块:Supplier 关联、自动分配与 Dropship 单据等接口支持

This commit is contained in:
Copilot
2026-07-18 16:49:30 +08:00
committed by GitHub
parent 732d4b19f2
commit 6d5843489d
19 changed files with 684 additions and 0 deletions

View File

@@ -119,6 +119,13 @@ public interface WxChannelService extends BaseWxChannelService {
*/
WxLeagueWindowService getLeagueWindowService();
/**
* 代发管理服务
*
* @return 代发管理服务
*/
WxChannelSupplierService getSupplierService();
/**
* 优选联盟-团长服务
*

View File

@@ -0,0 +1,70 @@
package me.chanjar.weixin.channel.api;
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
import me.chanjar.weixin.channel.bean.supplier.DistributeTypeResponse;
import me.chanjar.weixin.channel.bean.supplier.DropshipAssignRequest;
import me.chanjar.weixin.channel.bean.supplier.DropshipDetailResponse;
import me.chanjar.weixin.channel.bean.supplier.DropshipListRequest;
import me.chanjar.weixin.channel.bean.supplier.DropshipListResponse;
import me.chanjar.weixin.channel.bean.supplier.DropshipResponse;
import me.chanjar.weixin.channel.bean.supplier.DropshipSearchRequest;
import me.chanjar.weixin.channel.bean.supplier.ProductDistributeRequest;
import me.chanjar.weixin.channel.bean.supplier.ProductListResponse;
import me.chanjar.weixin.channel.bean.supplier.SupplierInfoResponse;
import me.chanjar.weixin.channel.bean.supplier.SupplierListResponse;
import me.chanjar.weixin.common.error.WxErrorException;
/**
* 视频号小店代发管理服务。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
* @see <a href="https://developers.weixin.qq.com/doc/channels/API/supplier/">代发管理接口文档</a>
*/
public interface WxChannelSupplierService {
/** 获取供货商列表。 */
SupplierListResponse getSupplierList() throws WxErrorException;
/**
* 获取供货商列表。
*
* @param pageSize 每页数量
* @param nextKey 由上次请求返回,记录翻页的上下文。传入时会从上次返回的结果往后翻一页
* @return 供货商列表响应
* @throws WxErrorException 异常
*/
SupplierListResponse getSupplierList(Integer pageSize, String nextKey) throws WxErrorException;
/** 获取分配方式。 */
DistributeTypeResponse getDistribute() throws WxErrorException;
/** 设置全店订单手动分配。 */
WxChannelBaseResponse setManuallyDistribute() throws WxErrorException;
/** 设置全店订单自动分配。 */
WxChannelBaseResponse setAllDistribute(String supplierId) throws WxErrorException;
/** 设置按商品自动分配。 */
WxChannelBaseResponse setProductDistribute(ProductDistributeRequest req) throws WxErrorException;
/** 获取商品对应的自动分配供货商。 */
SupplierInfoResponse getProductDefaultDistribute(String productId) throws WxErrorException;
/** 获取按商品自动分配的商品列表。 */
ProductListResponse getProductList(String supplierId) throws WxErrorException;
/** 分配订单代发。 */
DropshipResponse assignOrder(DropshipAssignRequest req) throws WxErrorException;
/** 取消分配代发单。 */
WxChannelBaseResponse cancelDropship(String orderId) throws WxErrorException;
/** 查询代发单详情。 */
DropshipDetailResponse getDropship(String orderId) throws WxErrorException;
/** 拉取代发单列表。 */
DropshipListResponse listDropship(DropshipListRequest req) throws WxErrorException;
/** 搜索代发单。 */
DropshipListResponse searchDropship(DropshipSearchRequest req) throws WxErrorException;
}

View File

@@ -50,6 +50,7 @@ public abstract class BaseWxChannelServiceImpl<H, P> implements WxChannelService
private WxStoreHomePageService homePageService = null;
private WxStoreCooperationService cooperationService = null;
private WxChannelCompassShopService compassShopService = null;
private WxChannelSupplierService supplierService = null;
private WxLeagueWindowService leagueWindowService = null;
private WxLeagueSupplierService leagueSupplierService = null;
private WxLeaguePromoterService leaguePromoterService = null;
@@ -395,6 +396,14 @@ public abstract class BaseWxChannelServiceImpl<H, P> implements WxChannelService
return compassShopService;
}
@Override
public synchronized WxChannelSupplierService getSupplierService() {
if (supplierService == null) {
supplierService = new WxChannelSupplierServiceImpl(this);
}
return supplierService;
}
@Override
public synchronized WxLeagueWindowService getLeagueWindowService() {
if (leagueWindowService == null) {

View File

@@ -0,0 +1,132 @@
package me.chanjar.weixin.channel.api.impl;
import com.google.gson.JsonObject;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.channel.api.WxChannelSupplierService;
import me.chanjar.weixin.channel.bean.base.StreamPageParam;
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
import me.chanjar.weixin.channel.bean.supplier.DistributeTypeResponse;
import me.chanjar.weixin.channel.bean.supplier.DropshipAssignRequest;
import me.chanjar.weixin.channel.bean.supplier.DropshipDetailResponse;
import me.chanjar.weixin.channel.bean.supplier.DropshipListRequest;
import me.chanjar.weixin.channel.bean.supplier.DropshipListResponse;
import me.chanjar.weixin.channel.bean.supplier.DropshipResponse;
import me.chanjar.weixin.channel.bean.supplier.DropshipSearchRequest;
import me.chanjar.weixin.channel.bean.supplier.ProductDistributeRequest;
import me.chanjar.weixin.channel.bean.supplier.ProductListResponse;
import me.chanjar.weixin.channel.bean.supplier.SupplierInfoResponse;
import me.chanjar.weixin.channel.bean.supplier.SupplierListResponse;
import me.chanjar.weixin.channel.util.ResponseUtils;
import me.chanjar.weixin.common.error.WxErrorException;
import me.chanjar.weixin.common.util.json.GsonHelper;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.ASSIGN_DROPSHIP_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.CANCEL_DROPSHIP_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.GET_DISTRIBUTE_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.GET_DROPSHIP_LIST_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.GET_DROPSHIP_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.GET_PRODUCT_DEFAULT_DISTRIBUTE_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.GET_PRODUCT_LIST_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.GET_SUPPLIER_LIST_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.SEARCH_DROPSHIP_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.SET_ALL_DISTRIBUTION_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.SET_MANUALLY_DISTRIBUTE_URL;
import static me.chanjar.weixin.channel.constant.WxChannelApiUrlConstants.Supplier.SET_PRODUCT_DISTRIBUTE_URL;
/**
* 视频号小店代发管理服务。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Slf4j
public class WxChannelSupplierServiceImpl implements WxChannelSupplierService {
private final BaseWxChannelServiceImpl<?, ?> shopService;
public WxChannelSupplierServiceImpl(BaseWxChannelServiceImpl<?, ?> shopService) {
this.shopService = shopService;
}
@Override
public SupplierListResponse getSupplierList() throws WxErrorException {
return getSupplierList(null, null);
}
@Override
public SupplierListResponse getSupplierList(Integer pageSize, String nextKey) throws WxErrorException {
StreamPageParam param = new StreamPageParam(pageSize, nextKey);
String respJson = shopService.post(GET_SUPPLIER_LIST_URL, param);
return ResponseUtils.decode(respJson, SupplierListResponse.class);
}
@Override
public DistributeTypeResponse getDistribute() throws WxErrorException {
String respJson = shopService.post(GET_DISTRIBUTE_URL, "{}");
return ResponseUtils.decode(respJson, DistributeTypeResponse.class);
}
@Override
public WxChannelBaseResponse setManuallyDistribute() throws WxErrorException {
String respJson = shopService.post(SET_MANUALLY_DISTRIBUTE_URL, "{}");
return ResponseUtils.decode(respJson, WxChannelBaseResponse.class);
}
@Override
public WxChannelBaseResponse setAllDistribute(String supplierId) throws WxErrorException {
JsonObject req = GsonHelper.buildJsonObject("supplier_id", supplierId);
String respJson = shopService.post(SET_ALL_DISTRIBUTION_URL, req);
return ResponseUtils.decode(respJson, WxChannelBaseResponse.class);
}
@Override
public WxChannelBaseResponse setProductDistribute(ProductDistributeRequest req) throws WxErrorException {
String respJson = shopService.post(SET_PRODUCT_DISTRIBUTE_URL, req);
return ResponseUtils.decode(respJson, WxChannelBaseResponse.class);
}
@Override
public SupplierInfoResponse getProductDefaultDistribute(String productId) throws WxErrorException {
JsonObject req = GsonHelper.buildJsonObject("product_id", productId);
String respJson = shopService.post(GET_PRODUCT_DEFAULT_DISTRIBUTE_URL, req);
return ResponseUtils.decode(respJson, SupplierInfoResponse.class);
}
@Override
public ProductListResponse getProductList(String supplierId) throws WxErrorException {
JsonObject req = GsonHelper.buildJsonObject("supplier_id", supplierId);
String respJson = shopService.post(GET_PRODUCT_LIST_URL, req);
return ResponseUtils.decode(respJson, ProductListResponse.class);
}
@Override
public DropshipResponse assignOrder(DropshipAssignRequest req) throws WxErrorException {
String respJson = shopService.post(ASSIGN_DROPSHIP_URL, req);
return ResponseUtils.decode(respJson, DropshipResponse.class);
}
@Override
public WxChannelBaseResponse cancelDropship(String orderId) throws WxErrorException {
JsonObject req = GsonHelper.buildJsonObject("order_id", orderId);
String respJson = shopService.post(CANCEL_DROPSHIP_URL, req);
return ResponseUtils.decode(respJson, WxChannelBaseResponse.class);
}
@Override
public DropshipDetailResponse getDropship(String orderId) throws WxErrorException {
JsonObject req = GsonHelper.buildJsonObject("order_id", orderId);
String respJson = shopService.post(GET_DROPSHIP_URL, req);
return ResponseUtils.decode(respJson, DropshipDetailResponse.class);
}
@Override
public DropshipListResponse listDropship(DropshipListRequest req) throws WxErrorException {
String respJson = shopService.post(GET_DROPSHIP_LIST_URL, req);
return ResponseUtils.decode(respJson, DropshipListResponse.class);
}
@Override
public DropshipListResponse searchDropship(DropshipSearchRequest req) throws WxErrorException {
String respJson = shopService.post(SEARCH_DROPSHIP_URL, req);
return ResponseUtils.decode(respJson, DropshipListResponse.class);
}
}

View File

@@ -0,0 +1,25 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
/**
* 分配方式响应。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class DistributeTypeResponse extends WxChannelBaseResponse {
private static final long serialVersionUID = -750860556286328053L;
@JsonProperty("distribute_type")
private Integer distributeType;
@JsonProperty("supplier_info")
private SupplierInfo supplierInfo;
}

View File

@@ -0,0 +1,25 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 代发单分配请求。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DropshipAssignRequest implements Serializable {
private static final long serialVersionUID = 6945436332042017565L;
@JsonProperty("order_id")
private String orderId;
@JsonProperty("supplier_id")
private String supplierId;
}

View File

@@ -0,0 +1,22 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
/**
* 代发单详情响应。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class DropshipDetailResponse extends WxChannelBaseResponse {
private static final long serialVersionUID = 5548774863400272707L;
@JsonProperty("dropship_info")
private DropshipInfo dropshipInfo;
}

View File

@@ -0,0 +1,37 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 代发单信息。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DropshipInfo implements Serializable {
private static final long serialVersionUID = -7880364210849039278L;
@JsonProperty("order_id")
private String orderId;
@JsonProperty("supplier_id")
private String supplierId;
@JsonProperty("ds_order_id")
private String dropshipId;
@JsonProperty("status")
private Integer status;
@JsonProperty("create_time")
private Long createTime;
@JsonProperty("update_time")
private Long updateTime;
}

View File

@@ -0,0 +1,37 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 代发单列表请求。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DropshipListRequest implements Serializable {
private static final long serialVersionUID = 2638071229335192596L;
@JsonProperty("supplier_id")
private String supplierId;
@JsonProperty("status")
private Integer status;
@JsonProperty("create_time_start")
private Long createTimeStart;
@JsonProperty("create_time_end")
private Long createTimeEnd;
@JsonProperty("page_size")
private Integer pageSize;
@JsonProperty("next_key")
private String nextKey;
}

View File

@@ -0,0 +1,29 @@
package me.chanjar.weixin.channel.bean.supplier;
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 <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class DropshipListResponse extends WxChannelBaseResponse {
private static final long serialVersionUID = -2850183412032417307L;
@JsonProperty("dropship_list")
private List<DropshipInfo> dropshipList;
@JsonProperty("next_key")
private String nextKey;
@JsonProperty("has_more")
private Boolean hasMore;
}

View File

@@ -0,0 +1,28 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
/**
* 代发单分配响应。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class DropshipResponse extends WxChannelBaseResponse {
private static final long serialVersionUID = 4376618566823584629L;
@JsonProperty("order_id")
private String orderId;
@JsonProperty("supplier_id")
private String supplierId;
@JsonProperty("dropship_id")
private String dropshipId;
}

View File

@@ -0,0 +1,26 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
/**
* 代发单搜索请求。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@JsonInclude(JsonInclude.Include.NON_NULL)
public class DropshipSearchRequest extends DropshipListRequest {
private static final long serialVersionUID = 3915264648809784742L;
@JsonProperty("order_id")
private String orderId;
@JsonProperty("dropship_id")
private String dropshipId;
}

View File

@@ -0,0 +1,26 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 按商品自动分配请求。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ProductDistributeRequest implements Serializable {
private static final long serialVersionUID = 4201609097231290078L;
@JsonProperty("supplier_id")
private String supplierId;
@JsonProperty("product_id_list")
private List<String> productIdList;
}

View File

@@ -0,0 +1,42 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import java.util.List;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
/**
* 按商品自动分配商品列表响应。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class ProductListResponse extends WxChannelBaseResponse {
private static final long serialVersionUID = -7096250227033388295L;
@JsonProperty("product_list")
private List<ProductInfo> productList;
@JsonProperty("next_key")
private String nextKey;
@JsonProperty("has_more")
private Boolean hasMore;
@Data
@NoArgsConstructor
public static class ProductInfo implements Serializable {
private static final long serialVersionUID = -4482299212575966325L;
@JsonProperty("product_id")
private String productId;
@JsonProperty("supplier_id")
private String supplierId;
}
}

View File

@@ -0,0 +1,28 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import java.io.Serializable;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 供货商信息。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@JsonInclude(JsonInclude.Include.NON_NULL)
public class SupplierInfo implements Serializable {
private static final long serialVersionUID = -6480813119738259476L;
@JsonProperty("supplier_id")
private String supplierId;
@JsonProperty("supplier_name")
private String supplierName;
@JsonProperty("status")
private Integer status;
}

View File

@@ -0,0 +1,22 @@
package me.chanjar.weixin.channel.bean.supplier;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import me.chanjar.weixin.channel.bean.base.WxChannelBaseResponse;
/**
* 供货商信息响应。
*
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SupplierInfoResponse extends WxChannelBaseResponse {
private static final long serialVersionUID = -3071464065836573893L;
@JsonProperty("supplier_info")
private SupplierInfo supplierInfo;
}

View File

@@ -0,0 +1,29 @@
package me.chanjar.weixin.channel.bean.supplier;
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 <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class SupplierListResponse extends WxChannelBaseResponse {
private static final long serialVersionUID = -692609589633695295L;
@JsonProperty("supplier_list")
private List<SupplierInfo> supplierList;
@JsonProperty("next_key")
private String nextKey;
@JsonProperty("has_more")
private Boolean hasMore;
}

View File

@@ -491,6 +491,34 @@ public class WxChannelApiUrlConstants {
String GET_LEAGUE_ITEM_LIST_URL = "https://api.weixin.qq.com/channels/ec/league/item/list/get";
}
/** 代发管理相关接口 */
public interface Supplier {
/** 获取供货商列表 */
String GET_SUPPLIER_LIST_URL = "https://api.weixin.qq.com/channels/ec/supplier/relation/get_supplier_list";
/** 获取分配方式 */
String GET_DISTRIBUTE_URL = "https://api.weixin.qq.com/channels/ec/supplier/relation/get_distribute";
/** 设置全店订单手动分配 */
String SET_MANUALLY_DISTRIBUTE_URL = "https://api.weixin.qq.com/channels/ec/supplier/relation/set_manually_distribute";
/** 设置全店订单自动分配 */
String SET_ALL_DISTRIBUTION_URL = "https://api.weixin.qq.com/channels/ec/supplier/relation/set_all_distribution";
/** 设置按商品自动分配 */
String SET_PRODUCT_DISTRIBUTE_URL = "https://api.weixin.qq.com/channels/ec/supplier/relation/set_product_distribute";
/** 获取商品对应的自动分配供货商 */
String GET_PRODUCT_DEFAULT_DISTRIBUTE_URL = "https://api.weixin.qq.com/channels/ec/supplier/relation/get_product_default_distribute";
/** 获取按商品自动分配的商品列表 */
String GET_PRODUCT_LIST_URL = "https://api.weixin.qq.com/channels/ec/supplier/relation/get_product_list";
/** 分配订单代发 */
String ASSIGN_DROPSHIP_URL = "https://api.weixin.qq.com/channels/ec/order/dropship/assign";
/** 取消分配代发单 */
String CANCEL_DROPSHIP_URL = "https://api.weixin.qq.com/channels/ec/order/dropship/cancel";
/** 查询代发单详情 */
String GET_DROPSHIP_URL = "https://api.weixin.qq.com/channels/ec/order/dropship/get";
/** 拉取代发单列表 */
String GET_DROPSHIP_LIST_URL = "https://api.weixin.qq.com/channels/ec/order/dropship/list";
/** 搜索代发单 */
String SEARCH_DROPSHIP_URL = "https://api.weixin.qq.com/channels/ec/order/dropship/search";
}
/** 视频号助手开放接口 */
public interface Assistant {

View File

@@ -0,0 +1,62 @@
package me.chanjar.weixin.channel.bean.supplier;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertNotNull;
import java.util.Arrays;
import me.chanjar.weixin.channel.util.JsonUtils;
import org.testng.annotations.Test;
/**
* @author <a href="https://github.com/github-copilot">GitHub Copilot</a>
*/
public class WxChannelSupplierBeanTest {
@Test
public void testEncodeProductDistributeRequest() {
ProductDistributeRequest request = new ProductDistributeRequest();
request.setSupplierId("1001");
request.setProductIdList(Arrays.asList("p1", "p2"));
String json = JsonUtils.encode(request);
assertNotNull(json);
assertFalse(json.contains("supplierId"));
assertFalse(json.contains("productIdList"));
ProductDistributeRequest decoded = JsonUtils.decode(json, ProductDistributeRequest.class);
assertEquals(decoded.getSupplierId(), "1001");
assertEquals(decoded.getProductIdList(), Arrays.asList("p1", "p2"));
}
@Test
public void testEncodeDropshipAssignRequest() {
DropshipAssignRequest request = new DropshipAssignRequest();
request.setOrderId("o1");
request.setSupplierId("s1");
String json = JsonUtils.encode(request);
assertNotNull(json);
DropshipAssignRequest decoded = JsonUtils.decode(json, DropshipAssignRequest.class);
assertEquals(decoded.getOrderId(), "o1");
assertEquals(decoded.getSupplierId(), "s1");
}
@Test
public void testDecodeSupplierListResponse() {
String json = "{\"errcode\":0,\"errmsg\":\"ok\",\"supplier_list\":[{\"supplier_id\":\"s1\",\"supplier_name\":\"供货商1\",\"status\":1}],\"has_more\":false}";
SupplierListResponse response = JsonUtils.decode(json, SupplierListResponse.class);
assertNotNull(response);
assertEquals(response.getErrCode(), 0);
assertEquals(response.getSupplierList().size(), 1);
assertEquals(response.getSupplierList().get(0).getSupplierId(), "s1");
}
@Test
public void testDecodeDropshipInfo() {
DropshipInfo info = JsonUtils.decode("{\"ds_order_id\":\"d1\"}", DropshipInfo.class);
assertNotNull(info);
assertEquals(info.getDropshipId(), "d1");
}
}