diff --git a/CHANGE.md b/CHANGE.md
index f8c29e14..dd8dd5ad 100644
--- a/CHANGE.md
+++ b/CHANGE.md
@@ -230,4 +230,15 @@
* 2015-04-09
- + **weixin4j-qy**: [AgentApi](./weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/AgentApi.java)新增获取应用列表概况接口
\ No newline at end of file
+ + **weixin4j-qy**: [AgentApi](./weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/AgentApi.java)新增获取应用列表概况接口
+
+* 2015-04-13
+
+ + **weixin4j-base**: 删除WeixinTokenCreator与WeixinJSTicketCreator类
+
+ + **weixin4j-mp**: 新增WeixinTokenCreator与WeixinJSTicketCreator类
+
+ + **weixin4j-mp**: 新增用户分组批量移动、删除组别接口
+
+ + **weixin4j-qy**: 新增WeixinTokenCreator与WeixinJSTicketCreator类
+
\ No newline at end of file
diff --git a/weixin4j-base/README.md b/weixin4j-base/README.md
index 30b09261..6cd830c0 100644
--- a/weixin4j-base/README.md
+++ b/weixin4j-base/README.md
@@ -55,4 +55,8 @@ weixin4j-base
* 2015-04-01
- + 新增异步消息事件[BatchjobresultMessage](./src/main/java/com/foxinmy/weixin4j/msg/event/BatchjobresultMessage.java)
\ No newline at end of file
+ + 新增异步消息事件[BatchjobresultMessage](./src/main/java/com/foxinmy/weixin4j/msg/event/BatchjobresultMessage.java)
+
+* 2015-04-13
+
+ + 删除WeixinTokenCreator与WeixinJSTicketCreator类
\ No newline at end of file
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/error.xml b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/error.xml
index 561239f4..290c0aab 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/error.xml
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/http/error.xml
@@ -769,6 +769,74 @@
60114
性别不合法
+
+ 60115
+ 已关注成员微信不能修改
+
+
+ 60116
+ 扩展属性已存在
+
+
+ 60118
+ 成员无有效邀请字段(微信,邮箱,手机号)
+
+
+ 60119
+ 成员已关注
+
+
+ 60120
+ 成员已禁用
+
+
+ 60121
+ 找不到该成员
+
+
+ 60122
+ 邮箱已被外部管理员使用
+
+
+ 60123
+ 无效的部门id
+
+
+ 60124
+ 无效的父部门id
+
+
+ 60125
+ 部门名字长度超过限制
+
+
+ 60126
+ 创建部门失败
+
+
+ 60127
+ 缺少部门id
+
+
+ 60128
+ 字段不合法,可能存在主键冲突或者格式错误
+
+
+ 80001
+ 可信域名没有IPC备案,后续将不能在该域名下正常使用jssdk
+
+
+ 82001
+ 发送消息或者邀请的参数全部为空或者全部不合法
+
+
+ 82002
+ 不合法的PartyID列表长度
+
+
+ 82003
+ 不合法的TagID列表长度
+
7000000
@@ -907,4 +975,112 @@
ORDERNOTEXIST
订单不存在
+
+ 9001001
+ POST数据参数不合法
+
+
+ 9001002
+ 远端服务不可用
+
+
+ 9001003
+ Ticket不合法
+
+
+ 9001004
+ 获取摇周边用户信息失败
+
+
+ 9001005
+ 获取商户信息失败
+
+
+ 9001006
+ 获取OpenID失败
+
+
+ 9001007
+ 上传文件缺失
+
+
+ 9001008
+ 上传素材的文件类型不合法
+
+
+ 9001009
+ 上传素材的文件尺寸不合法
+
+
+ 9001010
+ 上传失败
+
+
+ 9001020
+ 帐号不合法
+
+
+ 9001021
+ 已有设备激活率低于50%,不能新增设备
+
+
+ 9001022
+ 设备申请数不合法,必须为大于0的数字
+
+
+ 9001023
+ 已存在审核中的设备ID申请
+
+
+ 9001024
+ 一次查询设备ID数量不能超过50
+
+
+ 9001025
+ 设备ID不合法
+
+
+ 9001026
+ 页面ID不合法
+
+
+ 9001027
+ 页面参数不合法
+
+
+ 9001028
+ 一次删除页面ID数量不能超过10
+
+
+ 9001029
+ 页面已应用在设备中,请先解除应用关系再删除
+
+
+ 9001030
+ 一次查询页面ID数量不能超过50
+
+
+ 9001031
+ 时间区间不合法
+
+
+ 9001032
+ 保存设备与页面的绑定关系参数错误
+
+
+ 9001033
+ 门店ID不合法
+
+
+ 9001034
+ 设备备注信息过长
+
+
+ 9001035
+ 设备申请参数不合法
+
+
+ 9001036
+ 查询起始值begin不合法
+
\ No newline at end of file
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Consts.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Consts.java
index 7629d04d..93823bc4 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Consts.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/Consts.java
@@ -4,6 +4,7 @@ import java.nio.charset.Charset;
/**
* 常量类
+ *
* @className Consts
* @author jy
* @date 2014年12月3日
@@ -37,9 +38,13 @@ public final class Consts {
*/
public static final String QY_ASSESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s";
/**
- * jssdk获取token的url
+ * 公众平台jssdk获取token的url
*/
- public static final String JS_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi";
+ public static final String MP_JS_TICKET_URL = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=%s&type=jsapi";
+ /**
+ * 企业号jssdk获取token的url
+ */
+ public static final String QY_JS_TICKET_URL = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=%s";
/**
* 商户平台下统一订单生成的url
*/
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
index 77d562ca..a1f4766a 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/FileTokenHolder.java
@@ -19,7 +19,7 @@ import com.thoughtworks.xstream.XStream;
* @date 2015年1月9日
* @since JDK 1.7
* @see com.foxinmy.weixin4j.token.TokenCreator
- * @see com.foxinmy.weixin4j.token.WeixinTokenCreator
+ * @see com.foxinmy.weixin4j.mp.token.WeixinTokenCreator
*/
public class FileTokenHolder implements TokenHolder {
private final XStream xstream;
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/README.md b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/README.md
index 1e4ffa76..6bd33863 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/README.md
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/README.md
@@ -2,9 +2,5 @@
TokenHolder.java token持有者接口
FileTokenHolder.java 基于文件保存的TokenHolder实现
-RedisTokenHolder.java 基于redis保存的TokenHolder实现(推荐)
-
-
-TokenCreator.java token创建者接口
-WeixinTokenCreator.java 微信公众平台及企业号access_token的获取
-WeixinJSTicketCreator.java 微信js接口的jsapi_ticket的获取
\ No newline at end of file
+RedisTokenHolder.java 基于redis保存的TokenHolder实现(推荐)
+TokenCreator.java token创建者接口
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
index 102b9cac..7d79cea1 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/RedisTokenHolder.java
@@ -18,7 +18,7 @@ import com.foxinmy.weixin4j.model.Token;
* @date 2015年1月9日
* @since JDK 1.7
* @see com.foxinmy.weixin4j.token.TokenCreator
- * @see com.foxinmy.weixin4j.token.WeixinTokenCreator
+ * @see com.foxinmy.weixin4j.mp.token.WeixinTokenCreator
*/
public class RedisTokenHolder implements TokenHolder {
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/AccountType.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/AccountType.java
index 374d3ed3..c83620d6 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/AccountType.java
+++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/type/AccountType.java
@@ -1,8 +1,5 @@
package com.foxinmy.weixin4j.type;
-import com.foxinmy.weixin4j.model.WeixinAccount;
-import com.foxinmy.weixin4j.model.WeixinMpAccount;
-import com.foxinmy.weixin4j.model.WeixinQyAccount;
/**
* 账号类型
@@ -14,14 +11,12 @@ import com.foxinmy.weixin4j.model.WeixinQyAccount;
* @see
*/
public enum AccountType {
- MP(WeixinMpAccount.class), QY(WeixinQyAccount.class);
- private Class extends WeixinAccount> clazz;
-
- AccountType(Class extends WeixinAccount> clazz) {
- this.clazz = clazz;
- }
-
- public Class extends WeixinAccount> getClazz() {
- return clazz;
- }
+ /**
+ * 公众号
+ */
+ MP,
+ /**
+ * 企业号
+ */
+ QY;
}
diff --git a/weixin4j-mp/README.md b/weixin4j-mp/README.md
index a9fad662..1fb5aa1f 100644
--- a/weixin4j-mp/README.md
+++ b/weixin4j-mp/README.md
@@ -210,4 +210,10 @@ weixin4j-mp
* 2015-04-01
- + **weixin4j-mp-api**: 新增[CashApi](./weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/CashApi.java)发红包、企业付款接口
\ No newline at end of file
+ + **weixin4j-mp-api**: 新增[CashApi](./weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/CashApi.java)发红包、企业付款接口
+
+* 2015-04-13
+
+ + **weixin4j-mp-api**: 新增WeixinTokenCreator与WeixinJSTicketCreator类
+
+ + **weixin4j-mp-api**: 新增用户分组批量移动、删除组别接口
\ No newline at end of file
diff --git a/weixin4j-mp/weixin4j-mp-api/README.md b/weixin4j-mp/weixin4j-mp-api/README.md
index b2d930d8..a2413311 100644
--- a/weixin4j-mp/weixin4j-mp-api/README.md
+++ b/weixin4j-mp/weixin4j-mp-api/README.md
@@ -185,4 +185,10 @@ weixin.properties说明
* 2015-04-01
- + 新增[CashApi](./src/main/java/com/foxinmy/weixin4j/mp/api/CashApi.java)发红包、企业付款接口
\ No newline at end of file
+ + 新增[CashApi](./src/main/java/com/foxinmy/weixin4j/mp/api/CashApi.java)发红包、企业付款接口
+
+* 2015-04-13
+
+ + 新增WeixinTokenCreator与WeixinJSTicketCreator类
+
+ + 新增用户分组批量移动、删除组别接口
\ No newline at end of file
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinPayProxy.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinPayProxy.java
index 45b9b635..2dcc4c8d 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinPayProxy.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinPayProxy.java
@@ -20,6 +20,7 @@ import com.foxinmy.weixin4j.mp.payment.v3.MPPayment;
import com.foxinmy.weixin4j.mp.payment.v3.MPPaymentResult;
import com.foxinmy.weixin4j.mp.payment.v3.Redpacket;
import com.foxinmy.weixin4j.mp.payment.v3.RedpacketSendResult;
+import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.mp.type.BillType;
import com.foxinmy.weixin4j.mp.type.CurrencyType;
import com.foxinmy.weixin4j.mp.type.IdQuery;
@@ -27,8 +28,6 @@ import com.foxinmy.weixin4j.mp.type.IdType;
import com.foxinmy.weixin4j.mp.type.RefundType;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
-import com.foxinmy.weixin4j.token.WeixinTokenCreator;
-import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.util.ConfigUtil;
/**
@@ -52,7 +51,7 @@ public class WeixinPayProxy {
public WeixinPayProxy() {
this(ConfigUtil.getWeixinMpAccount(), new FileTokenHolder(
- new WeixinTokenCreator(AccountType.MP)));
+ new WeixinTokenCreator()));
}
/**
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
index 4fef9356..bf1fbc23 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java
@@ -32,6 +32,7 @@ import com.foxinmy.weixin4j.mp.model.QRParameter;
import com.foxinmy.weixin4j.mp.model.SemQuery;
import com.foxinmy.weixin4j.mp.model.SemResult;
import com.foxinmy.weixin4j.mp.model.User;
+import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.mp.type.DatacubeType;
import com.foxinmy.weixin4j.mp.type.IndustryType;
import com.foxinmy.weixin4j.mp.type.Lang;
@@ -40,8 +41,6 @@ import com.foxinmy.weixin4j.msg.model.MpArticle;
import com.foxinmy.weixin4j.msg.model.Video;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
-import com.foxinmy.weixin4j.token.WeixinTokenCreator;
-import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.type.MediaType;
/**
@@ -71,7 +70,7 @@ public class WeixinProxy {
* 默认采用文件存放Token信息
*/
public WeixinProxy() {
- this(new FileTokenHolder(new WeixinTokenCreator(AccountType.MP)));
+ this(new FileTokenHolder(new WeixinTokenCreator()));
}
/**
@@ -80,8 +79,7 @@ public class WeixinProxy {
* @param appsecret
*/
public WeixinProxy(String appid, String appsecret) {
- this(new FileTokenHolder(new WeixinTokenCreator(appid, appsecret,
- AccountType.MP)));
+ this(new FileTokenHolder(new WeixinTokenCreator(appid, appsecret)));
}
/**
@@ -967,21 +965,54 @@ public class WeixinProxy {
}
/**
- * 移动分组
+ * 移动用户到分组
*
- * @param openId
- * 用户对应的ID
* @param groupId
* 组ID
+ * @param openId
+ * 用户对应的ID
* @throws WeixinException
* @see 移动分组
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.mp.api.GroupApi
*/
- public JsonResult moveGroup(String openId, int groupId)
+ public JsonResult moveGroup(int groupId, String openId)
throws WeixinException {
- return groupApi.moveGroup(openId, groupId);
+ return groupApi.moveGroup(groupId, openId);
+ }
+
+ /**
+ * 批量移动分组
+ *
+ * @param groupId
+ * 组ID
+ * @param openIds
+ * 用户ID列表(不能超过50个)
+ * @throws WeixinException
+ * @see 批量移动分组
+ * @see com.foxinmy.weixin4j.mp.model.Group
+ * @see com.foxinmy.weixin4j.mp.api.GroupApi
+ */
+ public JsonResult moveGroup(int groupId, String... openIds)
+ throws WeixinException {
+ return groupApi.moveGroup(groupId, openIds);
+ }
+
+ /**
+ * 删除用户分组,所有该分组内的用户自动进入默认分组.
+ *
+ * @param groupId
+ * 组ID
+ * @throws WeixinException
+ * @see 删除用户分组
+ * @see com.foxinmy.weixin4j.mp.model.Group
+ * @see com.foxinmy.weixin4j.mp.api.GroupApi
+ */
+ public JsonResult deleteGroup(int groupId) throws WeixinException {
+ return groupApi.deleteGroup(groupId);
}
/**
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/GroupApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/GroupApi.java
index 3a656bb3..10995e27 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/GroupApi.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/GroupApi.java
@@ -3,6 +3,7 @@ package com.foxinmy.weixin4j.mp.api;
import java.util.List;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
import com.foxinmy.weixin4j.http.JsonResult;
import com.foxinmy.weixin4j.http.Response;
@@ -118,18 +119,18 @@ public class GroupApi extends MpApi {
}
/**
- * 移动分组
+ * 移动用户到分组
*
- * @param openId
- * 用户对应的ID
* @param groupId
* 组ID
+ * @param openId
+ * 用户对应的ID
* @throws WeixinException
* @see 移动分组
* @see com.foxinmy.weixin4j.mp.model.Group
*/
- public JsonResult moveGroup(String openId, int groupId)
+ public JsonResult moveGroup(int groupId, String openId)
throws WeixinException {
String group_move_uri = getRequestUri("group_move_uri");
Token token = tokenHolder.getToken();
@@ -139,4 +140,50 @@ public class GroupApi extends MpApi {
return response.getAsJsonResult();
}
+
+ /**
+ * 批量移动分组
+ *
+ * @param groupId
+ * 组ID
+ * @param openIds
+ * 用户ID列表(不能超过50个)
+ * @throws WeixinException
+ * @see 批量移动分组
+ * @see com.foxinmy.weixin4j.mp.model.Group
+ */
+ public JsonResult moveGroup(int groupId, String... openIds)
+ throws WeixinException {
+ String group_batchmove_uri = getRequestUri("group_batchmove_uri");
+ Token token = tokenHolder.getToken();
+ JSONObject obj = new JSONObject();
+ obj.put("to_groupid", groupId);
+ obj.put("openid_list", openIds);
+ Response response = request.post(
+ String.format(group_batchmove_uri, token.getAccessToken()),
+ obj.toJSONString());
+
+ return response.getAsJsonResult();
+ }
+
+ /**
+ * 删除用户分组,所有该分组内的用户自动进入默认分组.
+ *
+ * @param groupId
+ * 组ID
+ * @throws WeixinException
+ * @see 删除用户分组
+ * @see com.foxinmy.weixin4j.mp.model.Group
+ */
+ public JsonResult deleteGroup(int groupId) throws WeixinException {
+ String group_delete_uri = getRequestUri("group_delete_uri");
+ Token token = tokenHolder.getToken();
+ Response response = request.post(
+ String.format(group_delete_uri, token.getAccessToken()),
+ String.format("{\"group\":{\"id\":%d}}", groupId));
+
+ return response.getAsJsonResult();
+ }
}
diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
index d013aa25..75541b67 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/weixin.properties
@@ -45,6 +45,10 @@ group_getid_uri={api_cgi_url}/groups/getid?access_token=%s
group_modify_uri={api_cgi_url}/groups/update?access_token=%s
# \u79fb\u52a8\u7528\u6237\u5206\u7ec4
group_move_uri={api_cgi_url}/groups/members/update?access_token=%s
+# \u6279\u91cf\u79fb\u52a8\u7528\u6237\u5206\u7ec4
+group_batchmove_uri={api_cgi_url}/groups/members/batchupdate?access_token=%s
+# \u5220\u9664\u7528\u6237\u5206\u7ec4
+group_delete_uri={api_cgi_url}/groups/delete?access_token=%s
# \u83b7\u53d6\u5173\u6ce8\u7740
following_uri={api_cgi_url}/user/get?access_token=%s&next_openid=%s
# \u81ea\u5b9a\u4e49\u83dc\u5355
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/WeixinJSTicketCreator.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinJSTicketCreator.java
similarity index 82%
rename from weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/WeixinJSTicketCreator.java
rename to weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinJSTicketCreator.java
index 3a96599f..79cf6a91 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/WeixinJSTicketCreator.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinJSTicketCreator.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.token;
+package com.foxinmy.weixin4j.mp.token;
import com.alibaba.fastjson.JSONObject;
import com.foxinmy.weixin4j.exception.WeixinException;
@@ -6,9 +6,11 @@ import com.foxinmy.weixin4j.http.HttpRequest;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.model.Consts;
import com.foxinmy.weixin4j.model.Token;
+import com.foxinmy.weixin4j.token.TokenCreator;
+import com.foxinmy.weixin4j.token.TokenHolder;
/**
- * 微信JSTICKET创建者
+ * 微信公众平台JSTICKET创建者
*
* @className WeixinJSTicketCreator
* @author jy
@@ -37,12 +39,12 @@ public class WeixinJSTicketCreator implements TokenCreator {
@Override
public String getCacheKey() {
- return String.format("%s_jskey", appid);
+ return String.format("mp_jsticket_%s", appid);
}
@Override
public Token createToken() throws WeixinException {
- Response response = request.get(String.format(Consts.JS_TICKET_URL,
+ Response response = request.get(String.format(Consts.MP_JS_TICKET_URL,
weixinTokenHolder.getToken().getAccessToken()));
JSONObject result = response.getAsJson();
Token token = new Token(result.getString("ticket"));
diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/WeixinTokenCreator.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinTokenCreator.java
similarity index 54%
rename from weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/WeixinTokenCreator.java
rename to weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinTokenCreator.java
index ee81f673..a60fdab0 100644
--- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/token/WeixinTokenCreator.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/token/WeixinTokenCreator.java
@@ -1,4 +1,4 @@
-package com.foxinmy.weixin4j.token;
+package com.foxinmy.weixin4j.mp.token;
import com.alibaba.fastjson.TypeReference;
import com.foxinmy.weixin4j.exception.WeixinException;
@@ -6,12 +6,12 @@ import com.foxinmy.weixin4j.http.HttpRequest;
import com.foxinmy.weixin4j.http.Response;
import com.foxinmy.weixin4j.model.Consts;
import com.foxinmy.weixin4j.model.Token;
-import com.foxinmy.weixin4j.model.WeixinAccount;
-import com.foxinmy.weixin4j.type.AccountType;
+import com.foxinmy.weixin4j.model.WeixinMpAccount;
+import com.foxinmy.weixin4j.token.TokenCreator;
import com.foxinmy.weixin4j.util.ConfigUtil;
/**
- * 微信TOKEN创建者
+ * 微信公众平台TOKEN创建者
*
* @className WeixinTokenCreator
* @author jy
@@ -19,44 +19,36 @@ import com.foxinmy.weixin4j.util.ConfigUtil;
* @since JDK 1.7
* @see 微信公众平台获取token说明
- * @see 微信企业号获取token说明
* @see com.foxinmy.weixin4j.model.Token
*/
public class WeixinTokenCreator implements TokenCreator {
private final HttpRequest request;
- private final String id;
+ private final String appid;
private final String secret;
- private final AccountType accountType;
- public WeixinTokenCreator(AccountType accountType) {
- WeixinAccount weixinAccount = ConfigUtil.getWeixinAccount(accountType
- .getClazz());
- this.id = weixinAccount.getId();
+ public WeixinTokenCreator() {
+ WeixinMpAccount weixinAccount = ConfigUtil.getWeixinMpAccount();
+ this.appid = weixinAccount.getId();
this.secret = weixinAccount.getSecret();
- this.accountType = accountType;
this.request = new HttpRequest();
}
- public WeixinTokenCreator(String id, String secret, AccountType accountType) {
- this.id = id;
+ public WeixinTokenCreator(String appid, String secret) {
+ this.appid = appid;
this.secret = secret;
- this.accountType = accountType;
this.request = new HttpRequest();
}
@Override
public String getCacheKey() {
- return String.format("%s_%s", accountType.name(), id);
+ return String.format("mp_token_%s", appid);
}
@Override
public Token createToken() throws WeixinException {
- String tokenUrl = String.format(Consts.MP_ASSESS_TOKEN_URL, id, secret);
- if (accountType == AccountType.QY) {
- tokenUrl = String.format(Consts.QY_ASSESS_TOKEN_URL, id, secret);
- }
+ String tokenUrl = String.format(Consts.MP_ASSESS_TOKEN_URL, appid,
+ secret);
Response response = request.get(tokenUrl);
Token token = response.getAsObject(new TypeReference() {
});
diff --git a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/CouponTest.java b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/CouponTest.java
index 764a0890..b8d3d950 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/CouponTest.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/CouponTest.java
@@ -13,9 +13,8 @@ import com.foxinmy.weixin4j.mp.WeixinPayProxy;
import com.foxinmy.weixin4j.mp.payment.coupon.CouponDetail;
import com.foxinmy.weixin4j.mp.payment.coupon.CouponResult;
import com.foxinmy.weixin4j.mp.payment.coupon.CouponStock;
+import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.token.FileTokenHolder;
-import com.foxinmy.weixin4j.token.WeixinTokenCreator;
-import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.util.DateUtil;
/**
@@ -31,15 +30,12 @@ public class CouponTest {
protected final static WeixinPayProxy WEIXINPAY;
protected final static WeixinMpAccount ACCOUNT;
static {
- ACCOUNT = new WeixinMpAccount("公众号的id",
- "公众号的secret",
- "公众号的支付密钥", "商户平台的id");
+ ACCOUNT = new WeixinMpAccount("公众号的id", "公众号的secret", "公众号的支付密钥",
+ "商户平台的id");
WEIXINPAY = new WeixinPayProxy(ACCOUNT, new FileTokenHolder(
- new WeixinTokenCreator(ACCOUNT.getId(), ACCOUNT.getSecret(),
- AccountType.MP)));
+ new WeixinTokenCreator(ACCOUNT.getId(), ACCOUNT.getSecret())));
}
- protected final File caFile = new File(
- "证书文件的路径(*.p12)");
+ protected final File caFile = new File("证书文件的路径(*.p12)");
@Test
public void sendCoupon() throws WeixinException {
@@ -55,7 +51,7 @@ public class CouponTest {
CouponStock couponStock = WEIXINPAY.queryCouponStock("couponStockId");
System.err.println(couponStock);
}
-
+
@Test
public void queryCouponDetail() throws WeixinException {
CouponDetail couponDetail = WEIXINPAY.queryCouponDetail("couponId");
diff --git a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/GroupTest.java b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/GroupTest.java
index 68f1f021..290ee2c7 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/GroupTest.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/GroupTest.java
@@ -56,8 +56,21 @@ public class GroupTest extends TokenTest {
@Test
public void move() throws WeixinException {
- JsonResult result = groupApi.moveGroup("owGBft_vbBbOaQOmpEUE4xDLeRSU",
- 100);
+ JsonResult result = groupApi.moveGroup(100,
+ "owGBft_vbBbOaQOmpEUE4xDLeRSU");
+ Assert.assertEquals(0, result.getCode());
+ }
+
+ @Test
+ public void batchMove() throws WeixinException {
+ JsonResult result = groupApi.moveGroup(100,
+ "owGBft_vbBbOaQOmpEUE4xDLeRSU");
+ Assert.assertEquals(0, result.getCode());
+ }
+
+ @Test
+ public void delete() throws WeixinException {
+ JsonResult result = groupApi.deleteGroup(100);
Assert.assertEquals(0, result.getCode());
}
}
diff --git a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/PayTest.java b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/PayTest.java
index ee391768..23239d32 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/PayTest.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/PayTest.java
@@ -17,12 +17,11 @@ import com.foxinmy.weixin4j.mp.payment.v3.ApiResult;
import com.foxinmy.weixin4j.mp.payment.v3.Order;
import com.foxinmy.weixin4j.mp.payment.v3.PayPackageV3;
import com.foxinmy.weixin4j.mp.payment.v3.PrePay;
+import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.mp.type.IdQuery;
import com.foxinmy.weixin4j.mp.type.IdType;
import com.foxinmy.weixin4j.mp.type.TradeType;
import com.foxinmy.weixin4j.token.FileTokenHolder;
-import com.foxinmy.weixin4j.token.WeixinTokenCreator;
-import com.foxinmy.weixin4j.type.AccountType;
public class PayTest {
private final static WeixinPayProxy PAY2;
@@ -30,20 +29,14 @@ public class PayTest {
private final static WeixinMpAccount ACCOUNT2;
private final static WeixinMpAccount ACCOUNT3;
static {
- ACCOUNT2 = new WeixinMpAccount(
- "请填入v2版本的appid",
- "请填入v2版本的appsecret",
- "请填入v2版本的paysignkey",
- "请填入v2版本的partnerId", "请填入v2版本的partnerKey");
+ ACCOUNT2 = new WeixinMpAccount("请填入v2版本的appid", "请填入v2版本的appsecret",
+ "请填入v2版本的paysignkey", "请填入v2版本的partnerId", "请填入v2版本的partnerKey");
PAY2 = new WeixinPayProxy(ACCOUNT2, new FileTokenHolder(
- new WeixinTokenCreator(ACCOUNT2.getId(), ACCOUNT2.getSecret(),
- AccountType.MP)));
- ACCOUNT3 = new WeixinMpAccount("请填入v3版本的appid",
- "请填入v3版本的appSecret",
+ new WeixinTokenCreator(ACCOUNT2.getId(), ACCOUNT2.getSecret())));
+ ACCOUNT3 = new WeixinMpAccount("请填入v3版本的appid", "请填入v3版本的appSecret",
"请填入v3版本的paysignkey", "请填入v3版本的mchid");
PAY3 = new WeixinPayProxy(ACCOUNT3, new FileTokenHolder(
- new WeixinTokenCreator(ACCOUNT3.getId(), ACCOUNT3.getSecret(),
- AccountType.MP)));
+ new WeixinTokenCreator(ACCOUNT3.getId(), ACCOUNT3.getSecret())));
}
@Test
@@ -53,8 +46,7 @@ public class PayTest {
@Test
public void refundV2() throws WeixinException {
- File caFile = new File(
- "签名文件,如12333.pfx");
+ File caFile = new File("签名文件,如12333.pfx");
IdQuery idQuery = new IdQuery("D15020300005", IdType.TRADENO);
System.err.println(PAY2.refundV2(caFile, idQuery, "1422925555037", 16d,
16d, "1221928801", "111111", null, null, null));
@@ -91,8 +83,8 @@ public class PayTest {
@Test
public void refundQueryV3() throws WeixinException {
- com.foxinmy.weixin4j.mp.payment.v3.RefundRecord record = PAY3.refundQueryV3(new IdQuery("TT_1427183696238",
- IdType.TRADENO));
+ com.foxinmy.weixin4j.mp.payment.v3.RefundRecord record = PAY3
+ .refundQueryV3(new IdQuery("TT_1427183696238", IdType.TRADENO));
System.err.println(record);
// 这里的验证签名需要把details循环拼接
String sign = record.getSign();
@@ -117,12 +109,11 @@ public class PayTest {
@Test
public void refundV3() throws WeixinException {
- File caFile = new File(
- "签名文件如123.p12");
+ File caFile = new File("签名文件如123.p12");
IdQuery idQuery = new IdQuery("TT_1427183696238", IdType.TRADENO);
com.foxinmy.weixin4j.mp.payment.v3.RefundResult result = PAY3.refundV3(
- caFile, idQuery, "TT_R" + System.currentTimeMillis(), 0.01d, 0.01d,
- null, "10020674");
+ caFile, idQuery, "TT_R" + System.currentTimeMillis(), 0.01d,
+ 0.01d, null, "10020674");
System.err.println(result);
String sign = result.getSign();
result.setSign(null);
diff --git a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/TokenTest.java b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/TokenTest.java
index f239b160..20f48255 100644
--- a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/TokenTest.java
+++ b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/TokenTest.java
@@ -1,14 +1,19 @@
package com.foxinmy.weixin4j.mp.test;
+import java.net.URL;
+
+import org.jsoup.Jsoup;
+import org.jsoup.nodes.Document;
+import org.jsoup.nodes.Element;
+import org.jsoup.select.Elements;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import com.foxinmy.weixin4j.exception.WeixinException;
+import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
-import com.foxinmy.weixin4j.token.WeixinTokenCreator;
-import com.foxinmy.weixin4j.type.AccountType;
/**
* token测试
@@ -24,11 +29,26 @@ public class TokenTest {
@Before
public void setUp() {
- tokenHolder = new FileTokenHolder(new WeixinTokenCreator(AccountType.MP));
+ tokenHolder = new FileTokenHolder(new WeixinTokenCreator());
}
@Test
public void test() throws WeixinException {
Assert.assertNotNull(tokenHolder.getToken());
}
+
+ public static void main(String[] args) throws Exception {
+ String wikiUrl = "http://qydev.weixin.qq.com/wiki/index.php?title=%E5%85%A8%E5%B1%80%E8%BF%94%E5%9B%9E%E7%A0%81%E8%AF%B4%E6%98%8E";
+ // wikiUrl =
+ // "http://mp.weixin.qq.com/wiki/17/fa4e1434e57290788bde25603fa2fcbd.html";
+ Document doc = Jsoup.parse(new URL(wikiUrl), 5000);
+ Elements errors = doc.getElementsByTag("tr");
+ String node = "%s%s";
+ StringBuilder xml = new StringBuilder();
+ for (Element error : errors) {
+ xml.append(String.format(node, error.child(0).text(), error
+ .child(1).text()));
+ }
+ System.err.println(xml);
+ }
}
diff --git a/weixin4j-qy/README.md b/weixin4j-qy/README.md
index 8f2a6ef5..77e7ba7b 100644
--- a/weixin4j-qy/README.md
+++ b/weixin4j-qy/README.md
@@ -138,3 +138,7 @@ weixin4j-qy
* 2015-04-09
+ **weixin4j-qy-api**: [AgentApi](./weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/AgentApi.java)新增获取应用列表概况接口
+
+* 2015-04-13
+
+ + **weixin4j-qy-api**: 新增WeixinTokenCreator与WeixinJSTicketCreator类
diff --git a/weixin4j-qy/weixin4j-qy-api/README.md b/weixin4j-qy/weixin4j-qy-api/README.md
index 06ab537a..cfc83958 100644
--- a/weixin4j-qy/weixin4j-qy-api/README.md
+++ b/weixin4j-qy/weixin4j-qy-api/README.md
@@ -106,4 +106,8 @@ weixin.properties说明
* 2015-04-09
- + [AgentApi](./src/main/java/com/foxinmy/weixin4j/qy/api/AgentApi.java)新增获取应用列表概况接口
\ No newline at end of file
+ + [AgentApi](./src/main/java/com/foxinmy/weixin4j/qy/api/AgentApi.java)新增获取应用列表概况接口
+
+* 2015-04-13
+
+ + 新增WeixinTokenCreator与WeixinJSTicketCreator类
\ No newline at end of file
diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
index 2c1f17b7..650ed925 100644
--- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
+++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java
@@ -27,12 +27,11 @@ import com.foxinmy.weixin4j.qy.model.IdParameter;
import com.foxinmy.weixin4j.qy.model.Party;
import com.foxinmy.weixin4j.qy.model.Tag;
import com.foxinmy.weixin4j.qy.model.User;
+import com.foxinmy.weixin4j.qy.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.qy.type.InviteType;
import com.foxinmy.weixin4j.qy.type.UserStatus;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
-import com.foxinmy.weixin4j.token.WeixinTokenCreator;
-import com.foxinmy.weixin4j.type.AccountType;
import com.foxinmy.weixin4j.type.MediaType;
/**
@@ -59,7 +58,7 @@ public class WeixinProxy {
* 默认采用文件存放Token信息
*/
public WeixinProxy() {
- this(new FileTokenHolder(new WeixinTokenCreator(AccountType.QY)));
+ this(new FileTokenHolder(new WeixinTokenCreator()));
}
/**
@@ -69,8 +68,7 @@ public class WeixinProxy {
* @param corpsecret
*/
public WeixinProxy(String corpid, String corpsecret) {
- this(new FileTokenHolder(new WeixinTokenCreator(corpid, corpsecret,
- AccountType.QY)));
+ this(new FileTokenHolder(new WeixinTokenCreator(corpid, corpsecret)));
}
/**
diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/BatchApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/BatchApi.java
index ee2468f3..9d5fcfb5 100644
--- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/BatchApi.java
+++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/BatchApi.java
@@ -75,7 +75,7 @@ public class BatchApi extends QyApi {
* @param callback
* 接收任务执行结果的回调地址等信息
* @return 异步任务id,最大长度为64字符
- * @see {@link com.foxinmy.weixin4j.qy.api.UserApi#batchUploadUsers(List)}
+ * @see {@link com.foxinmy.weixin4j.qy.api.MediaApi#batchUploadUsers(List)}
* @see com.foxinmy.weixin4j.qy.model.Callback
* @see 批量更新成员
@@ -113,7 +113,7 @@ public class BatchApi extends QyApi {
* @param callback
* 接收任务执行结果的回调地址等信息
* @return 异步任务id,最大长度为64字符
- * @see {@link com.foxinmy.weixin4j.qy.api.UserApi#batchUploadUsers(List)}
+ * @see {@link com.foxinmy.weixin4j.qy.api.MediaApi#batchUploadUsers(List)}
* @see com.foxinmy.weixin4j.qy.model.Callback
* @see 批量覆盖成员
@@ -138,6 +138,7 @@ public class BatchApi extends QyApi {
* @param callback
* 接收任务执行结果的回调地址等信息
* @return 异步任务id,最大长度为64字符
+ * @see {@link com.foxinmy.weixin4j.qy.api.MediaApi#batchUploadParties(List)}
* @see com.foxinmy.weixin4j.qy.model.Callback
* @see 批量覆盖部门
diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinJSTicketCreator.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinJSTicketCreator.java
new file mode 100644
index 00000000..b78520b4
--- /dev/null
+++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinJSTicketCreator.java
@@ -0,0 +1,55 @@
+package com.foxinmy.weixin4j.qy.token;
+
+import com.alibaba.fastjson.JSONObject;
+import com.foxinmy.weixin4j.exception.WeixinException;
+import com.foxinmy.weixin4j.http.HttpRequest;
+import com.foxinmy.weixin4j.http.Response;
+import com.foxinmy.weixin4j.model.Consts;
+import com.foxinmy.weixin4j.model.Token;
+import com.foxinmy.weixin4j.token.TokenCreator;
+import com.foxinmy.weixin4j.token.TokenHolder;
+
+/**
+ * 微信企业号JSTICKET创建者
+ *
+ * @className WeixinJSTicketCreator
+ * @author jy
+ * @date 2015年1月10日
+ * @since JDK 1.7
+ * @see JS
+ * TICKET
+ */
+public class WeixinJSTicketCreator implements TokenCreator {
+
+ private final String appid;
+ private final TokenHolder weixinTokenHolder;
+ private final HttpRequest request;
+
+ /**
+ * 企业号的的access_token
+ *
+ * @param weixinTokenHolder
+ */
+ public WeixinJSTicketCreator(String appid, TokenHolder weixinTokenHolder) {
+ this.appid = appid;
+ this.weixinTokenHolder = weixinTokenHolder;
+ this.request = new HttpRequest();
+ }
+
+ @Override
+ public String getCacheKey() {
+ return String.format("qy_jsticket_%s", appid);
+ }
+
+ @Override
+ public Token createToken() throws WeixinException {
+ Response response = request.get(String.format(Consts.QY_JS_TICKET_URL,
+ weixinTokenHolder.getToken().getAccessToken()));
+ JSONObject result = response.getAsJson();
+ Token token = new Token(result.getString("ticket"));
+ token.setExpiresIn(result.getIntValue("expires_in"));
+ token.setTime(System.currentTimeMillis());
+ return token;
+ }
+}
diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTokenCreator.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTokenCreator.java
new file mode 100644
index 00000000..d8047fc4
--- /dev/null
+++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTokenCreator.java
@@ -0,0 +1,58 @@
+package com.foxinmy.weixin4j.qy.token;
+
+import com.alibaba.fastjson.TypeReference;
+import com.foxinmy.weixin4j.exception.WeixinException;
+import com.foxinmy.weixin4j.http.HttpRequest;
+import com.foxinmy.weixin4j.http.Response;
+import com.foxinmy.weixin4j.model.Consts;
+import com.foxinmy.weixin4j.model.Token;
+import com.foxinmy.weixin4j.model.WeixinQyAccount;
+import com.foxinmy.weixin4j.token.TokenCreator;
+import com.foxinmy.weixin4j.util.ConfigUtil;
+
+/**
+ * 微信企业号TOKEN创建者
+ *
+ * @className WeixinTokenCreator
+ * @author jy
+ * @date 2015年1月10日
+ * @since JDK 1.7
+ * @see 微信企业号获取token说明
+ * @see com.foxinmy.weixin4j.model.Token
+ */
+public class WeixinTokenCreator implements TokenCreator {
+
+ private final HttpRequest request;
+ private final String corpid;
+ private final String corpsecret;
+
+ public WeixinTokenCreator() {
+ WeixinQyAccount weixinAccount = ConfigUtil.getWeixinQyAccount();
+ this.corpid = weixinAccount.getId();
+ this.corpsecret = weixinAccount.getSecret();
+ this.request = new HttpRequest();
+ }
+
+ public WeixinTokenCreator(String corpid, String corpsecret) {
+ this.corpid = corpid;
+ this.corpsecret = corpsecret;
+ this.request = new HttpRequest();
+ }
+
+ @Override
+ public String getCacheKey() {
+ return String.format("qy_token_%s", corpid);
+ }
+
+ @Override
+ public Token createToken() throws WeixinException {
+ String tokenUrl = String.format(Consts.QY_ASSESS_TOKEN_URL, corpid,
+ corpsecret);
+ Response response = request.get(tokenUrl);
+ Token token = response.getAsObject(new TypeReference() {
+ });
+ token.setTime(System.currentTimeMillis());
+ return token;
+ }
+}
diff --git a/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/TokenTest.java b/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/TokenTest.java
index f747f231..2353c3c1 100644
--- a/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/TokenTest.java
+++ b/weixin4j-qy/weixin4j-qy-api/src/test/java/com/foxinmy/weixin4j/qy/test/TokenTest.java
@@ -5,10 +5,9 @@ import org.junit.Before;
import org.junit.Test;
import com.foxinmy.weixin4j.exception.WeixinException;
+import com.foxinmy.weixin4j.qy.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.token.FileTokenHolder;
import com.foxinmy.weixin4j.token.TokenHolder;
-import com.foxinmy.weixin4j.token.WeixinTokenCreator;
-import com.foxinmy.weixin4j.type.AccountType;
/**
* token测试
@@ -25,7 +24,7 @@ public class TokenTest {
@Before
public void setUp() {
tokenHolder = new FileTokenHolder(
- new WeixinTokenCreator(AccountType.QY));
+ new WeixinTokenCreator());
}
@Test