weixin4j-qy:调整WeixinSuiteProxy对多个套件的支持
This commit is contained in:
parent
de4043b90a
commit
357952e70e
@ -390,4 +390,8 @@
|
||||
+ **weixin4j-mp**: 新增二维码结果类[QRResult.java](./weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/model/QRResult.java)并将二维码接口[QRApi.java](./weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/QrApi.java)名称变更为createQR和createQRFile
|
||||
|
||||
+ **weixin4j-mp**: [Oauth授权](./weixin4j-mp/src/main/java/com/foxinmy/weixin4j/mp/api/OauthApi.java)跳转的uri在配置文件的属性名改为`oauth_redirect_uri`
|
||||
|
||||
|
||||
* 2015-07-30
|
||||
|
||||
+ **weixin4j-qy**: 调整[WeixinSuiteProxy](./weixin4j-qy/src/main/java/com/foxinmy/weixin4j/qy/WeixinSuiteProxy.java)对多个套件的支持
|
||||
|
||||
@ -78,4 +78,8 @@
|
||||
|
||||
* 2015-07-22
|
||||
|
||||
+ 创建标签时可以指定ID
|
||||
+ 创建标签时可以指定ID
|
||||
|
||||
* 2015-07-30
|
||||
|
||||
+ **weixin4j-qy**: 调整[WeixinSuiteProxy](.src/main/java/com/foxinmy/weixin4j/qy/WeixinSuiteProxy.java)对多个套件的支持
|
||||
@ -58,7 +58,7 @@ weixin4j.properties说明
|
||||
示例(properties中换行用右斜杆\\)
|
||||
|
||||
account={"id":"corpid","secret":"corpsecret",\
|
||||
"suiteId":"应用套件的id","suiteSecret":"应用套件的secret",\
|
||||
"suites":[{"id":"应用套件的id","secret":"应用套件的secret"}],\
|
||||
"providerSecret:"第三方提供商secret(企业号登陆)",\
|
||||
"chatSecret":"消息服务secret(企业号聊天)"}
|
||||
|
||||
@ -83,7 +83,7 @@ weixin4j.properties说明
|
||||
// 微信第三方应用API
|
||||
WeixinSuiteProxy weixinSuiteProxy = new WeixinSuiteProxy();
|
||||
//weixinSuiteProxy = new WeixinSuiteProxy(suiteId,suiteSecret);
|
||||
weixinSuiteProxy.getOAuthInfo(authCorpid);
|
||||
weixinSuiteProxy.api().getOAuthInfo(authCorpid);
|
||||
|
||||
> 针对`token`存储有两种方案,`File存储`/`Redis存储`,当然也可自己实现`TokenStorager`,默认使用文件(xml)的方式保存token,如果环境中支持`redis`,建议使用[RedisTokenStorager](https://github.com/foxinmy/weixin4j/wiki/%E7%94%A8redis%E4%BF%9D%E5%AD%98token).
|
||||
|
||||
|
||||
@ -1,15 +1,13 @@
|
||||
package com.foxinmy.weixin4j.qy;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import com.foxinmy.weixin4j.exception.WeixinException;
|
||||
import com.foxinmy.weixin4j.http.weixin.JsonResult;
|
||||
import com.foxinmy.weixin4j.model.WeixinAccount;
|
||||
import com.foxinmy.weixin4j.qy.api.QyApi;
|
||||
import com.foxinmy.weixin4j.qy.api.SuiteApi;
|
||||
import com.foxinmy.weixin4j.qy.model.AgentInfo;
|
||||
import com.foxinmy.weixin4j.qy.model.AgentSetter;
|
||||
import com.foxinmy.weixin4j.qy.model.OUserInfo;
|
||||
import com.foxinmy.weixin4j.qy.suite.SuitePerCodeHolder;
|
||||
import com.foxinmy.weixin4j.qy.suite.SuiteTicketHolder;
|
||||
import com.foxinmy.weixin4j.token.TokenHolder;
|
||||
import com.foxinmy.weixin4j.token.TokenStorager;
|
||||
|
||||
/**
|
||||
@ -24,24 +22,11 @@ import com.foxinmy.weixin4j.token.TokenStorager;
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E6%8E%88%E6%9D%83">企业号第三方应用</a>
|
||||
*/
|
||||
public class WeixinSuiteProxy {
|
||||
/**
|
||||
* 第三方应用API
|
||||
*/
|
||||
private final SuiteApi suiteApi;
|
||||
|
||||
public WeixinSuiteProxy() throws WeixinException {
|
||||
this(QyApi.DEFAULT_WEIXIN_ACCOUNT.getSuiteId(),
|
||||
QyApi.DEFAULT_WEIXIN_ACCOUNT.getSuiteSecret());
|
||||
}
|
||||
private final Map<String, SuiteApi> suiteMap;
|
||||
|
||||
public WeixinSuiteProxy(String suiteId, String suiteSecret)
|
||||
throws WeixinException {
|
||||
this(suiteId, suiteSecret, QyApi.DEFAULT_TOKEN_STORAGER);
|
||||
}
|
||||
|
||||
public WeixinSuiteProxy(TokenStorager tokenStorager) throws WeixinException {
|
||||
this(QyApi.DEFAULT_WEIXIN_ACCOUNT.getSuiteId(),
|
||||
QyApi.DEFAULT_WEIXIN_ACCOUNT.getSuiteSecret(), tokenStorager);
|
||||
public WeixinSuiteProxy() {
|
||||
this(QyApi.DEFAULT_TOKEN_STORAGER);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -50,153 +35,61 @@ public class WeixinSuiteProxy {
|
||||
* 应用ID
|
||||
* @param suiteSecret
|
||||
* 应用secret
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public WeixinSuiteProxy(String suiteId, String suiteSecret) {
|
||||
this(QyApi.DEFAULT_TOKEN_STORAGER, new WeixinAccount(suiteId,
|
||||
suiteSecret));
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param tokenStorager
|
||||
* 应用token存储器
|
||||
* @throws WeixinException
|
||||
* token存储
|
||||
*/
|
||||
public WeixinSuiteProxy(String suiteId, String suiteSecret,
|
||||
TokenStorager tokenStorager) throws WeixinException {
|
||||
this(new SuiteTicketHolder(suiteId, suiteSecret, tokenStorager));
|
||||
public WeixinSuiteProxy(TokenStorager tokenStorager) {
|
||||
this(tokenStorager, QyApi.DEFAULT_WEIXIN_ACCOUNT.suitesToArray());
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param suiteTicketHolder
|
||||
* 套件ticket的存取
|
||||
* @throws WeixinException
|
||||
* @param tokenStorager
|
||||
* token存储
|
||||
* @param suites
|
||||
* 套件信息
|
||||
*/
|
||||
public WeixinSuiteProxy(SuiteTicketHolder suiteTicketHolder)
|
||||
throws WeixinException {
|
||||
this.suiteApi = new SuiteApi(suiteTicketHolder);
|
||||
public WeixinSuiteProxy(TokenStorager tokenStorager,
|
||||
WeixinAccount... suites) {
|
||||
this.suiteMap = new HashMap<String, SuiteApi>();
|
||||
for (WeixinAccount suite : suites) {
|
||||
this.suiteMap.put(suite.getId(), new SuiteApi(
|
||||
new SuiteTicketHolder(suite.getId(), suite.getSecret(),
|
||||
tokenStorager)));
|
||||
}
|
||||
if (suites.length == 1) {
|
||||
this.suiteMap.put(null, suiteMap.get(suites[0].getId()));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用套件token
|
||||
* 单一套件获取API
|
||||
*
|
||||
* @return
|
||||
* @see com.foxinmy.weixin4j.qy.api.SuiteApi
|
||||
* @return API实例
|
||||
*/
|
||||
public TokenHolder getTokenHolder() {
|
||||
return suiteApi.getTokenHolder();
|
||||
public SuiteApi api() {
|
||||
return this.suiteMap.get(null);
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用套件ticket
|
||||
* 多个套件获取API
|
||||
*
|
||||
* @return
|
||||
* @see com.foxinmy.weixin4j.qy.api.SuiteApi
|
||||
* @param suiteId
|
||||
* 套件ID
|
||||
* @return API实例
|
||||
*/
|
||||
public SuiteTicketHolder getTicketHolder() {
|
||||
return suiteApi.getTicketHolder();
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用套件永久授权码
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public SuitePerCodeHolder getPerCodeHolder() {
|
||||
return suiteApi.getPerCodeHolder();
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用套件预授权码
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
public TokenHolder getPreCodeHolder() {
|
||||
return suiteApi.getPreCodeHolder();
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取企业号access_token(永久授权码)
|
||||
*
|
||||
* @param authCorpid
|
||||
* 授权方corpid
|
||||
* @return 企业号token
|
||||
*/
|
||||
public TokenHolder createTokenHolder(String authCorpid) {
|
||||
return suiteApi.createTokenHolder(authCorpid);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置套件授权配置:如果需要对某次授权进行配置,则调用本接口,目前仅可以设置哪些应用可以授权,不调用则默认允许所有应用进行授权。
|
||||
*
|
||||
* @param appids
|
||||
* 允许进行授权的应用id,如1、2、3
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E8.AE.BE.E7.BD.AE.E6.8E.88.E6.9D.83.E9.85.8D.E7.BD.AE"
|
||||
* >设置套件授权配置</a>
|
||||
*/
|
||||
public JsonResult setSuiteSession(int... appids) throws WeixinException {
|
||||
return suiteApi.setSuiteSession(appids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取企业号的永久授权码
|
||||
*
|
||||
* @param authCode
|
||||
* 临时授权码会在授权成功时附加在redirect_uri中跳转回应用提供商网站。
|
||||
* @return 授权得到的信息
|
||||
* @throws WeixinException
|
||||
* @see com.foxinmy.weixin4j.qy.model.OUserInfo
|
||||
* @see <a href=
|
||||
* "http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E8.8E.B7.E5.8F.96.E4.BC.81.E4.B8.9A.E5.8F.B7.E7.9A.84.E6.B0.B8.E4.B9.85.E6.8E.88.E6.9D.83.E7.A0.81"
|
||||
* >获取企业号的永久授权码</a>
|
||||
*/
|
||||
public OUserInfo exchangePermanentCode(String authCode)
|
||||
throws WeixinException {
|
||||
return suiteApi.exchangePermanentCode(authCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取企业号的授权信息
|
||||
*
|
||||
* @param authCorpid
|
||||
* 授权方corpid
|
||||
* @return 授权方信息
|
||||
* @throws WeixinException
|
||||
* @see com.foxinmy.weixin4j.qy.model.OUserInfo
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E8.8E.B7.E5.8F.96.E4.BC.81.E4.B8.9A.E5.8F.B7.E7.9A.84.E6.8E.88.E6.9D.83.E4.BF.A1.E6.81.AF">获取企业号的授权信息</a>
|
||||
*/
|
||||
public OUserInfo getOAuthInfo(String authCorpid) throws WeixinException {
|
||||
return suiteApi.getOAuthInfo(authCorpid);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取企业号应用
|
||||
*
|
||||
* @param authCorpid
|
||||
* 授权方corpid
|
||||
* @param agentid
|
||||
* 授权方应用id
|
||||
* @return 应用信息
|
||||
* @see com.foxinmy.weixin4j.qy.model.AgentInfo
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E7%AC%AC%E4%B8%89%E6%96%B9%E5%BA%94%E7%94%A8%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E#.E8.8E.B7.E5.8F.96.E4.BC.81.E4.B8.9A.E5.8F.B7.E5.BA.94.E7.94.A8">获取企业号应用</a>
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public AgentInfo getAgent(String authCorpid, int agentid)
|
||||
throws WeixinException {
|
||||
return suiteApi.getAgent(authCorpid, agentid);
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置企业应用的选项设置信息,如:地理位置上报等
|
||||
*
|
||||
* @param authCorpid
|
||||
* 授权方corpid
|
||||
* @param agentSet
|
||||
* 设置信息
|
||||
* @see com.foxinmy.weixin4j.qy.model.AgentSetter
|
||||
* @see <a
|
||||
* href="http://qydev.weixin.qq.com/wiki/index.php?title=%E8%AE%BE%E7%BD%AE%E4%BC%81%E4%B8%9A%E5%8F%B7%E5%BA%94%E7%94%A8">设置企业号信息</a>
|
||||
* @return 处理结果
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public JsonResult setAgent(String authCorpid, AgentSetter agentSet)
|
||||
throws WeixinException {
|
||||
return suiteApi.setAgent(authCorpid, agentSet);
|
||||
public SuiteApi api(String suiteId) {
|
||||
return this.suiteMap.get(suiteId);
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,13 +125,16 @@ public class OauthApi extends QyApi {
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用套件授权
|
||||
*
|
||||
* @see {@link #getSuiteAuthorizeURL(String,String, String,String)}
|
||||
* @param suiteId
|
||||
* 套件ID
|
||||
* @param preAuthCode
|
||||
* 预授权码
|
||||
* @return
|
||||
*/
|
||||
public String getSuiteAuthorizeURL(String preAuthCode) {
|
||||
String suiteId = DEFAULT_WEIXIN_ACCOUNT.getSuiteId();
|
||||
public String getSuiteAuthorizeURL(String suiteId, String preAuthCode) {
|
||||
String redirectUri = ConfigUtil.getValue("suite_oauth_redirect_uri");
|
||||
return getSuiteAuthorizeURL(suiteId, preAuthCode, redirectUri, "state");
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@ public class SuiteApi extends QyApi {
|
||||
* 应用token存储器
|
||||
* @throws WeixinException
|
||||
*/
|
||||
public SuiteApi(SuiteTicketHolder suiteTicketHolder) throws WeixinException {
|
||||
public SuiteApi(SuiteTicketHolder suiteTicketHolder) {
|
||||
this.suiteTicketHolder = suiteTicketHolder;
|
||||
this.suiteTokenHolder = new TokenHolder(new WeixinSuiteTokenCreator(
|
||||
suiteTicketHolder), suiteTicketHolder.getTokenStorager());
|
||||
|
||||
@ -1,5 +1,7 @@
|
||||
package com.foxinmy.weixin4j.qy.model;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONCreator;
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import com.foxinmy.weixin4j.model.WeixinAccount;
|
||||
@ -18,15 +20,10 @@ import com.foxinmy.weixin4j.model.WeixinAccount;
|
||||
public class WeixinQyAccount extends WeixinAccount {
|
||||
|
||||
private static final long serialVersionUID = 3689999353867189585L;
|
||||
|
||||
/**
|
||||
* 应用套件id
|
||||
* 多个应用套件信息
|
||||
*/
|
||||
private String suiteId;
|
||||
/**
|
||||
* 应用套件secret
|
||||
*/
|
||||
private String suiteSecret;
|
||||
private List<WeixinAccount> suites;
|
||||
/**
|
||||
* 第三方提供商secret(企业号登陆)
|
||||
*/
|
||||
@ -54,23 +51,17 @@ public class WeixinQyAccount extends WeixinAccount {
|
||||
@JSONCreator
|
||||
public WeixinQyAccount(@JSONField(name = "id") String corpid,
|
||||
@JSONField(name = "secret") String corpsecret,
|
||||
@JSONField(name = "suiteId") String suiteId,
|
||||
@JSONField(name = "suiteSecret") String suiteSecret,
|
||||
@JSONField(name = "suites") List<WeixinAccount> suites,
|
||||
@JSONField(name = "providerSecret") String providerSecret,
|
||||
@JSONField(name = "chatSecret") String chatSecret) {
|
||||
super(corpid, corpsecret);
|
||||
this.suiteId = suiteId;
|
||||
this.suiteSecret = suiteSecret;
|
||||
this.suites = suites;
|
||||
this.providerSecret = providerSecret;
|
||||
this.chatSecret = chatSecret;
|
||||
}
|
||||
|
||||
public String getSuiteId() {
|
||||
return suiteId;
|
||||
}
|
||||
|
||||
public String getSuiteSecret() {
|
||||
return suiteSecret;
|
||||
public List<WeixinAccount> getSuites() {
|
||||
return suites;
|
||||
}
|
||||
|
||||
public String getProviderSecret() {
|
||||
@ -81,10 +72,15 @@ public class WeixinQyAccount extends WeixinAccount {
|
||||
return chatSecret;
|
||||
}
|
||||
|
||||
public WeixinAccount[] suitesToArray() {
|
||||
return suites != null ? suites
|
||||
.toArray(new WeixinAccount[suites.size()]) : null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "WeixinQyAccount [" + super.toString() + ", suiteId=" + suiteId
|
||||
+ ", suiteSecret=" + suiteSecret + ", providerSecret="
|
||||
+ providerSecret + ", chatSecret=" + chatSecret + "]";
|
||||
return "WeixinQyAccount [" + super.toString() + ", suites=" + suites
|
||||
+ ", providerSecret=" + providerSecret + ", chatSecret="
|
||||
+ chatSecret + "]";
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
# \u6d4b\u8bd5\u4e4b\u7528 \u6b63\u5f0f\u73af\u5883\u4e0bcopy\u4e00\u4efd\u5230classpath
|
||||
# \u4f01\u4e1a\u53f7\u4fe1\u606f
|
||||
account={"id":"wx6d13cc18002bb2e5","secret":"vcCOTIb-cOzWWhL5r_qKVlfzdpInEEKPRz3K-5ezn-Xt48-tOkxPqEE5XbKLXXFn",\
|
||||
"suiteId":"\u5e94\u7528\u5957\u4ef6\u7684id","suiteSecret":"\u5e94\u7528\u5957\u4ef6\u7684secret",\
|
||||
"suites":[{"id":"\u5e94\u7528\u5957\u4ef6\u7684id","secret":"\u5e94\u7528\u5957\u4ef6\u7684secret"}],\
|
||||
"providerSecret":"\u7b2c\u4e09\u65b9\u63d0\u4f9b\u5546secret(\u4f01\u4e1a\u53f7\u767b\u9646)",\
|
||||
"chatSecret":"\u6d88\u606f\u670d\u52a1secret(\u4f01\u4e1a\u53f7\u804a\u5929)"}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user