diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpAuthInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpAuthInfo.java
index 8249cd50b..27f12dac5 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpAuthInfo.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpAuthInfo.java
@@ -244,6 +244,17 @@ public class WxCpTpAuthInfo extends WxCpBaseResp {
@SerializedName("expired_time")
private Long expiredTime;
+ /**
+ * 是否虚拟版本
+ */
+ @SerializedName("is_virtual_version")
+ private Boolean isVirtualVersion;
+
+ /**
+ * 是否由互联企业分享安装。详见 企业互联
+ */
+ @SerializedName("is_shared_from_other_corp")
+ private Boolean isSharedFromOtherCorp;
}
/**
@@ -290,6 +301,7 @@ public class WxCpTpAuthInfo extends WxCpBaseResp {
return WxCpGsonBuilder.create().fromJson(json, WxCpTpAuthInfo.class);
}
+ @Override
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpPermanentCodeInfo.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpPermanentCodeInfo.java
index 7a22310ee..44d7a76b9 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpPermanentCodeInfo.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpPermanentCodeInfo.java
@@ -240,6 +240,19 @@ public class WxCpTpPermanentCodeInfo extends WxCpBaseResp {
*/
@SerializedName("expired_time")
private Long expiredTime;
+
+ /**
+ * 是否虚拟版本
+ */
+ @SerializedName("is_virtual_version")
+ private Boolean isVirtualVersion;
+
+ /**
+ * 是否由互联企业分享安装。详见 企业互联
+ */
+ @SerializedName("is_shared_from_other_corp")
+ private Boolean isSharedFromOtherCorp;
+
}
/**
@@ -304,6 +317,7 @@ public class WxCpTpPermanentCodeInfo extends WxCpBaseResp {
return WxCpGsonBuilder.create().fromJson(json, WxCpTpPermanentCodeInfo.class);
}
+ @Override
public String toJson() {
return WxCpGsonBuilder.create().toJson(this);
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpProlongTryResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpProlongTryResult.java
new file mode 100644
index 000000000..1429b8296
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/WxCpTpProlongTryResult.java
@@ -0,0 +1,49 @@
+package me.chanjar.weixin.cp.bean;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * 应用市场延长试用期结果
+ * @author leiguoqing
+ * @date 2022年4月24日
+ */
+@Getter
+@Setter
+public class WxCpTpProlongTryResult extends WxCpBaseResp {
+
+ /**
+ * The constant serialVersionUID.
+ */
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ /**
+ * 延长后的试用到期时间(秒级时间戳)
+ */
+ @SerializedName("try_end_time")
+ private Long tryEndTime;
+
+
+ /**
+ * From json wx cp tp order list get result.
+ *
+ * @param json the json
+ * @return the wx cp tp order list get result
+ */
+ public static WxCpTpProlongTryResult fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpTpProlongTryResult.class);
+ }
+
+ /**
+ * To json string.
+ *
+ * @return the string
+ */
+ @Override
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/order/WxCpTpOrderDetails.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/order/WxCpTpOrderDetails.java
new file mode 100644
index 000000000..3b468384b
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/order/WxCpTpOrderDetails.java
@@ -0,0 +1,210 @@
+package me.chanjar.weixin.cp.bean.order;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+/**
+ * 应用版本付费订单详情
+ *
+ * @author leiguoqing
+ * @date 2022年4月24日
+ */
+@Getter
+@Setter
+public class WxCpTpOrderDetails extends WxCpBaseResp {
+
+ /**
+ * The constant serialVersionUID.
+ */
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ /**
+ * 订单号
+ */
+ @SerializedName("orderid")
+ private String orderId;
+
+ /**
+ * 订单状态。0-未支付,1-已支付,2-已关闭, 3-未支付且已过期, 4-申请退款中, 5-申请退款成功, 6-退款被拒绝
+ */
+ @SerializedName("order_status")
+ private Integer orderStatus;
+
+ /**
+ * 订单类型。0-普通订单,1-扩容订单,2-续期,3-版本变更
+ */
+ @SerializedName("order_type")
+ private Integer orderType;
+
+ /**
+ * 客户企业的corpid
+ */
+ @SerializedName("paid_corpid")
+ private String paidCorpId;
+
+ /**
+ * 下单操作人员userid。如果是服务商代下单,没有该字段。
+ */
+ @SerializedName("operator_id")
+ private String operatorId;
+
+
+ /**
+ * 应用id
+ */
+ @SerializedName("suiteid")
+ private String suiteId;
+
+
+ /**
+ * 应用id。(仅旧套件有该字段)
+ */
+ @SerializedName("appid")
+ private String appId;
+
+
+ /**
+ * 购买版本ID
+ */
+ @SerializedName("edition_id")
+ private String editionId;
+
+
+ /**
+ * 购买版本名字
+ */
+ @SerializedName("edition_name")
+ private String editionName;
+
+
+ /**
+ * 实付款金额,单位分
+ */
+ @SerializedName("price")
+ private Long price;
+
+
+ /**
+ * 购买的人数
+ */
+ @SerializedName("user_count")
+ private Integer userCount;
+
+
+ /**
+ * 购买的时间,单位天
+ */
+ @SerializedName("order_period")
+ private Integer orderPeriod;
+
+ /**
+ * 下单时间,秒级时间戳
+ */
+ @SerializedName("order_time")
+ private Long orderTime;
+
+ /**
+ * 付款时间,秒级时间戳
+ */
+ @SerializedName("paid_time")
+ private Long paidTime;
+
+
+ /**
+ * 购买生效期的开始时间,秒级时间戳
+ */
+ @SerializedName("begin_time")
+ private Long beginTime;
+
+
+ /**
+ * 购买生效期的结束时间,秒级时间戳
+ */
+ @SerializedName("end_time")
+ private Long endTime;
+
+ /**
+ * 下单来源。0-客户下单;1-服务商代下单;2-代理商代下单
+ */
+ @SerializedName("order_from")
+ private Integer orderFrom;
+
+
+ /**
+ * 下单方corpid
+ */
+ @SerializedName("operator_corpid")
+ private String operatorCorpId;
+
+ /**
+ * 服务商分成金额,单位分
+ */
+ @SerializedName("service_share_amount")
+ private Long serviceShareAmount;
+
+
+ /**
+ * 平台分成金额,单位分
+ */
+ @SerializedName("platform_share_amount")
+ private Long platformShareAmount;
+
+
+ /**
+ * 代理商分成金额,单位分
+ */
+ @SerializedName("dealer_share_amount")
+ private Long dealerShareAmount;
+
+
+ /**
+ * 渠道商信息(仅当有渠道商报备后才会有此字段)
+ */
+ @SerializedName("dealer_corp_info")
+ private DealerCorpInfo dealerCorpInfo;
+
+
+ /**
+ * 渠道商信息(仅当有渠道商报备后才会有此字段)
+ */
+ @Getter
+ @Setter
+ public static class DealerCorpInfo {
+ /**
+ * 代理商corpid
+ */
+ @SerializedName("corpid")
+ private String corpId;
+
+
+ /**
+ * 代理商名
+ */
+ @SerializedName("corp_name")
+ private String corpName;
+ }
+
+ /**
+ * From json wx cp tp order details.
+ *
+ * @param json the json
+ * @return the wx cp tp order details
+ */
+ public static WxCpTpOrderDetails fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpTpOrderDetails.class);
+ }
+
+ /**
+ * To json string.
+ *
+ * @return the string
+ */
+ @Override
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/order/WxCpTpOrderListGetResult.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/order/WxCpTpOrderListGetResult.java
new file mode 100644
index 000000000..341ba9bc9
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/bean/order/WxCpTpOrderListGetResult.java
@@ -0,0 +1,53 @@
+package me.chanjar.weixin.cp.bean.order;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Getter;
+import lombok.Setter;
+import me.chanjar.weixin.cp.bean.WxCpBaseResp;
+import me.chanjar.weixin.cp.util.json.WxCpGsonBuilder;
+
+import java.util.List;
+
+/**
+ * 应用版本付费订单列表
+ *
+ * @author leiguoqing
+ * @date 2022年4月24日
+ */
+@Getter
+@Setter
+public class WxCpTpOrderListGetResult extends WxCpBaseResp {
+
+ /**
+ * The constant serialVersionUID.
+ */
+ private static final long serialVersionUID = -5028321625140879571L;
+
+ /**
+ * 订单列表
+ */
+ @SerializedName("order_list")
+ private List orderList;
+
+
+ /**
+ * From json wx cp tp order list get result.
+ *
+ * @param json the json
+ * @return the wx cp tp order list get result
+ */
+ public static WxCpTpOrderListGetResult fromJson(String json) {
+ return WxCpGsonBuilder.create().fromJson(json, WxCpTpOrderListGetResult.class);
+ }
+
+ /**
+ * To json string.
+ *
+ * @return the string
+ */
+ @Override
+ public String toJson() {
+ return WxCpGsonBuilder.create().toJson(this);
+ }
+
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
index 4d5527861..d82148421 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/constant/WxCpApiPathConsts.java
@@ -204,6 +204,15 @@ public interface WxCpApiPathConsts {
String CONTACT_SEARCH = "/cgi-bin/service/contact/search";
String GET_ADMIN_LIST = "/cgi-bin/service/get_admin_list";
+ // 获取订单详情
+ String GET_ORDER = "/cgi-bin/service/get_order";
+
+ // 获取订单列表
+ String GET_ORDER_LIST = "/cgi-bin/service/get_order_list";
+
+ // 延长试用期
+ String PROLONG_TRY = "/cgi-bin/service/prolong_try";
+
}
interface User {
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpEditionService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpEditionService.java
new file mode 100644
index 000000000..4f88e9471
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpEditionService.java
@@ -0,0 +1,33 @@
+package me.chanjar.weixin.cp.tp.service;
+
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.WxCpTpProlongTryResult;
+
+
+/**
+ * 应用版本付费版本相关接口
+ *
+ * @author leiguoqing
+ * @date 2022年4月24日
+ */
+public interface WxCpTpEditionService {
+
+ /**
+ * 延长试用期
+ *
+ * 文档地址
+ *
+ * 注意:
+ *
+ * - 一个应用可以多次延长试用,但是试用总天数不能超过60天
+ * - 仅限时试用或试用过期状态下的应用可以延长试用期
+ *
+ *
+ * @param buyerCorpId 购买方corpId
+ * @param prolongDays 延长天数
+ * @param appId 仅旧套件需要填此参数
+ * @return the order
+ * @throws WxErrorException the wx error exception
+ */
+ WxCpTpProlongTryResult prolongTry(String buyerCorpId, Integer prolongDays, String appId) throws WxErrorException;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpOrderService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpOrderService.java
new file mode 100644
index 000000000..d2288860c
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpOrderService.java
@@ -0,0 +1,44 @@
+package me.chanjar.weixin.cp.tp.service;
+
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.order.WxCpTpOrderDetails;
+import me.chanjar.weixin.cp.bean.order.WxCpTpOrderListGetResult;
+
+import java.util.Date;
+
+
+/**
+ * 应用版本付费订单相关接口
+ *
+ * @author leiguoqing
+ * @date 2022年4月24日
+ */
+public interface WxCpTpOrderService {
+
+ /**
+ * 获取订单详情
+ *
+ * 文档地址
+ *
+ *
+ * @param orderId 订单号
+ * @return the order
+ * @throws WxErrorException the wx error exception
+ */
+ WxCpTpOrderDetails getOrder(String orderId) throws WxErrorException;
+
+
+ /**
+ * 获取订单列表
+ *
+ * 文档地址
+ *
+ *
+ * @param startTime 起始时间
+ * @param endTime 终止时间
+ * @param testMode 指定拉取正式或测试模式的订单。默认正式模式。0-正式模式,1-测试模式。
+ * @return the order
+ * @throws WxErrorException the wx error exception
+ */
+ WxCpTpOrderListGetResult getOrderList(Date startTime, Date endTime, Integer testMode) throws WxErrorException;
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java
index bd44911fe..37405b2e9 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/WxCpTpService.java
@@ -530,4 +530,31 @@ public interface WxCpTpService {
*/
void expireProviderToken();
+ /**
+ * 获取应用版本付费订单相关接口服务
+ *
+ * @return the wx cp tp order service
+ */
+ WxCpTpOrderService getWxCpTpOrderService();
+
+ /**
+ * 设置应用版本付费订单相关接口服务
+ *
+ * @param wxCpTpOrderService the wx cp tp order service
+ */
+ void setWxCpTpOrderService(WxCpTpOrderService wxCpTpOrderService);
+
+ /**
+ * 获取应用版本付费版本相关接口服务
+ *
+ * @return the wx cp tp edition service
+ */
+ WxCpTpEditionService getWxCpTpEditionService();
+
+ /**
+ * 设置应用版本付费版本相关接口服务
+ *
+ * @param wxCpTpEditionService the wx cp tp edition service
+ */
+ void setWxCpTpOrderService(WxCpTpEditionService wxCpTpEditionService);
}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java
index 03316b9ae..a4dbd1248 100644
--- a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImpl.java
@@ -48,6 +48,8 @@ public abstract class BaseWxCpTpServiceImpl implements WxCpTpService, Requ
private WxCpTpMediaService wxCpTpMediaService = new WxCpTpMediaServiceImpl(this);
private WxCpTpOAService wxCpTpOAService = new WxCpTpOAServiceImpl(this);
private WxCpTpUserService wxCpTpUserService = new WxCpTpUserServiceImpl(this);
+ private WxCpTpOrderService wxCpTpOrderService = new WxCpTpOrderServiceImpl(this);
+ private WxCpTpEditionService wxCpTpEditionService = new WxCpTpEditionServiceImpl(this);
/**
* 全局的是否正在刷新access token的锁.
@@ -594,6 +596,26 @@ public abstract class BaseWxCpTpServiceImpl implements WxCpTpService, Requ
this.configStorage.expireProviderToken();
}
+ @Override
+ public WxCpTpOrderService getWxCpTpOrderService() {
+ return wxCpTpOrderService;
+ }
+
+ @Override
+ public void setWxCpTpOrderService(WxCpTpOrderService wxCpTpOrderService) {
+ this.wxCpTpOrderService = wxCpTpOrderService;
+ }
+
+ @Override
+ public WxCpTpEditionService getWxCpTpEditionService() {
+ return wxCpTpEditionService;
+ }
+
+ @Override
+ public void setWxCpTpOrderService(WxCpTpEditionService wxCpTpEditionService) {
+ this.wxCpTpEditionService = wxCpTpEditionService;
+ }
+
private WxJsapiSignature doCreateWxJsapiSignature(String url, String authCorpId, String jsapiTicket) {
long timestamp = System.currentTimeMillis() / 1000;
String noncestr = RandomUtils.getRandomStr();
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpEditionServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpEditionServiceImpl.java
new file mode 100644
index 000000000..8a6a71352
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpEditionServiceImpl.java
@@ -0,0 +1,52 @@
+package me.chanjar.weixin.cp.tp.service.impl;
+
+import com.google.gson.JsonObject;
+import lombok.RequiredArgsConstructor;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.WxCpTpProlongTryResult;
+import me.chanjar.weixin.cp.tp.service.WxCpTpEditionService;
+import me.chanjar.weixin.cp.tp.service.WxCpTpService;
+
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tp.PROLONG_TRY;
+
+/**
+ * 应用版本付费版本相关接口实现
+ *
+ * @author leigouqing
+ * @date 2022年4月24日
+ */
+@RequiredArgsConstructor
+public class WxCpTpEditionServiceImpl implements WxCpTpEditionService {
+
+ /**
+ * The Main service.
+ */
+ private final WxCpTpService mainService;
+
+ /**
+ * 延长试用期
+ *
+ * 文档地址
+ *
+ *
+ * - 一个应用可以多次延长试用,但是试用总天数不能超过60天
+ * - 仅限时试用或试用过期状态下的应用可以延长试用期
+ *
+ *
+ * @param buyerCorpId 购买方corpId
+ * @param prolongDays 延长天数
+ * @param appId 仅旧套件需要填此参数
+ * @return the order
+ * @throws WxErrorException the wx error exception
+ */
+ @Override
+ public WxCpTpProlongTryResult prolongTry(String buyerCorpId, Integer prolongDays, String appId) throws WxErrorException {
+ String url = mainService.getWxCpTpConfigStorage().getApiUrl(PROLONG_TRY);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("buyer_corpid", buyerCorpId);
+ jsonObject.addProperty("prolong_days", prolongDays);
+ jsonObject.addProperty("appid", appId);
+ String result = mainService.post(url, jsonObject.toString());
+ return WxCpTpProlongTryResult.fromJson(result);
+ }
+}
diff --git a/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpOrderServiceImpl.java b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpOrderServiceImpl.java
new file mode 100644
index 000000000..6a598e007
--- /dev/null
+++ b/weixin-java-cp/src/main/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpOrderServiceImpl.java
@@ -0,0 +1,71 @@
+package me.chanjar.weixin.cp.tp.service.impl;
+
+import com.google.gson.JsonObject;
+import lombok.RequiredArgsConstructor;
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.order.WxCpTpOrderDetails;
+import me.chanjar.weixin.cp.bean.order.WxCpTpOrderListGetResult;
+import me.chanjar.weixin.cp.tp.service.WxCpTpOrderService;
+import me.chanjar.weixin.cp.tp.service.WxCpTpService;
+
+import java.util.Date;
+
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tp.GET_ORDER;
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tp.GET_ORDER_LIST;
+
+/**
+ * 应用版本付费订单相关接口实现
+ *
+ * @author leigouqing
+ * @date 2022年4月24日
+ */
+@RequiredArgsConstructor
+public class WxCpTpOrderServiceImpl implements WxCpTpOrderService {
+
+ /**
+ * The Main service.
+ */
+ private final WxCpTpService mainService;
+
+ /**
+ * 获取订单详情
+ *
+ * 文档地址
+ *
+ *
+ * @param orderId 订单号
+ * @return the order
+ * @throws WxErrorException the wx error exception
+ */
+ @Override
+ public WxCpTpOrderDetails getOrder(String orderId) throws WxErrorException {
+ String url = mainService.getWxCpTpConfigStorage().getApiUrl(GET_ORDER);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("orderid", orderId);
+ String result = this.mainService.post(url, jsonObject.toString());
+ return WxCpTpOrderDetails.fromJson(result);
+ }
+
+ /**
+ * 获取订单列表
+ *
+ * 文档地址
+ *
+ *
+ * @param startTime 起始时间
+ * @param endTime 终止时间
+ * @param testMode 指定拉取正式或测试模式的订单。默认正式模式。0-正式模式,1-测试模式。
+ * @return the order list
+ * @throws WxErrorException the wx error exception
+ */
+ @Override
+ public WxCpTpOrderListGetResult getOrderList(Date startTime, Date endTime, Integer testMode) throws WxErrorException {
+ String url = mainService.getWxCpTpConfigStorage().getApiUrl(GET_ORDER_LIST);
+ JsonObject jsonObject = new JsonObject();
+ jsonObject.addProperty("start_time", startTime.getTime() / 1000);
+ jsonObject.addProperty("end_time", endTime.getTime() / 1000);
+ jsonObject.addProperty("test_mode", testMode);
+ String result = this.mainService.post(url, jsonObject.toString());
+ return WxCpTpOrderListGetResult.fromJson(result);
+ }
+}
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImplTest.java
index d181fac10..8a29a1130 100644
--- a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImplTest.java
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/BaseWxCpTpServiceImplTest.java
@@ -201,7 +201,9 @@ public class BaseWxCpTpServiceImplTest {
" \"edition_name\":\"协同版\",\n" +
" \"app_status\":3,\n" +
" \"user_limit\":200,\n" +
- " \"expired_time\":1541990791\n" +
+ " \"expired_time\":1541990791,\n" +
+ " \"is_virtual_version\":false,\n" +
+ " \"is_shared_from_other_corp\":true\n" +
" }\n" +
" ]\n" +
" }\n" +
@@ -295,7 +297,9 @@ public class BaseWxCpTpServiceImplTest {
" \"edition_name\":\"协同版\",\n" +
" \"app_status\":3,\n" +
" \"user_limit\":200,\n" +
- " \"expired_time\":1541990791\n" +
+ " \"expired_time\":1541990791,\n" +
+ " \"is_virtual_version\":false,\n" +
+ " \"is_shared_from_other_corp\":true\n" +
" },\n" +
" {\n" +
" \"agentid\":1,\n" +
@@ -303,7 +307,9 @@ public class BaseWxCpTpServiceImplTest {
" \"edition_name\":\"协同版\",\n" +
" \"app_status\":3,\n" +
" \"user_limit\":200,\n" +
- " \"expired_time\":1541990791\n" +
+ " \"expired_time\":1541990791,\n" +
+ " \"is_virtual_version\":false,\n" +
+ " \"is_shared_from_other_corp\":true\n" +
" }\n" +
" ]\n" +
" }\n" +
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpEditionServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpEditionServiceImplTest.java
new file mode 100644
index 000000000..b3561a3ae
--- /dev/null
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpEditionServiceImplTest.java
@@ -0,0 +1,70 @@
+package me.chanjar.weixin.cp.tp.service.impl;
+
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.WxCpTpProlongTryResult;
+import me.chanjar.weixin.cp.config.WxCpTpConfigStorage;
+import me.chanjar.weixin.cp.config.impl.WxCpTpDefaultConfigImpl;
+import me.chanjar.weixin.cp.tp.service.WxCpTpEditionService;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tp.PROLONG_TRY;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+/**
+ * 应用版本付费版本相关接口测试
+ */
+public class WxCpTpEditionServiceImplTest {
+
+ @Mock
+ private WxCpTpServiceApacheHttpClientImpl wxCpTpService;
+
+ private WxCpTpConfigStorage configStorage;
+
+ private WxCpTpEditionService wxCpTpEditionService;
+
+ @BeforeClass
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ configStorage = new WxCpTpDefaultConfigImpl();
+ when(wxCpTpService.getWxCpTpConfigStorage()).thenReturn(configStorage);
+ wxCpTpEditionService = new WxCpTpEditionServiceImpl(wxCpTpService);
+ }
+
+
+ /**
+ * 延长试用期
+ */
+ @Test
+ public void testProlongTry() throws WxErrorException {
+
+ String buyerCorpId = "wx7da9abf8ac62baaa";
+ Integer prolongDays = 7;
+ String appId = "1";
+
+ Long tryEndTime = 1565152189L;
+
+ String result = "" +
+ " {\n" +
+ " \"errcode\" : 0,\n" +
+ " \"errmsg\" : \"ok\",\n" +
+ " \"try_end_time\" : 1565152189\n" +
+ " }";
+
+ String url = configStorage.getApiUrl(PROLONG_TRY);
+ when(wxCpTpService.post(eq(url), any(String.class))).thenReturn(result);
+
+ final WxCpTpProlongTryResult prolongTryResult = wxCpTpEditionService.prolongTry(buyerCorpId, prolongDays, appId);
+
+ assertNotNull(prolongTryResult);
+
+ assertEquals(prolongTryResult.getTryEndTime(), tryEndTime);
+
+ }
+}
diff --git a/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpOrderServiceImplTest.java b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpOrderServiceImplTest.java
new file mode 100644
index 000000000..eb0c5a38a
--- /dev/null
+++ b/weixin-java-cp/src/test/java/me/chanjar/weixin/cp/tp/service/impl/WxCpTpOrderServiceImplTest.java
@@ -0,0 +1,156 @@
+package me.chanjar.weixin.cp.tp.service.impl;
+
+import me.chanjar.weixin.common.error.WxErrorException;
+import me.chanjar.weixin.cp.bean.order.WxCpTpOrderDetails;
+import me.chanjar.weixin.cp.bean.order.WxCpTpOrderListGetResult;
+import me.chanjar.weixin.cp.config.WxCpTpConfigStorage;
+import me.chanjar.weixin.cp.config.impl.WxCpTpDefaultConfigImpl;
+import me.chanjar.weixin.cp.tp.service.WxCpTpOrderService;
+import org.apache.commons.lang3.time.DateUtils;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.Test;
+
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tp.GET_ORDER;
+import static me.chanjar.weixin.cp.constant.WxCpApiPathConsts.Tp.GET_ORDER_LIST;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.when;
+import static org.testng.Assert.*;
+
+/**
+ * 应用版本付费订单相关接口测试
+ */
+public class WxCpTpOrderServiceImplTest {
+
+ @Mock
+ private WxCpTpServiceApacheHttpClientImpl wxCpTpService;
+
+ private WxCpTpConfigStorage configStorage;
+
+ private WxCpTpOrderService wxCpTpOrderService;
+
+ @BeforeClass
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ configStorage = new WxCpTpDefaultConfigImpl();
+ when(wxCpTpService.getWxCpTpConfigStorage()).thenReturn(configStorage);
+ wxCpTpOrderService = new WxCpTpOrderServiceImpl(wxCpTpService);
+ }
+
+
+ /**
+ * 获取订单详情
+ */
+ @Test
+ public void testGetOrder() throws WxErrorException {
+ String orderId = "2018091822ks1sd3s";
+
+ String result = "" +
+ "{\n" +
+ " \"errcode\" : 0,\n" +
+ " \"errmsg\" : \"ok\",\n" +
+ " \"orderid\" : \"2018091822ks1sd3s\",\n" +
+ " \"order_status\" : 1,\n" +
+ " \"order_type\" : 1,\n" +
+ " \"paid_corpid\" : \"wwfedd7e5291d63aaa\",\n" +
+ " \"operator_id\" : \"zhangsan\",\n" +
+ " \"suiteid\" : \"wx67cce113441ccaaa\",\n" +
+ " \"appid\" : 1,\n" +
+ " \"edition_id\" : \"RLS65535\",\n" +
+ " \"edition_name\" : \"协同版\",\n" +
+ " \"price\" : 100,\n" +
+ " \"user_count\" : 1000,\n" +
+ " \"order_period\": 365,\n" +
+ " \"order_time\" : 1533702999,\n" +
+ " \"paid_time\" : 1533702910,\n" +
+ " \"begin_time\" : 1533702910,\n" +
+ " \"end_time\" : 1553515904,\n" +
+ " \"order_from\" : 1,\n" +
+ " \"operator_corpid\" : \"wwfedd7e5292d63aaa\",\n" +
+ " \"service_share_amount\" : 60,\n" +
+ " \"platform_share_amount\" : 10,\n" +
+ " \"dealer_share_amount\" : 30,\n" +
+ " \"dealer_corp_info\":\n" +
+ " {\n" +
+ " \"corpid\": \"xxxx\",\n" +
+ " \"corp_name\": \"name\"\n" +
+ " }\n" +
+ " }";
+ String url = configStorage.getApiUrl(GET_ORDER);
+ when(wxCpTpService.post(eq(url), any(String.class))).thenReturn(result);
+
+ final WxCpTpOrderDetails orderDetails = wxCpTpOrderService.getOrder(orderId);
+
+ assertNotNull(orderDetails);
+
+ assertEquals(orderDetails.getOrderId(), orderId);
+
+ }
+
+ /**
+ * 获取订单列表
+ */
+ @Test
+ public void testGetOrderList() throws WxErrorException {
+ String orderId = "2018091822ks1sd3s";
+ Date startTime = new Date();
+ Date endTime = DateUtils.addDays(startTime, 5);
+ Integer testMode = 0;
+
+ String result = "" +
+ " {\n" +
+ " \"errcode\" : 0,\n" +
+ " \"errmsg\" : \"ok\",\n" +
+ " \"order_list\": [\n" +
+ " {\n" +
+ " \"orderid\" : \"2018091822ks1sd3s\",\n" +
+ " \"order_status\" : 1,\n" +
+ " \"order_type\" : 1,\n" +
+ " \"paid_corpid\" : \"wwfedd7e5292d63aaa\",\n" +
+ " \"operator_id\" : \"zhangsan\",\n" +
+ " \"suiteid\" : \"wx67cce113441cc7a6\",\n" +
+ " \"appid\" : 1,\n" +
+ " \"edition_id\" : \"RLS65535\",\n" +
+ " \"edition_name\" : \"协同版\",\n" +
+ " \"price\" : 100,\n" +
+ " \"user_count\" : 1000,\n" +
+ " \"order_period\": 365,\n" +
+ " \"order_time\" : 1533702999,\n" +
+ " \"paid_time\" : 1533702910,\n" +
+ " \"begin_time\" : 1533702910,\n" +
+ " \"end_time\" : 1553515904,\n" +
+ " \"order_from\" : 1,\n" +
+ " \"operator_corpid\" : \"wwfedd7e5292d63aaa\",\n" +
+ " \"service_share_amount\" : 60,\n" +
+ " \"platform_share_amount\" : 10,\n" +
+ " \"dealer_share_amount\" : 30,\n" +
+ " \"dealer_corp_info\":\n" +
+ " {\n" +
+ " \"corpid\": \"xxxx\",\n" +
+ " \"corp_name\": \"name\"\n" +
+ " }\n" +
+ " }]\n" +
+ " }";
+
+ String url = configStorage.getApiUrl(GET_ORDER_LIST);
+ when(wxCpTpService.post(eq(url), any(String.class))).thenReturn(result);
+
+ final WxCpTpOrderListGetResult orderList = wxCpTpOrderService.getOrderList(startTime, endTime, testMode);
+
+ assertNotNull(orderList);
+
+ final List detailsList = orderList.getOrderList();
+
+ assertTrue(Objects.nonNull(detailsList) && !detailsList.isEmpty());
+
+ assertEquals(detailsList.get(0).getOrderId(), orderId);
+ }
+
+
+}