From f10203237966b393f9b13827b5343ad4e4fc8bef Mon Sep 17 00:00:00 2001 From: jinyu Date: Mon, 13 Apr 2015 11:26:57 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4TokenCreator=E8=AE=BE?= =?UTF-8?q?=E8=AE=A1&=E5=85=AC=E4=BC=97=E5=8F=B7=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E6=89=B9=E9=87=8F=E7=A7=BB=E5=8A=A8=E3=80=81=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E7=BB=84=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGE.md | 13 +- weixin4j-base/README.md | 6 +- .../java/com/foxinmy/weixin4j/http/error.xml | 176 ++++++++++++++++++ .../com/foxinmy/weixin4j/model/Consts.java | 9 +- .../weixin4j/token/FileTokenHolder.java | 2 +- .../java/com/foxinmy/weixin4j/token/README.md | 8 +- .../weixin4j/token/RedisTokenHolder.java | 2 +- .../foxinmy/weixin4j/type/AccountType.java | 21 +-- weixin4j-mp/README.md | 8 +- weixin4j-mp/weixin4j-mp-api/README.md | 8 +- .../foxinmy/weixin4j/mp/WeixinPayProxy.java | 5 +- .../com/foxinmy/weixin4j/mp/WeixinProxy.java | 51 ++++- .../com/foxinmy/weixin4j/mp/api/GroupApi.java | 55 +++++- .../foxinmy/weixin4j/mp/api/weixin.properties | 4 + .../mp}/token/WeixinJSTicketCreator.java | 10 +- .../mp}/token/WeixinTokenCreator.java | 34 ++-- .../foxinmy/weixin4j/mp/test/CouponTest.java | 16 +- .../foxinmy/weixin4j/mp/test/GroupTest.java | 17 +- .../com/foxinmy/weixin4j/mp/test/PayTest.java | 33 ++-- .../foxinmy/weixin4j/mp/test/TokenTest.java | 26 ++- weixin4j-qy/README.md | 4 + weixin4j-qy/weixin4j-qy-api/README.md | 6 +- .../com/foxinmy/weixin4j/qy/WeixinProxy.java | 8 +- .../com/foxinmy/weixin4j/qy/api/BatchApi.java | 5 +- .../qy/token/WeixinJSTicketCreator.java | 55 ++++++ .../weixin4j/qy/token/WeixinTokenCreator.java | 58 ++++++ .../foxinmy/weixin4j/qy/test/TokenTest.java | 5 +- 27 files changed, 529 insertions(+), 116 deletions(-) rename {weixin4j-base/src/main/java/com/foxinmy/weixin4j => weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp}/token/WeixinJSTicketCreator.java (82%) rename {weixin4j-base/src/main/java/com/foxinmy/weixin4j => weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp}/token/WeixinTokenCreator.java (54%) create mode 100644 weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinJSTicketCreator.java create mode 100644 weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTokenCreator.java 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 clazz; - - AccountType(Class clazz) { - this.clazz = clazz; - } - - public Class 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