All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.foxinmy.weixin4j.qy.WeixinProxy Maven / Gradle / Ivy

There is a newer version: 1.10.2
Show newest version
package com.foxinmy.weixin4j.qy;

import java.io.InputStream;
import java.util.List;

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.model.WeixinAccount;
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.TagApi;
import com.foxinmy.weixin4j.qy.api.UserApi;
import com.foxinmy.weixin4j.qy.message.ChatMessage;
import com.foxinmy.weixin4j.qy.message.CustomeMessage;
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.Contacts;
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.suite.SuitePerCodeHolder;
import com.foxinmy.weixin4j.qy.suite.WeixinTokenSuiteCreator;
import com.foxinmy.weixin4j.qy.token.WeixinTicketCreator;
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.KfType;
import com.foxinmy.weixin4j.qy.type.UserStatus;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.tuple.MpArticle;
import com.foxinmy.weixin4j.type.MediaType;
import com.foxinmy.weixin4j.type.TicketType;
import com.foxinmy.weixin4j.util.Weixin4jSettings;

/**
 * 微信企业号接口实现
 * 
 * @className WeixinProxy
 * @author jy
 * @date 2014年11月19日
 * @since JDK 1.6
 * @see api文档
 */
public class WeixinProxy {

	/**
	 * 媒体素材API
	 */
	private final MediaApi mediaApi;
	/**
	 * 菜单API
	 */
	private final MenuApi menuApi;
	/**
	 * 消息服务API
	 */
	private final NotifyApi notifyApi;
	/**
	 * 部门API
	 */
	private final PartyApi partyApi;
	/**
	 * 成员API
	 */
	private final UserApi userApi;
	/**
	 * 标签API
	 */
	private final TagApi tagApi;
	/**
	 * 辅助API
	 */
	private final HelperApi helperApi;
	/**
	 * 应用API
	 */
	private final AgentApi agentApi;
	/**
	 * 批量操作API
	 */
	private final BatchApi batchApi;
	/**
	 * 聊天服务API
	 */
	private final ChatApi chatApi;
	/**
	 * token实现
	 */
	private final TokenHolder tokenHolder;
	/**
	 * 配置信息
	 */
	private Weixin4jSettings settings;

	/**
	 * 默认使用文件方式保存token、使用weixin4j.properties配置的账号信息
	 */
	public WeixinProxy() {
		this(new Weixin4jSettings());
	}

	/**
	 * 
	 * @param settings
	 *            微信配置信息
	 * @see com.foxinmy.weixin4j.util.Weixin4jSettings
	 */
	public WeixinProxy(Weixin4jSettings settings) {
		this(new TokenHolder(
				new WeixinTokenCreator(settings.getWeixinAccount().getId(), settings.getWeixinAccount().getSecret()),
				settings.getTokenStorager0()));
		this.settings = settings;
	}

	/**
	 * 第三方套件(永久授权码机制)
	 * 
	 * @param perCodeHolder
	 *            第三方套件永久授权码
	 *            {@link com.foxinmy.weixin4j.qy.api.SuiteApi#getPerCodeHolder(String)}
	 * @param suiteTokenHolder
	 *            第三方套件凭证token
	 *            {@link com.foxinmy.weixin4j.qy.api.SuiteApi#getTokenSuiteHolder(String)}
	 * @see com.foxinmy.weixin4j.qy.api.SuiteApi
	 * @see WeixinSuiteProxy#getWeixinProxy(String, String)
	 */
	public WeixinProxy(SuitePerCodeHolder perCodeHolder, TokenHolder suiteTokenHolder) {
		this(new TokenHolder(new WeixinTokenSuiteCreator(perCodeHolder, suiteTokenHolder),
				perCodeHolder.getTokenStorager()));
		this.settings = new Weixin4jSettings(new WeixinAccount(perCodeHolder.getAuthCorpId(), null));
	}

	/**
	 * 注意:TokenCreator 需为
	 * WeixinTokenCreator或WeixinTokenSuiteCreator
	 * 
	 * @see com.foxinmy.weixin4j.qy.token.WeixinTokenCreator
	 * @param tokenHolder
	 */
	private 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);
	}

	/**
	 * token获取
	 * 
	 * @return
	 */
	public TokenHolder getTokenHolder() {
		return this.tokenHolder;
	}

	/**
	 * 获取微信账号信息
	 * 
	 * @return
	 */
	public WeixinAccount getWeixinAccount() {
		return this.settings.getWeixinAccount();
	}

	/**
	 * 获取JSSDK Ticket的tokenHolder
	 * 
	 * @param ticketType
	 *            票据类型
	 * @return
	 */
	public TokenHolder getTicketHolder(TicketType ticketType) {
		return new TokenHolder(new WeixinTicketCreator(getWeixinAccount().getId(), ticketType, this.tokenHolder),
				this.settings.getTokenStorager0());
	}

	/**
	 * 发送客服消息(需要管理员对应用有使用权限,对收件人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.model.IdParameter */ public IdParameter sendNotifyMessage(NotifyMessage message) throws WeixinException { return notifyApi.sendNotifyMessage(message); } /** * 发送客服消息 * * @param message * 客服消息对象 * @return 发送结果 * @see * 客服接口说明 * @see com.foxinmy.weixin4j.qy.api.NotifyApi * @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.qy.message.CustomeMessage * @throws WeixinException */ public JsonResult sendCustomeMessage(CustomeMessage message) throws WeixinException { return notifyApi.sendCustomeMessage(message); } /** * 获取客服列表 * * @param kfType * 客服类型 为空时返回全部类型的客服 * @return 第一个元素为内部客服(internal),第二个参数为外部客服(external) * @see com.foxinmy.weixin4j.qy.api.NotifyApi * @see com.foxinmy.weixin4j.qy.model.IdParameter * @see * 客服列表 * @throws WeixinException */ public IdParameter[] getKfList(KfType kfType) throws WeixinException { return notifyApi.getKfList(kfType); } /** * 自定义菜单(管理员须拥有应用的管理权限 并且应用必须设置在回调模式) * * @param agentid * 应用ID * * @param buttons * 菜单列表 * @throws WeixinException * @see com.foxinmy.weixin4j.qy.api.MenuApi * @see * 创建自定义菜单 * @see com.foxinmy.weixin4j.model.Button */ public JsonResult createMenu(int agentid, List




© 2015 - 2025 Weber Informatics LLC | Privacy Policy