From 008c5ce4a808a9ef40c12de85a5628c2fcad3d20 Mon Sep 17 00:00:00 2001 From: "jy.hu" Date: Thu, 27 Nov 2014 22:29:23 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4AuthResult=E7=B1=BB,=E5=B0=86?= =?UTF-8?q?BaseApi=E7=A7=BB=E5=85=A5=E5=88=B0weixin4j-base=E5=B7=A5?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 + .../com/foxinmy/weixin4j}/api/BaseApi.java | 11 +-- .../com/foxinmy/weixin4j/model/Consts.java | 1 + .../foxinmy/weixin4j/model/WeixinAccount.java | 37 +++++++ .../foxinmy/weixin4j/mp/api/CustomApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/GroupApi.java | 2 +- .../foxinmy/weixin4j/mp/api/HelperApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/MassApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/MediaApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/MenuApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/MpApi.java | 22 +++++ .../foxinmy/weixin4j/mp/api/NotifyApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/PayApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/QrApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/TmplApi.java | 2 +- .../com/foxinmy/weixin4j/mp/api/UserApi.java | 2 +- .../foxinmy/weixin4j/mp/model/AuthResult.java | 98 ------------------- .../foxinmy/weixin4j/mp/test/UserTest.java | 1 + .../com/foxinmy/weixin4j/qy/api/BaseApi.java | 57 ----------- .../foxinmy/weixin4j/qy/api/DepartApi.java | 2 +- .../com/foxinmy/weixin4j/qy/api/MediaApi.java | 2 +- .../com/foxinmy/weixin4j/qy/api/MenuApi.java | 2 +- .../foxinmy/weixin4j/qy/api/NotifyApi.java | 2 +- .../com/foxinmy/weixin4j/qy/api/QyApi.java | 22 +++++ .../com/foxinmy/weixin4j/qy/api/TagApi.java | 2 +- .../com/foxinmy/weixin4j/qy/api/UserApi.java | 2 +- 26 files changed, 109 insertions(+), 178 deletions(-) rename {weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp => weixin4j-base/src/main/java/com/foxinmy/weixin4j}/api/BaseApi.java (81%) create mode 100644 weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MpApi.java delete mode 100644 weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/AuthResult.java delete mode 100644 weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/BaseApi.java create mode 100644 weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/QyApi.java diff --git a/README.md b/README.md index 17bc11a8..4248af0a 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,10 @@ https://github.com/foxinmy/weixin4j/releases + **weixin4j-base**: 将Action跟Mapping基础类并入到项目 + **weixin4j-qy**: 新增netty服务与消息分发 + +* 2014-11-27 + + + **weixin-base**: 将BaseApi移入 接下来 ------ diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/BaseApi.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/BaseApi.java similarity index 81% rename from weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/BaseApi.java rename to weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/BaseApi.java index 6248698a..800fee52 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/BaseApi.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/api/BaseApi.java @@ -1,4 +1,4 @@ -package com.foxinmy.weixin4j.mp.api; +package com.foxinmy.weixin4j.api; import java.util.Map; import java.util.ResourceBundle; @@ -12,20 +12,19 @@ import com.thoughtworks.xstream.core.ClassLoaderReference; import com.thoughtworks.xstream.mapper.DefaultMapper; /** - * + * API基础 * @className BaseApi * @author jy.hu * @date 2014年9月26日 * @since JDK 1.7 - * @see api文档 + * @see 微信公众平台API文档 + * @see 微信企业号API文档 */ public class BaseApi { protected final HttpRequest request = new HttpRequest(); protected final static XStream mapXstream = XStream.get(); - private final static ResourceBundle weixinBundle; + protected static ResourceBundle weixinBundle; static { - weixinBundle = ResourceBundle - .getBundle("com/foxinmy/weixin4j/mp/api/weixin"); mapXstream.alias("xml", Map.class); mapXstream.registerConverter(new Map2ObjectConverter(new DefaultMapper( new ClassLoaderReference(XStream.class.getClassLoader())))); 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 636eeca8..9e0901ce 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 @@ -12,6 +12,7 @@ public final class Consts { public static final String PROTOCOL_FILE = "file"; public static final String PROTOCOL_JAR = "jar"; + public static final String OAUTH_AUTHORIZE_URL = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=%s&redirect_uri=%s&response_type=code&scope=%s&state=%s#wechat_redirect"; public static final String MP_ASSESS_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s"; public static final String QY_ASSESS_TOKEN_URL = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%s&corpsecret=%s"; diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinAccount.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinAccount.java index ad29b88d..e8a749a4 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinAccount.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/model/WeixinAccount.java @@ -1,6 +1,10 @@ package com.foxinmy.weixin4j.model; import java.io.Serializable; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +import org.apache.commons.lang3.StringUtils; /** * 微信账号信息 @@ -64,6 +68,39 @@ public abstract class WeixinAccount implements Serializable { this.encodingAesKey = encodingAesKey; } + /** + * 拼接授权URL + * + * @param redirectUri + * 授权后重定向的回调链接地址 + * @param scope + * 应用授权作用域,snsapi_base + * (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo + * (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息) + * @param state + * 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值 + * @return 授权URL + */ + public String getOauthAuthorizeUrl(String redirectUri, String scope, + String state) { + if (StringUtils.isBlank(scope)) { + scope = "snsapi_base"; + } + if (StringUtils.isBlank(state)) { + state = "STATE"; + } + try { + return String.format( + Consts.OAUTH_AUTHORIZE_URL, + URLEncoder.encode(redirectUri, + org.apache.http.Consts.UTF_8.name()), id, scope, + state); + } catch (UnsupportedEncodingException ignore) { + ; + } + return ""; + } + @Override public String toString() { return "WeixinAccount [id=" + id + ", secret=" + secret + ", token=" diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java index 32e2441e..96f3c1c5 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/CustomApi.java @@ -21,7 +21,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @since JDK 1.7 * @see 多客服说明 */ -public class CustomApi extends BaseApi { +public class CustomApi extends MpApi { private final TokenHolder tokenHolder; 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 0606ebdf..bd4220ed 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 @@ -21,7 +21,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * BB%84%E7%AE%A1%E7%90%86%E6%8E%A5%E5%8F%A3">分组接口 * @see com.foxinmy.weixin4j.mp.model.Group */ -public class GroupApi extends BaseApi { +public class GroupApi extends MpApi { private final TokenHolder tokenHolder; public GroupApi(TokenHolder tokenHolder) { diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/HelperApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/HelperApi.java index b65a2569..b09de179 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/HelperApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/HelperApi.java @@ -22,7 +22,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @since JDK 1.7 * @see */ -public class HelperApi extends BaseApi { +public class HelperApi extends MpApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MassApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MassApi.java index 61009a2c..0eb85dc5 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MassApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MassApi.java @@ -29,7 +29,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * href="http://mp.weixin.qq.com/wiki/index.php?title=%E9%AB%98%E7%BA%A7%E7%BE%A4%E5%8F%91%E6%8E%A5%E5%8F%A3">群发接口 * @see com.foxinmy.weixin4j.msg.model.MpArticle */ -public class MassApi extends BaseApi { +public class MassApi extends MpApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java index a835d470..2856a4e9 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MediaApi.java @@ -29,7 +29,7 @@ import com.foxinmy.weixin4j.util.IOUtil; * href="http://mp.weixin.qq.com/wiki/index.php?title=%E4%B8%8A%E4%BC%A0%E4%B8%8B%E8%BD%BD%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6">上传多媒体文件 * @see com.foxinmy.weixin4j.type.MediaType */ -public class MediaApi extends BaseApi { +public class MediaApi extends MpApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MenuApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MenuApi.java index cd448044..d46e6478 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MenuApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MenuApi.java @@ -20,7 +20,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @since JDK 1.7 * @see com.foxinmy.weixin4j.model.Button */ -public class MenuApi extends BaseApi { +public class MenuApi extends MpApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MpApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MpApi.java new file mode 100644 index 00000000..a80ff71d --- /dev/null +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/MpApi.java @@ -0,0 +1,22 @@ +package com.foxinmy.weixin4j.mp.api; + +import java.util.ResourceBundle; + +import com.foxinmy.weixin4j.api.BaseApi; + +/** + * 微信公众平台API + * + * @className MpApi + * @author jy.hu + * @date 2014年9月26日 + * @since JDK 1.7 + * @see com.foxinmy.weixin4j.api.BaseApi + * @see api文档 + */ +public class MpApi extends BaseApi { + static { + weixinBundle = ResourceBundle + .getBundle("com/foxinmy/weixin4j/mp/api/weixin"); + } +} diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/NotifyApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/NotifyApi.java index 34fe64dd..dc48cbe6 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/NotifyApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/NotifyApi.java @@ -19,7 +19,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * href="http://mp.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E9%80%81%E5%AE%A2%E6%9C%8D%E6%B6%88%E6%81%AF">客服消息 * @see com.foxinmy.weixin4j.mp.message.NotifyMessage */ -public class NotifyApi extends BaseApi { +public class NotifyApi extends MpApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java index a7deec63..16c239c3 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/PayApi.java @@ -68,7 +68,7 @@ import com.foxinmy.weixin4j.util.RandomUtil; * @since JDK 1.7 * @see */ -public class PayApi extends BaseApi { +public class PayApi extends MpApi { private final TokenHolder tokenHolder; private final WeixinMpAccount weixinAccount; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/QrApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/QrApi.java index 42c4c3f3..0f8c3ef0 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/QrApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/QrApi.java @@ -22,7 +22,7 @@ import com.foxinmy.weixin4j.util.ConfigUtil; * @see 二维码支持 */ -public class QrApi extends BaseApi { +public class QrApi extends MpApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java index 4b66d00d..efea9308 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java @@ -17,7 +17,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @since JDK 1.7 * @see */ -public class TmplApi extends BaseApi { +public class TmplApi extends MpApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java index d172aa8d..355f48a8 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java +++ b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/api/UserApi.java @@ -25,7 +25,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @since JDK 1.7 * @see com.foxinmy.weixin4j.mp.model.User */ -public class UserApi extends BaseApi { +public class UserApi extends MpApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/AuthResult.java b/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/AuthResult.java deleted file mode 100644 index d6b01c45..00000000 --- a/weixin4j-mp/weixin4j-mp-api/src/main/java/com/foxinmy/weixin4j/mp/model/AuthResult.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.foxinmy.weixin4j.mp.model; - -import java.io.Serializable; - -/** - * 网页授权结果 - * - * @className AuthResult - * @author jy.hu - * @date 2014年4月8日 - * @since JDK 1.7 - * @see 网页授权获取用户基本资料 - */ -public class AuthResult implements Serializable { - - private static final long serialVersionUID = 654855396163854805L; - - /** - * 网页授权获取code - * - * @className AuthScope - * @author jy.hu - * @date 2014年4月8日 - * @since JDK 1.7 - * @see 获取code - */ - public enum AuthScope { - BASE("snsapi_base"), USERINFO("snsapi_userinfo"); - - private String name; - - AuthScope(String name) { - this.name = name; - } - - public String getName() { - return name; - } - } - - public enum AuthCode { - OK, FAILED, REDIRECT - } - - private AuthCode authCode; - private String location; - private OauthToken accessToken; - - public AuthResult(String location) { - this.location = location; - this.authCode = AuthCode.REDIRECT; - } - - public AuthResult(OauthToken accessToken) { - this.authCode = AuthCode.OK; - this.accessToken = accessToken; - } - - public AuthResult(String location, AuthCode authCode) { - this.location = location; - this.authCode = authCode; - } - - public AuthCode getAuthCode() { - return authCode; - } - - public void setAuthCode(AuthCode authCode) { - this.authCode = authCode; - } - - public String getLocation() { - return location; - } - - public void setLocation(String location) { - this.location = location; - } - - public OauthToken getAccessToken() { - return accessToken; - } - - public void setAccessToken(OauthToken accessToken) { - this.accessToken = accessToken; - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append("[AuthResult authCode=").append(authCode); - sb.append(", location=").append(location); - sb.append(", accessToken=").append(accessToken).append("]"); - return sb.toString(); - } -} diff --git a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/UserTest.java b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/UserTest.java index c5966ff3..7f6f2a72 100644 --- a/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/UserTest.java +++ b/weixin4j-mp/weixin4j-mp-api/src/test/java/com/foxinmy/weixin4j/mp/test/UserTest.java @@ -32,6 +32,7 @@ public class UserTest extends TokenTest { User user = userApi.getUser("owGBft_vbBbOaQOmpEUE4xDLeRSU"); Assert.assertNotNull(user); System.out.println(user); + following(); } @Test diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/BaseApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/BaseApi.java deleted file mode 100644 index bbddb79a..00000000 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/BaseApi.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.foxinmy.weixin4j.qy.api; - -import java.util.Map; -import java.util.ResourceBundle; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -import com.foxinmy.weixin4j.http.HttpRequest; -import com.foxinmy.weixin4j.xml.Map2ObjectConverter; -import com.foxinmy.weixin4j.xml.XStream; -import com.thoughtworks.xstream.core.ClassLoaderReference; -import com.thoughtworks.xstream.mapper.DefaultMapper; - -/** - * - * @className BaseApi - * @author jy.hu - * @date 2014年11月18日 - * @since JDK 1.7 - * @see api文档 - */ -public class BaseApi { - protected final HttpRequest request = new HttpRequest(); - protected final static XStream mapXstream = XStream.get(); - private final static ResourceBundle weixinBundle; - static { - weixinBundle = ResourceBundle - .getBundle("com/foxinmy/weixin4j/qy/api/weixin"); - mapXstream.alias("xml", Map.class); - mapXstream.registerConverter(new Map2ObjectConverter(new DefaultMapper( - new ClassLoaderReference(XStream.class.getClassLoader())))); - } - - protected String map2xml(Map map) { - return mapXstream.toXML(map).replaceAll("__", "_"); - } - - @SuppressWarnings("unchecked") - protected Map xml2map(String xml) { - return mapXstream.fromXML(xml, Map.class); - } - - protected String getRequestUri(String key) { - String url = weixinBundle.getString(key); - Pattern p = Pattern.compile("(\\{[^\\}]*\\})"); - Matcher m = p.matcher(url); - StringBuffer sb = new StringBuffer(); - String sub = null; - while (m.find()) { - sub = m.group(); - m.appendReplacement(sb, - getRequestUri(sub.substring(1, sub.length() - 1))); - } - m.appendTail(sb); - return sb.toString(); - } -} diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/DepartApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/DepartApi.java index 53a3b18f..d42172ea 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/DepartApi.java +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/DepartApi.java @@ -22,7 +22,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @see 管理部门说明 */ -public class DepartApi extends BaseApi { +public class DepartApi extends QyApi { private final TokenHolder tokenHolder; public DepartApi(TokenHolder tokenHolder) { diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/MediaApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/MediaApi.java index 83409559..d0c5dbd3 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/MediaApi.java +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/MediaApi.java @@ -29,7 +29,7 @@ import com.foxinmy.weixin4j.util.IOUtil; * href="http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AE%A1%E7%90%86%E5%A4%9A%E5%AA%92%E4%BD%93%E6%96%87%E4%BB%B6">管理多媒体文件 * @see com.foxinmy.weixin4j.type.MediaType */ -public class MediaApi extends BaseApi { +public class MediaApi extends QyApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/MenuApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/MenuApi.java index ae30c659..dc01c64b 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/MenuApi.java +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/MenuApi.java @@ -20,7 +20,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @since JDK 1.7 * @see com.foxinmy.weixin4j.model.Button */ -public class MenuApi extends BaseApi { +public class MenuApi extends QyApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java index 49f6abae..c3175d02 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/NotifyApi.java @@ -26,7 +26,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @see com.foxinmy.weixin4j.msg.model.News * @see com.foxinmy.weixin4j.msg.model.MpNews */ -public class NotifyApi extends BaseApi { +public class NotifyApi extends QyApi { private final TokenHolder tokenHolder; diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/QyApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/QyApi.java new file mode 100644 index 00000000..d7394cf6 --- /dev/null +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/QyApi.java @@ -0,0 +1,22 @@ +package com.foxinmy.weixin4j.qy.api; + +import java.util.ResourceBundle; + +import com.foxinmy.weixin4j.api.BaseApi; + +/** + * 微信企业号API + * + * @className QyApi + * @author jy.hu + * @date 2014年11月18日 + * @since JDK 1.7 + * @see com.foxinmy.weixin4j.api.BaseApi + * @see api文档 + */ +public class QyApi extends BaseApi { + static { + weixinBundle = ResourceBundle + .getBundle("com/foxinmy/weixin4j/qy/api/weixin"); + } +} diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/TagApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/TagApi.java index d8afcd1d..76d1cd2c 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/TagApi.java +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/TagApi.java @@ -22,7 +22,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @see 管理标签 */ -public class TagApi extends BaseApi { +public class TagApi extends QyApi { private final TokenHolder tokenHolder; public TagApi(TokenHolder tokenHolder) { diff --git a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java index 46c7df22..aac4cab8 100644 --- a/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java +++ b/weixin4j-qy/weixin4j-qy-api/src/main/java/com/foxinmy/weixin4j/qy/api/UserApi.java @@ -23,7 +23,7 @@ import com.foxinmy.weixin4j.token.TokenHolder; * @see 管理成员说明 */ -public class UserApi extends BaseApi { +public class UserApi extends QyApi { private final TokenHolder tokenHolder; public UserApi(TokenHolder tokenHolder) {