From 89bbc8ecb6c763f3c0c50b50a567f727c67f9752 Mon Sep 17 00:00:00 2001 From: jinyu Date: Wed, 23 Mar 2016 17:10:23 +0800 Subject: [PATCH] up --- .../weixin4j/payment/WeixinPayProxy.java | 6 +- .../com/foxinmy/weixin4j/mp/WeixinProxy.java | 7 +- .../com/foxinmy/weixin4j/mp/api/TmplApi.java | 358 +++++++++--------- .../com/foxinmy/weixin4j/qy/WeixinProxy.java | 8 +- .../foxinmy/weixin4j/qy/WeixinSuiteProxy.java | 326 ++++++++-------- 5 files changed, 359 insertions(+), 346 deletions(-) diff --git a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java index 3ee0aa1f..e15e2765 100644 --- a/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java +++ b/weixin4j-base/src/main/java/com/foxinmy/weixin4j/payment/WeixinPayProxy.java @@ -59,9 +59,11 @@ public class WeixinPayProxy { * 现金API */ private final CashApi cashApi; - + /** + * 配置相关 + */ private final Weixin4jSettings settings; - + /** * 使用weixin4j.properties配置的支付账号信息 */ diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java index b18d756b..357dfcb6 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/WeixinProxy.java @@ -112,8 +112,13 @@ public class WeixinProxy { * 数据统计API */ private final DataApi dataApi; - + /** + * token实现 + */ private final TokenHolder tokenHolder; + /** + * 配置相关 + */ private Weixin4jSettings settings; /** diff --git a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java index 39e8d98e..33920702 100644 --- a/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java +++ b/weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/TmplApi.java @@ -1,179 +1,179 @@ -package com.foxinmy.weixin4j.mp.api; - -import java.util.List; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.alibaba.fastjson.serializer.NameFilter; -import com.foxinmy.weixin4j.exception.WeixinException; -import com.foxinmy.weixin4j.http.weixin.JsonResult; -import com.foxinmy.weixin4j.http.weixin.WeixinResponse; -import com.foxinmy.weixin4j.model.Token; -import com.foxinmy.weixin4j.mp.message.TemplateMessage; -import com.foxinmy.weixin4j.mp.model.TemplateMessageInfo; -import com.foxinmy.weixin4j.mp.type.IndustryType; -import com.foxinmy.weixin4j.token.TokenHolder; -import com.foxinmy.weixin4j.util.NameValue; - -/** - * 模板消息相关API - * - * @className TemplApi - * @author jy - * @date 2014年9月30日 - * @since JDK 1.6 - * @see - */ -public class TmplApi extends MpApi { - - private final TokenHolder tokenHolder; - - public TmplApi(TokenHolder tokenHolder) { - this.tokenHolder = tokenHolder; - } - - /** - * 设置所属行业(每月可修改行业1次,账号仅可使用所属行业中相关的模板) - * - * @param industryTypes - * 所处行业 目前不超过两个 - * @return 操作结果 - * @throws WeixinException - * @see com.foxinmy.weixin4j.mp.type.IndustryType - * @see 设置所处行业 - */ - public JsonResult setTmplIndustry(IndustryType... industryTypes) - throws WeixinException { - JSONObject obj = new JSONObject(); - for (int i = 0; i < industryTypes.length; i++) { - obj.put(String.format("industry_id%d", i + 1), - Integer.toString(industryTypes[i].getTypeId())); - } - Token token = tokenHolder.getToken(); - String template_set_industry_uri = getRequestUri("template_set_industry_uri"); - WeixinResponse response = weixinExecutor.post(String.format( - template_set_industry_uri, token.getAccessToken()), obj - .toJSONString()); - - return response.getAsJsonResult(); - } - - /** - * 获取设置的行业信息 - * - * @return 行业信息数组 第一个元素为帐号设置的主营行业 第二个元素为帐号设置的副营行业 - * @throws WeixinException - * @see com.foxinmy.weixin4j.mp.type.IndustryType - * @see 获取设置的行业信息 - */ - public IndustryType[] getTmplIndustry() throws WeixinException { - String template_get_industry_uri = getRequestUri("template_get_industry_uri"); - WeixinResponse response = weixinExecutor.get(String.format( - template_get_industry_uri, tokenHolder.getAccessToken())); - JSONObject primary = response.getAsJson().getJSONObject( - "primary_industry"); - JSONObject secondary = response.getAsJson().getJSONObject( - "secondary_industry"); - return new IndustryType[] { - primary != null ? IndustryType.getIndustry( - primary.getString("first_class"), - primary.getString("second_class")) : null, - secondary != null ? IndustryType.getIndustry( - secondary.getString("first_class"), - secondary.getString("second_class")) : null }; - } - - /** - * 获取模板ID - * - * @param shortId - * 模板库中模板的编号,有“TM**”和“OPENTMTM**”等形式 - * @return 模板ID - * @throws WeixinException - * @see 获得模板ID - */ - public String getTemplateId(String shortId) throws WeixinException { - Token token = tokenHolder.getToken(); - String template_getid_uri = getRequestUri("template_getid_uri"); - WeixinResponse response = weixinExecutor.post( - String.format(template_getid_uri, token.getAccessToken()), - String.format("{\"template_id_short\":\"%s\"}", shortId)); - - return response.getAsJson().getString("template_id"); - } - - /** - * 获取模板列表 - * - * @return 模板列表 - * @see com.foxinmy.weixin4j.mp.model.TemplateMessageInfo - * @see 获取模板列表 - * @throws WeixinException - */ - public List getAllTemplates() throws WeixinException { - Token token = tokenHolder.getToken(); - String template_getall_uri = getRequestUri("template_getall_uri"); - WeixinResponse response = weixinExecutor.get(String.format( - template_getall_uri, token.getAccessToken())); - return JSON.parseArray(response.getAsJson().getString("template_list"), - TemplateMessageInfo.class); - } - - /** - * 删除模板 - * - * @param templateId - * 公众帐号下模板消息ID - * @return 处理结果 - * @see 删除模板 - * @throws WeixinException - */ - public JsonResult deleteTemplate(String templateId) throws WeixinException { - Token token = tokenHolder.getToken(); - String template_del_uri = getRequestUri("template_del_uri"); - WeixinResponse response = weixinExecutor.post( - String.format(template_del_uri, token.getAccessToken()), - String.format("{\"template_id\"=\"%s\"}", templateId)); - return response.getAsJsonResult(); - } - - /** - * 发送模板消息 - * - * @param tplMessage - * 消息对象 - * @return 发送结果 - * @throws WeixinException - * @see 模板消息 - * @see 运营规范 - * @see com.foxinmy.weixin4j.mp.message.TemplateMessage - * @seee com.foxinmy.weixin4j.msg.event.TemplatesendjobfinishMessage - */ - public JsonResult sendTmplMessage(TemplateMessage tplMessage) - throws WeixinException { - Token token = tokenHolder.getToken(); - String template_send_uri = getRequestUri("template_send_uri"); - WeixinResponse response = weixinExecutor.post( - String.format(template_send_uri, token.getAccessToken()), - JSON.toJSONString(tplMessage, new NameFilter() { - @Override - public String process(Object object, String name, - Object value) { - if (object instanceof NameValue && name.equals("name")) { - return "color"; - } - return name; - } - })); - - return response.getAsJsonResult(); - } -} +package com.foxinmy.weixin4j.mp.api; + +import java.util.List; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.serializer.NameFilter; +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.http.weixin.JsonResult; +import com.foxinmy.weixin4j.http.weixin.WeixinResponse; +import com.foxinmy.weixin4j.model.Token; +import com.foxinmy.weixin4j.mp.message.TemplateMessage; +import com.foxinmy.weixin4j.mp.model.TemplateMessageInfo; +import com.foxinmy.weixin4j.mp.type.IndustryType; +import com.foxinmy.weixin4j.token.TokenHolder; +import com.foxinmy.weixin4j.util.NameValue; + +/** + * 模板消息相关API + * + * @className TemplApi + * @author jy + * @date 2014年9月30日 + * @since JDK 1.6 + * @see + */ +public class TmplApi extends MpApi { + + private final TokenHolder tokenHolder; + + public TmplApi(TokenHolder tokenHolder) { + this.tokenHolder = tokenHolder; + } + + /** + * 设置所属行业(每月可修改行业1次,账号仅可使用所属行业中相关的模板) + * + * @param industryTypes + * 所处行业 目前不超过两个 + * @return 操作结果 + * @throws WeixinException + * @see com.foxinmy.weixin4j.mp.type.IndustryType + * @see 设置所处行业 + */ + public JsonResult setTmplIndustry(IndustryType... industryTypes) + throws WeixinException { + JSONObject obj = new JSONObject(); + for (int i = 0; i < industryTypes.length; i++) { + obj.put(String.format("industry_id%d", i + 1), + Integer.toString(industryTypes[i].getTypeId())); + } + Token token = tokenHolder.getToken(); + String template_set_industry_uri = getRequestUri("template_set_industry_uri"); + WeixinResponse response = weixinExecutor.post(String.format( + template_set_industry_uri, token.getAccessToken()), obj + .toJSONString()); + + return response.getAsJsonResult(); + } + + /** + * 获取设置的行业信息 + * + * @return 行业信息数组 第一个元素为帐号设置的主营行业 第二个元素为帐号设置的副营行业 + * @throws WeixinException + * @see com.foxinmy.weixin4j.mp.type.IndustryType + * @see 获取设置的行业信息 + */ + public IndustryType[] getTmplIndustry() throws WeixinException { + String template_get_industry_uri = getRequestUri("template_get_industry_uri"); + WeixinResponse response = weixinExecutor.get(String.format( + template_get_industry_uri, tokenHolder.getAccessToken())); + JSONObject primary = response.getAsJson().getJSONObject( + "primary_industry"); + JSONObject secondary = response.getAsJson().getJSONObject( + "secondary_industry"); + return new IndustryType[] { + primary != null ? IndustryType.getIndustry( + primary.getString("first_class"), + primary.getString("second_class")) : null, + secondary != null ? IndustryType.getIndustry( + secondary.getString("first_class"), + secondary.getString("second_class")) : null }; + } + + /** + * 获取模板ID + * + * @param shortId + * 模板库中模板的编号,有“TM**”和“OPENTMTM**”等形式 + * @return 模板ID + * @throws WeixinException + * @see 获得模板ID + */ + public String getTemplateId(String shortId) throws WeixinException { + Token token = tokenHolder.getToken(); + String template_getid_uri = getRequestUri("template_getid_uri"); + WeixinResponse response = weixinExecutor.post( + String.format(template_getid_uri, token.getAccessToken()), + String.format("{\"template_id_short\":\"%s\"}", shortId)); + + return response.getAsJson().getString("template_id"); + } + + /** + * 获取模板列表 + * + * @return 模板列表 + * @see com.foxinmy.weixin4j.mp.model.TemplateMessageInfo + * @see 获取模板列表 + * @throws WeixinException + */ + public List getAllTemplates() throws WeixinException { + Token token = tokenHolder.getToken(); + String template_getall_uri = getRequestUri("template_getall_uri"); + WeixinResponse response = weixinExecutor.get(String.format( + template_getall_uri, token.getAccessToken())); + return JSON.parseArray(response.getAsJson().getString("template_list"), + TemplateMessageInfo.class); + } + + /** + * 删除模板 + * + * @param templateId + * 公众帐号下模板消息ID + * @return 处理结果 + * @see 删除模板 + * @throws WeixinException + */ + public JsonResult deleteTemplate(String templateId) throws WeixinException { + Token token = tokenHolder.getToken(); + String template_del_uri = getRequestUri("template_del_uri"); + WeixinResponse response = weixinExecutor.post( + String.format(template_del_uri, token.getAccessToken()), + String.format("{\"template_id\"=\"%s\"}", templateId)); + return response.getAsJsonResult(); + } + + /** + * 发送模板消息 + * + * @param tplMessage + * 消息对象 + * @return 发送结果 + * @throws WeixinException + * @see 模板消息 + * @see 运营规范 + * @see com.foxinmy.weixin4j.mp.message.TemplateMessage + * @see com.foxinmy.weixin4j.msg.event.TemplatesendjobfinishMessage + */ + public JsonResult sendTmplMessage(TemplateMessage tplMessage) + throws WeixinException { + Token token = tokenHolder.getToken(); + String template_send_uri = getRequestUri("template_send_uri"); + WeixinResponse response = weixinExecutor.post( + String.format(template_send_uri, token.getAccessToken()), + JSON.toJSONString(tplMessage, new NameFilter() { + @Override + public String process(Object object, String name, + Object value) { + if (object instanceof NameValue && name.equals("name")) { + return "color"; + } + return name; + } + })); + + return response.getAsJsonResult(); + } +} diff --git a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java index 2a40bd5c..eb1d6ac1 100644 --- a/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java +++ b/weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinProxy.java @@ -103,9 +103,13 @@ public class WeixinProxy { * 聊天服务API */ private final ChatApi chatApi; - + /** + * token实现 + */ private final TokenHolder tokenHolder; - + /** + * 配置相关 + */ private Weixin4jSettings settings; /** 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 f171522b..017e672e 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,162 +1,164 @@ -package com.foxinmy.weixin4j.qy; - -import java.util.HashMap; -import java.util.Map; - -import com.foxinmy.weixin4j.exception.WeixinException; -import com.foxinmy.weixin4j.model.WeixinAccount; -import com.foxinmy.weixin4j.qy.api.ProviderApi; -import com.foxinmy.weixin4j.qy.api.SuiteApi; -import com.foxinmy.weixin4j.qy.model.OUserInfo; -import com.foxinmy.weixin4j.qy.model.WeixinQyAccount; -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.token.TokenHolder; -import com.foxinmy.weixin4j.util.StringUtil; - -/** - * 微信第三方应用接口实现 - * - * @className WeixinSuiteProxy - * @author jy - * @date 2015年6月22日 - * @since JDK 1.6 - * @see com.foxinmy.weixin4j.qy.api.SuiteApi - * @see 企业号第三方应用 - */ -public class WeixinSuiteProxy { - - /** - * 每个套件授权不一样 suiteId - suiteApi - */ - private Map suiteMap; - /** - * 供应商API:如登陆URL - */ - private ProviderApi providerApi; - - private final Weixin4jSuiteSettings suiteSettings; - - public WeixinSuiteProxy() { - this(new Weixin4jSuiteSettings()); - } - - /** - * - * @param suiteSettings - * 套件信息配置 - */ - public WeixinSuiteProxy(Weixin4jSuiteSettings suiteSettings) { - this.suiteSettings = suiteSettings; - if (suiteSettings.getWeixinAccount().getSuiteAccounts() != null) { - this.suiteMap = new HashMap(); - 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())); - } - } - 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()), - suiteSettings.getTokenStorager0()); - } - } - - /** - * 企业号信息 - * - * @return - */ - public WeixinQyAccount getWeixinAccount() { - return this.suiteSettings.getWeixinAccount(); - } - - /** - * 只关注第一个套件获取API(如果只有一个套件 - * - * @see com.foxinmy.weixin4j.qy.api.SuiteApi - * @return API实例 - */ - public SuiteApi api() { - return this.suiteMap.get(null); - } - - /** - * 多个套件获取API - * - * @see com.foxinmy.weixin4j.qy.api.SuiteApi - * @param suiteId - * 套件ID - * @return API实例 - */ - public SuiteApi api(String suiteId) { - return this.suiteMap.get(suiteId); - } - - /** - * 第三方套件获取企业号管理员登录信息 - * - * @param authCode - * oauth2.0授权企业号管理员登录产生的code - * @return 登陆信息 - * @see com.foxinmy.weixin4j.qy.api.ProviderApi - * @see 授权获取企业号管理员登录信息 - * @see com.foxinmy.weixin4j.qy.model.OUserInfo - * @throws WeixinException - */ - public OUserInfo getOUserInfoByCode(String authCode) throws WeixinException { - return providerApi.getOUserInfoByCode(authCode); - } - - /** - * 获取登录企业号官网的url - * - * @param corpId - * oauth授权的corpid - * @param targetType - * 登录跳转到企业号后台的目标页面 - * @param agentId - * 授权方应用id 小余1时则不传递 - * @return 登陆URL - * @see com.foxinmy.weixin4j.qy.api.ProviderApi - * @see 获取登录企业号官网的url - * @throws WeixinException - */ - public String getLoginUrl(String corpId, LoginTargetType targetType, - int agentId) throws WeixinException { - return providerApi.getLoginUrl(corpId, targetType, agentId); - } - - /** - * 创建WeixinProxy对象 - * - * @param suiteId - * 套件ID - * @param authCorpId - * 已授权的corpid - * @see com.foxinmy.weixin4j.qy.WeixinProxy - * @return - */ - public WeixinProxy getWeixinProxy(String suiteId, String authCorpId) { - return new WeixinProxy(api(suiteId).getPerCodeHolder(authCorpId), api( - suiteId).getSuiteTokenHolder()); - } - - public final static String VERSION = "1.6.7"; -} +package com.foxinmy.weixin4j.qy; + +import java.util.HashMap; +import java.util.Map; + +import com.foxinmy.weixin4j.exception.WeixinException; +import com.foxinmy.weixin4j.model.WeixinAccount; +import com.foxinmy.weixin4j.qy.api.ProviderApi; +import com.foxinmy.weixin4j.qy.api.SuiteApi; +import com.foxinmy.weixin4j.qy.model.OUserInfo; +import com.foxinmy.weixin4j.qy.model.WeixinQyAccount; +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.token.TokenHolder; +import com.foxinmy.weixin4j.util.StringUtil; + +/** + * 微信第三方应用接口实现 + * + * @className WeixinSuiteProxy + * @author jy + * @date 2015年6月22日 + * @since JDK 1.6 + * @see com.foxinmy.weixin4j.qy.api.SuiteApi + * @see 企业号第三方应用 + */ +public class WeixinSuiteProxy { + + /** + * 每个套件授权不一样 suiteId - suiteApi + */ + private Map suiteMap; + /** + * 供应商API:如登陆URL + */ + private ProviderApi providerApi; + /** + * 配置相关 + */ + private final Weixin4jSuiteSettings suiteSettings; + + public WeixinSuiteProxy() { + this(new Weixin4jSuiteSettings()); + } + + /** + * + * @param suiteSettings + * 套件信息配置 + */ + public WeixinSuiteProxy(Weixin4jSuiteSettings suiteSettings) { + this.suiteSettings = suiteSettings; + if (suiteSettings.getWeixinAccount().getSuiteAccounts() != null) { + this.suiteMap = new HashMap(); + 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())); + } + } + 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()), + suiteSettings.getTokenStorager0()); + } + } + + /** + * 企业号信息 + * + * @return + */ + public WeixinQyAccount getWeixinAccount() { + return this.suiteSettings.getWeixinAccount(); + } + + /** + * 只关注第一个套件获取API(如果只有一个套件 + * + * @see com.foxinmy.weixin4j.qy.api.SuiteApi + * @return API实例 + */ + public SuiteApi api() { + return this.suiteMap.get(null); + } + + /** + * 多个套件获取API + * + * @see com.foxinmy.weixin4j.qy.api.SuiteApi + * @param suiteId + * 套件ID + * @return API实例 + */ + public SuiteApi api(String suiteId) { + return this.suiteMap.get(suiteId); + } + + /** + * 第三方套件获取企业号管理员登录信息 + * + * @param authCode + * oauth2.0授权企业号管理员登录产生的code + * @return 登陆信息 + * @see com.foxinmy.weixin4j.qy.api.ProviderApi + * @see 授权获取企业号管理员登录信息 + * @see com.foxinmy.weixin4j.qy.model.OUserInfo + * @throws WeixinException + */ + public OUserInfo getOUserInfoByCode(String authCode) throws WeixinException { + return providerApi.getOUserInfoByCode(authCode); + } + + /** + * 获取登录企业号官网的url + * + * @param corpId + * oauth授权的corpid + * @param targetType + * 登录跳转到企业号后台的目标页面 + * @param agentId + * 授权方应用id 小余1时则不传递 + * @return 登陆URL + * @see com.foxinmy.weixin4j.qy.api.ProviderApi + * @see 获取登录企业号官网的url + * @throws WeixinException + */ + public String getLoginUrl(String corpId, LoginTargetType targetType, + int agentId) throws WeixinException { + return providerApi.getLoginUrl(corpId, targetType, agentId); + } + + /** + * 创建WeixinProxy对象 + * + * @param suiteId + * 套件ID + * @param authCorpId + * 已授权的corpid + * @see com.foxinmy.weixin4j.qy.WeixinProxy + * @return + */ + public WeixinProxy getWeixinProxy(String suiteId, String authCorpId) { + return new WeixinProxy(api(suiteId).getPerCodeHolder(authCorpId), api( + suiteId).getSuiteTokenHolder()); + } + + public final static String VERSION = "1.6.7"; +}