diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinSuiteProxy.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinSuiteProxy.java
index 017e672e..aad3ab85 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinSuiteProxy.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinSuiteProxy.java
@@ -1,9 +1,12 @@
package com.foxinmy.weixin4j.qy;
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import com.foxinmy.weixin4j.exception.WeixinException;
+import com.foxinmy.weixin4j.model.Consts;
import com.foxinmy.weixin4j.model.WeixinAccount;
import com.foxinmy.weixin4j.qy.api.ProviderApi;
import com.foxinmy.weixin4j.qy.api.SuiteApi;
@@ -13,8 +16,10 @@ import com.foxinmy.weixin4j.qy.suite.SuiteTicketHolder;
import com.foxinmy.weixin4j.qy.suite.Weixin4jSuiteSettings;
import com.foxinmy.weixin4j.qy.token.WeixinProviderTokenCreator;
import com.foxinmy.weixin4j.qy.type.LoginTargetType;
+import com.foxinmy.weixin4j.qy.type.URLConsts;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.util.StringUtil;
+import com.foxinmy.weixin4j.util.Weixin4jConfigUtil;
/**
* 微信第三方应用接口实现
@@ -24,8 +29,9 @@ import com.foxinmy.weixin4j.util.StringUtil;
* @date 2015年6月22日
* @since JDK 1.6
* @see com.foxinmy.weixin4j.qy.api.SuiteApi
- * @see 企业号第三方应用
+ * @see
+ * 企业号第三方应用
*/
public class WeixinSuiteProxy {
@@ -55,25 +61,20 @@ public class WeixinSuiteProxy {
this.suiteSettings = suiteSettings;
if (suiteSettings.getWeixinAccount().getSuiteAccounts() != null) {
this.suiteMap = new HashMap();
- for (WeixinAccount suite : suiteSettings.getWeixinAccount()
- .getSuiteAccounts()) {
+ for (WeixinAccount suite : suiteSettings.getWeixinAccount().getSuiteAccounts()) {
this.suiteMap.put(suite.getId(), new SuiteApi(
- new SuiteTicketHolder(suite.getId(), suite.getSecret(),
- suiteSettings.getTokenStorager0())));
- this.suiteMap.put(
- null,
- suiteMap.get(suiteSettings.getWeixinAccount()
- .getSuiteAccounts().get(0).getId()));
+ new SuiteTicketHolder(suite.getId(), suite.getSecret(), suiteSettings.getTokenStorager0())));
+ this.suiteMap.put(null,
+ suiteMap.get(suiteSettings.getWeixinAccount().getSuiteAccounts().get(0).getId()));
}
}
if (StringUtil.isNotBlank(suiteSettings.getWeixinAccount().getId())
- && StringUtil.isNotBlank(suiteSettings.getWeixinAccount()
- .getProviderSecret())) {
- this.providerApi = new ProviderApi(new TokenHolder(
- new WeixinProviderTokenCreator(suiteSettings
- .getWeixinAccount().getId(), suiteSettings
- .getWeixinAccount().getProviderSecret()),
- suiteSettings.getTokenStorager0()),
+ && StringUtil.isNotBlank(suiteSettings.getWeixinAccount().getProviderSecret())) {
+ this.providerApi = new ProviderApi(
+ new TokenHolder(
+ new WeixinProviderTokenCreator(suiteSettings.getWeixinAccount().getId(),
+ suiteSettings.getWeixinAccount().getProviderSecret()),
+ suiteSettings.getTokenStorager0()),
suiteSettings.getTokenStorager0());
}
}
@@ -88,27 +89,84 @@ public class WeixinSuiteProxy {
}
/**
- * 只关注第一个套件获取API(如果只有一个套件
+ * 获取套件接口对象(只关注第一个套件
*
* @see com.foxinmy.weixin4j.qy.api.SuiteApi
* @return API实例
*/
- public SuiteApi api() {
+ public SuiteApi suite() {
return this.suiteMap.get(null);
}
/**
- * 多个套件获取API
+ * 获取套件接口对象(多个套件
*
* @see com.foxinmy.weixin4j.qy.api.SuiteApi
* @param suiteId
* 套件ID
* @return API实例
*/
- public SuiteApi api(String suiteId) {
+ public SuiteApi suite(String suiteId) {
return this.suiteMap.get(suiteId);
}
+ /**
+ * 缓存套件ticket(多个套件
+ *
+ * @param suiteId
+ * 套件ID
+ * @param suiteTicket
+ * 套件ticket内容
+ * @see
+ * 推送suite_ticket协议
+ * @throws WeixinException
+ */
+ public void cacheTicket(String suiteId, String suiteTicket) throws WeixinException {
+ suite(suiteId).getTicketHolder().cachingTicket(suiteTicket);
+ }
+
+ /**
+ * 应用套件授权 需先缓存ticket
+ *
+ * @see {@link #getSuiteAuthorizeURL(String, String,String)}
+ * @param suiteId
+ * 套件ID
+ * @see {@link #cacheTicket(String, String)}
+ * @return 请求授权的URL
+ * @throws WeixinException
+ */
+ public String getSuiteAuthorizeURL(String suiteId) throws WeixinException {
+ String redirectUri = Weixin4jConfigUtil.getValue("suite.oauth.redirect.uri");
+ return getSuiteAuthorizeURL(suiteId, redirectUri, "state");
+ }
+
+ /**
+ * 应用套件授权 需先缓存ticket
+ *
+ * @param suiteId
+ * 套件ID
+ * @param redirectUri
+ * 授权后重定向url
+ * @param state
+ * 回调后原样返回
+ * @see 企业号第三方应用套件授权
+ * @see {@link SuiteApi#getPreCodeHolder}
+ * @return 请求授权的URL
+ * @throws WeixinException
+ */
+ public String getSuiteAuthorizeURL(String suiteId, String redirectUri, String state) throws WeixinException {
+ try {
+ return String.format(URLConsts.SUITE_OAUTH_URL, suiteId, suite(suiteId).getTicketHolder().getTicket(),
+ URLEncoder.encode(redirectUri, Consts.UTF_8.name()), state);
+ } catch (UnsupportedEncodingException e) {
+ ;
+ }
+ return "";
+ }
+
/**
* 第三方套件获取企业号管理员登录信息
*
@@ -116,8 +174,9 @@ public class WeixinSuiteProxy {
* oauth2.0授权企业号管理员登录产生的code
* @return 登陆信息
* @see com.foxinmy.weixin4j.qy.api.ProviderApi
- * @see 授权获取企业号管理员登录信息
+ * @see
+ * 授权获取企业号管理员登录信息
* @see com.foxinmy.weixin4j.qy.model.OUserInfo
* @throws WeixinException
*/
@@ -136,12 +195,12 @@ public class WeixinSuiteProxy {
* 授权方应用id 小余1时则不传递
* @return 登陆URL
* @see com.foxinmy.weixin4j.qy.api.ProviderApi
- * @see 获取登录企业号官网的url
+ * @see
+ * 获取登录企业号官网的url
* @throws WeixinException
*/
- public String getLoginUrl(String corpId, LoginTargetType targetType,
- int agentId) throws WeixinException {
+ public String getLoginUrl(String corpId, LoginTargetType targetType, int agentId) throws WeixinException {
return providerApi.getLoginUrl(corpId, targetType, agentId);
}
@@ -156,8 +215,7 @@ public class WeixinSuiteProxy {
* @return
*/
public WeixinProxy getWeixinProxy(String suiteId, String authCorpId) {
- return new WeixinProxy(api(suiteId).getPerCodeHolder(authCorpId), api(
- suiteId).getSuiteTokenHolder());
+ return new WeixinProxy(suite(suiteId).getPerCodeHolder(authCorpId), suite(suiteId).getSuiteTokenHolder());
}
public final static String VERSION = "1.6.7";
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/OauthApi.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/OauthApi.java
index b45845cc..f61d460f 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/OauthApi.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/OauthApi.java
@@ -1,158 +1,113 @@
-package com.foxinmy.weixin4j.qy.api;
-
-import java.io.UnsupportedEncodingException;
-import java.net.URLEncoder;
-
-import com.foxinmy.weixin4j.model.Consts;
-import com.foxinmy.weixin4j.model.WeixinAccount;
-import com.foxinmy.weixin4j.util.Weixin4jConfigUtil;
-
-/**
- * 企业号oauth授权
- *
- * @className OauthApi
- * @author jy
- * @date 2015年6月11日
- * @since JDK 1.6
- * @see 企业号用户身份授权说明
- * @see 企业号第三方提供商授权说明
- * @see 企业号第三方套件应用授权说明
- */
-public class OauthApi extends QyApi {
- private final WeixinAccount account;
-
- public OauthApi() {
- this(Weixin4jConfigUtil.getWeixinAccount());
- }
-
- public OauthApi(WeixinAccount account) {
- this.account = account;
- }
-
- /**
- * 企业号用户身份授权
- *
- * @see {@link #getUserAuthorizeURL(String, String,String)}
- *
- * @return 请求授权的URL
- */
- public String getUserAuthorizeURL() {
- String corpId = account.getId();
- String redirectUri = Weixin4jConfigUtil
- .getValue("user.oauth.redirect.uri");
- return getUserAuthorizeURL(corpId, redirectUri, "state");
- }
-
- /**
- * 企业号用户身份授权
- *
- * @param corpId
- * 企业号的corpid
- * @param redirectUri
- * 重定向地址
- * @param state
- * 用于保持请求和回调的状态
- * @return 请求授权的URL
- * @see 企业号用户身份授权
- */
- public String getUserAuthorizeURL(String corpId, String redirectUri,
- String state) {
- String oauth_uri = getRequestUri("user_oauth_uri");
- try {
- return String.format(oauth_uri, corpId,
- URLEncoder.encode(redirectUri, Consts.UTF_8.name()), state);
- } catch (UnsupportedEncodingException e) {
- ;
- }
- return "";
- }
-
- /**
- * 企业号第三方提供商授权
- *
- * @see {@link #getThirdAuthorizeURL(String, String,String)}
- *
- * @return 请求授权的URL
- */
- public String getThirdAuthorizeURL() {
- String corpId = account.getId();
- String redirectUri = Weixin4jConfigUtil
- .getValue("third.oauth.redirect.uri");
- return getThirdAuthorizeURL(corpId, redirectUri, "state");
- }
-
- /**
- * 企业号登陆授权
- *
- * @param corpId
- * 企业号(提供商)的corpid
- * @param redirectUri
- * 重定向地址
- * @param state
- * 用于保持请求和回调的状态,授权请求后原样带回给第三方
- * @return 请求授权的URL
- * @see ProviderApi
- * @see {@link com.foxinmy.weixin4j.qy.WeixinSuiteProxy#getOUserInfoByCode(String)}
- * @see 企业号第三方提供商授权
- */
- public String getThirdAuthorizeURL(String corpId, String redirectUri,
- String state) {
- String oauth_uri = getRequestUri("provider_oauth_uri");
- try {
- return String.format(oauth_uri, corpId,
- URLEncoder.encode(redirectUri, Consts.UTF_8.name()), state);
- } catch (UnsupportedEncodingException e) {
- ;
- }
- return "";
- }
-
- /**
- * 应用套件授权
- *
- * @see {@link #getSuiteAuthorizeURL(String,String, String,String)}
- * @param suiteId
- * 套件ID
- * @param preAuthCode
- * 预授权码
- * @return
- */
- public String getSuiteAuthorizeURL(String suiteId, String preAuthCode) {
- String redirectUri = Weixin4jConfigUtil
- .getValue("suite.oauth.redirect.uri");
- return getSuiteAuthorizeURL(suiteId, preAuthCode, redirectUri, "state");
- }
-
- /**
- * 应用套件授权
- *
- * @param suiteId
- * 套件ID
- * @param preAuthCode
- * 预授权码
- * @param redirectUri
- * 授权后重定向url
- * @param state
- * 回调后原样返回
- * @see 企业号第三方应用套件授权
- * @return 请求授权的URL
- */
- public String getSuiteAuthorizeURL(String suiteId, String preAuthCode,
- String redirectUri, String state) {
- String suite_oauth_uri = getRequestUri("suite_oauth_uri");
- try {
- return String.format(suite_oauth_uri, suiteId, preAuthCode,
- URLEncoder.encode(redirectUri, Consts.UTF_8.name()), state);
- } catch (UnsupportedEncodingException e) {
- ;
- }
- return "";
- }
-}
+package com.foxinmy.weixin4j.qy.api;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+
+import com.foxinmy.weixin4j.model.Consts;
+import com.foxinmy.weixin4j.model.WeixinAccount;
+import com.foxinmy.weixin4j.util.Weixin4jConfigUtil;
+
+/**
+ * 企业号oauth授权
+ *
+ * @className OauthApi
+ * @author jy
+ * @date 2015年6月11日
+ * @since JDK 1.6
+ * @see
+ * 企业号用户身份授权说明
+ * @see
+ * 企业号第三方提供商授权说明
+ * @see
+ * 企业号第三方套件应用授权说明
+ */
+public class OauthApi extends QyApi {
+ private final WeixinAccount account;
+
+ public OauthApi() {
+ this(Weixin4jConfigUtil.getWeixinAccount());
+ }
+
+ public OauthApi(WeixinAccount account) {
+ this.account = account;
+ }
+
+ /**
+ * 企业号用户身份授权
+ *
+ * @see {@link #getUserAuthorizeURL(String, String,String)}
+ *
+ * @return 请求授权的URL
+ */
+ public String getUserAuthorizeURL() {
+ String corpId = account.getId();
+ String redirectUri = Weixin4jConfigUtil.getValue("user.oauth.redirect.uri");
+ return getUserAuthorizeURL(corpId, redirectUri, "state");
+ }
+
+ /**
+ * 企业号用户身份授权
+ *
+ * @param corpId
+ * 企业号的corpid
+ * @param redirectUri
+ * 重定向地址
+ * @param state
+ * 用于保持请求和回调的状态
+ * @return 请求授权的URL
+ * @see
+ * 企业号用户身份授权
+ */
+ public String getUserAuthorizeURL(String corpId, String redirectUri, String state) {
+ String oauth_uri = getRequestUri("user_oauth_uri");
+ try {
+ return String.format(oauth_uri, corpId, URLEncoder.encode(redirectUri, Consts.UTF_8.name()), state);
+ } catch (UnsupportedEncodingException e) {
+ ;
+ }
+ return "";
+ }
+
+ /**
+ * 企业号第三方提供商授权
+ *
+ * @see {@link #getThirdAuthorizeURL(String, String,String)}
+ *
+ * @return 请求授权的URL
+ */
+ public String getThirdAuthorizeURL() {
+ String corpId = account.getId();
+ String redirectUri = Weixin4jConfigUtil.getValue("third.oauth.redirect.uri");
+ return getThirdAuthorizeURL(corpId, redirectUri, "state");
+ }
+
+ /**
+ * 企业号登陆授权
+ *
+ * @param corpId
+ * 企业号(提供商)的corpid
+ * @param redirectUri
+ * 重定向地址
+ * @param state
+ * 用于保持请求和回调的状态,授权请求后原样带回给第三方
+ * @return 请求授权的URL
+ * @see ProviderApi
+ * @see {@link com.foxinmy.weixin4j.qy.WeixinSuiteProxy#getOUserInfoByCode(String)}
+ * @see
+ * 企业号第三方提供商授权
+ */
+ public String getThirdAuthorizeURL(String corpId, String redirectUri, String state) {
+ String oauth_uri = getRequestUri("provider_oauth_uri");
+ try {
+ return String.format(oauth_uri, corpId, URLEncoder.encode(redirectUri, Consts.UTF_8.name()), state);
+ } catch (UnsupportedEncodingException e) {
+ ;
+ }
+ return "";
+ }
+}
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
index bb2db1c5..605ec7ef 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/api/weixin.properties
@@ -94,8 +94,6 @@ provider_oauth_uri=https://qy.weixin.qq.com/cgi-bin/loginpage?corp_id=%s&redirec
oauth_logininfo_uri={api_base_url}/service/get_login_info?provider_access_token=%s
# \u767b\u5f55\u4f01\u4e1a\u53f7\u5b98\u7f51\u7684url
oauth_loginurl_uri={api_base_url}/service/get_login_url?provider_access_token=%s
-# \u5e94\u7528\u5957\u4ef6oauth\u6388\u6743
-suite_oauth_uri=https://qy.weixin.qq.com/cgi-bin/loginpage?suite_id=%s&pre_auth_code=%s&redirect_uri=%s&state=%s
# \u5e94\u7528\u5957\u4ef6\u8bbe\u7f6e\u6388\u6743\u914d\u7f6e
suite_set_session_uri={api_base_url}/service/set_session_info?suite_access_token=%s
# \u83b7\u53d6\u4f01\u4e1a\u53f7\u7684\u6c38\u4e45\u6388\u6743\u7801
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTicketCreator.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTicketCreator.java
index 50838a1d..ef3c1c04 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTicketCreator.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/token/WeixinTicketCreator.java
@@ -54,7 +54,7 @@ public class WeixinTicketCreator implements TokenCreator {
response = weixinExecutor
.get(String.format(URLConsts.JS_TICKET_URL, weixinTokenHolder.getToken().getAccessToken()));
} else {
- response = weixinExecutor.get(String.format(URLConsts.TICKET_URL,
+ response = weixinExecutor.get(String.format(URLConsts.SUITE_TICKET_URL,
weixinTokenHolder.getToken().getAccessToken(), ticketType.name()));
}
JSONObject result = response.getAsJson();
diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/URLConsts.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/URLConsts.java
index cb37e67a..65174d0f 100644
--- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/URLConsts.java
+++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/type/URLConsts.java
@@ -1,54 +1,51 @@
-package com.foxinmy.weixin4j.qy.type;
-
-/**
- * URL常量类
- *
- * @className URLConsts
- * @author jy
- * @date 2014年12月3日
- * @since JDK 1.6
- * @see
- */
-public final class URLConsts {
- /**
- *
- */
- public static final String BASE_URL = "https://qyapi.weixin.qq.com/cgi-bin";
- /**
- * 企业号获取token的url
- */
- public static final String ASSESS_TOKEN_URL = BASE_URL
- + "/gettoken?corpid=%s&corpsecret=%s";
- /**
- * 企业号提供商获取token的url
- */
- public static final String PROVIDER_TOKEN_URL = BASE_URL
- + "/service/get_provider_token";
- /**
- * 企业号jssdk获取token的url
- */
- public static final String JS_TICKET_URL = BASE_URL
- + "/get_jsapi_ticket?access_token=%s";
- /**
- * 企业号获取ticket的url
- */
- public static final String TICKET_URL = BASE_URL
- + "/ticket/get?access_token=%s&type=%s";
- /**
- * 企业号第三方应用套件获取token的url
- */
- public static final String SUITE_TOKEN_URL = BASE_URL
- + "/service/get_suite_token";
-
- /**
- * 企业号第三方应用套件获取预授权码的url
- */
- public static final String SUITE_PRE_CODE_URL = BASE_URL
- + "/service/get_pre_auth_code?suite_access_token=%s";
-
- /**
- * 企业号第三方应用套件获取企业号access_token的url
- */
- public static final String TOKEN_SUITE_URL = BASE_URL
- + "/service/get_corp_token?suite_access_token=%s";
-}
+package com.foxinmy.weixin4j.qy.type;
+
+/**
+ * URL常量类
+ *
+ * @className URLConsts
+ * @author jy
+ * @date 2014年12月3日
+ * @since JDK 1.6
+ * @see
+ */
+public final class URLConsts {
+ /**
+ *
+ */
+ public static final String BASE_URL = "https://qyapi.weixin.qq.com/cgi-bin";
+ /**
+ * 企业号获取token的url
+ */
+ public static final String ASSESS_TOKEN_URL = BASE_URL + "/gettoken?corpid=%s&corpsecret=%s";
+ /**
+ * 企业号提供商获取token的url
+ */
+ public static final String PROVIDER_TOKEN_URL = BASE_URL + "/service/get_provider_token";
+ /**
+ * 企业号jssdk获取token的url
+ */
+ public static final String JS_TICKET_URL = BASE_URL + "/get_jsapi_ticket?access_token=%s";
+ /**
+ * 应用套件oauth授权
+ */
+ public static final String SUITE_OAUTH_URL = "https://qy.weixin.qq.com/cgi-bin/loginpage?suite_id=%s&pre_auth_code=%s&redirect_uri=%s&state=%s";
+ /**
+ * 企业号获取ticket的url
+ */
+ public static final String SUITE_TICKET_URL = BASE_URL + "/ticket/get?access_token=%s&type=%s";
+ /**
+ * 企业号第三方应用套件获取token的url
+ */
+ public static final String SUITE_TOKEN_URL = BASE_URL + "/service/get_suite_token";
+
+ /**
+ * 企业号第三方应用套件获取预授权码的url
+ */
+ public static final String SUITE_PRE_CODE_URL = BASE_URL + "/service/get_pre_auth_code?suite_access_token=%s";
+
+ /**
+ * 企业号第三方应用套件获取企业号access_token的url
+ */
+ public static final String TOKEN_SUITE_URL = BASE_URL + "/service/get_corp_token?suite_access_token=%s";
+}