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 be10a77e..8e766a4a 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 @@ -1,1184 +1,1216 @@ -package com.foxinmy.weixin4j.qy; - -import java.io.File; -import java.io.InputStream; -import java.util.List; - -import com.alibaba.fastjson.JSONObject; -import com.foxinmy.weixin4j.exception.WeixinException; -import com.foxinmy.weixin4j.http.weixin.JsonResult; -import com.foxinmy.weixin4j.model.Button; -import com.foxinmy.weixin4j.model.MediaCounter; -import com.foxinmy.weixin4j.model.MediaDownloadResult; -import com.foxinmy.weixin4j.model.MediaItem; -import com.foxinmy.weixin4j.model.MediaRecord; -import com.foxinmy.weixin4j.model.MediaUploadResult; -import com.foxinmy.weixin4j.model.Pageable; -import com.foxinmy.weixin4j.qy.api.AgentApi; -import com.foxinmy.weixin4j.qy.api.BatchApi; -import com.foxinmy.weixin4j.qy.api.ChatApi; -import com.foxinmy.weixin4j.qy.api.HelperApi; -import com.foxinmy.weixin4j.qy.api.MediaApi; -import com.foxinmy.weixin4j.qy.api.MenuApi; -import com.foxinmy.weixin4j.qy.api.NotifyApi; -import com.foxinmy.weixin4j.qy.api.PartyApi; -import com.foxinmy.weixin4j.qy.api.QyApi; -import com.foxinmy.weixin4j.qy.api.TagApi; -import com.foxinmy.weixin4j.qy.api.UserApi; -import com.foxinmy.weixin4j.qy.message.ChatMessage; -import com.foxinmy.weixin4j.qy.message.NotifyMessage; -import com.foxinmy.weixin4j.qy.model.AgentInfo; -import com.foxinmy.weixin4j.qy.model.AgentOverview; -import com.foxinmy.weixin4j.qy.model.AgentSetter; -import com.foxinmy.weixin4j.qy.model.BatchResult; -import com.foxinmy.weixin4j.qy.model.Callback; -import com.foxinmy.weixin4j.qy.model.ChatInfo; -import com.foxinmy.weixin4j.qy.model.ChatMute; -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.ChatType; -import com.foxinmy.weixin4j.qy.type.InviteType; -import com.foxinmy.weixin4j.qy.type.UserStatus; -import com.foxinmy.weixin4j.token.TokenHolder; -import com.foxinmy.weixin4j.token.TokenStorager; -import com.foxinmy.weixin4j.tuple.MpArticle; -import com.foxinmy.weixin4j.type.MediaType; - -/** - * 微信企业号接口实现 - * - * @className WeixinProxy - * @author jy - * @date 2014年11月19日 - * @since JDK 1.7 - * @see api文档 - */ -public class WeixinProxy { - - private final MediaApi mediaApi; - private final MenuApi menuApi; - private final NotifyApi notifyApi; - private final PartyApi partyApi; - private final UserApi userApi; - private final TagApi tagApi; - private final HelperApi helperApi; - private final AgentApi agentApi; - private final BatchApi batchApi; - private final ChatApi chatApi; - - private final TokenHolder tokenHolder; - - /** - * 默认使用文件方式保存token、使用weixin4j.properties配置的账号信息 - */ - public WeixinProxy() { - this(QyApi.DEFAULT_TOKEN_STORAGER); - } - - /** - * 默认使用weixin4j.properties配置的账号信息 - * - * @param tokenStorager - * token存储策略 - */ - public WeixinProxy(TokenStorager tokenStorager) { - this(QyApi.DEFAULT_WEIXIN_ACCOUNT.getId(), QyApi.DEFAULT_WEIXIN_ACCOUNT - .getSecret(), tokenStorager); - } - - /** - * corpid,corpsecret - * - * @param corpid - * @param corpsecret - */ - public WeixinProxy(String corpid, String corpsecret) { - this(corpid, corpsecret, QyApi.DEFAULT_TOKEN_STORAGER); - } - - /** - * - * @param corpid - * 企业号ID - * @param corpsecret - * 企业号secret - * @param tokenStorager - * 企业号token存储器 - */ - public WeixinProxy(String corpid, String corpsecret, - TokenStorager tokenStorager) { - this(new TokenHolder(new WeixinTokenCreator(corpid, corpsecret), - tokenStorager)); - } - - public WeixinProxy(TokenHolder tokenHolder) { - this.tokenHolder = tokenHolder; - this.partyApi = new PartyApi(tokenHolder); - this.userApi = new UserApi(tokenHolder); - this.tagApi = new TagApi(tokenHolder); - this.helperApi = new HelperApi(tokenHolder); - this.agentApi = new AgentApi(tokenHolder); - this.batchApi = new BatchApi(tokenHolder); - this.notifyApi = new NotifyApi(tokenHolder); - this.menuApi = new MenuApi(tokenHolder); - this.mediaApi = new MediaApi(tokenHolder); - this.chatApi = new ChatApi(tokenHolder); - } - - public TokenHolder getTokenHolder() { - return this.tokenHolder; - } - - /** - * 发送客服消息(需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败) - *

- * 1) 发送人员列表存在错误的userid:执行发送,开发者需注意返回结果说明
- * 2)发送人员不在通讯录权限范围内:不执行发送任务,返回首个出错的userid
- * 3)发送人员不在应用可见范围内:不执行发送任务,返回首个出错的userid
- *

- * - * @param message - * 客服消息对象 - * @return - * 如果对应用或收件人、部门、标签任何一个无权限,则本次发送失败;如果收件人、部门或标签不存在,发送仍然执行,但返回无效的部分
- * { "errcode": 0, "errmsg": "ok", "invaliduser": "UserID1", - * "invalidparty":"PartyID1", "invalidtag":"TagID1" } - * @throws WeixinException - * @see com.foxinmy.weixin4j.qy.api.NotifyApi - * @see 发送接口说明 - * @see 发送格式说明 - * @see com.foxinmy.weixin4j.tuple.Text - * @see com.foxinmy.weixin4j.tuple.Image - * @see com.foxinmy.weixin4j.tuple.Voice - * @see com.foxinmy.weixin4j.tuple.Video - * @see com.foxinmy.weixin4j.tuple.File - * @see com.foxinmy.weixin4j.tuple.News - * @see com.foxinmy.weixin4j.tuple.MpNews - * @see com.foxinmy.weixin4j.qy.message.NotifyMessage - */ - public JSONObject sendNotifyMessage(NotifyMessage message) - throws WeixinException { - return notifyApi.sendNotifyMessage(message); - } - - /** - * 自定义菜单(管理员须拥有应用的管理权限 并且应用必须设置在回调模式) - * - * @param btnList - * 菜单列表 - * @param agentid - * 应用ID - * @throws WeixinException - * @see com.foxinmy.weixin4j.qy.api.MenuApi - * @see 创建自定义菜单 - * @see com.foxinmy.weixin4j.model.Button - */ - public JsonResult createMenu(List