com.foxinmy.weixin4j.mp.WeixinProxy Maven / Gradle / Ivy
package com.foxinmy.weixin4j.mp;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Date;
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.mp.api.CustomApi;
import com.foxinmy.weixin4j.mp.api.DataApi;
import com.foxinmy.weixin4j.mp.api.GroupApi;
import com.foxinmy.weixin4j.mp.api.HelperApi;
import com.foxinmy.weixin4j.mp.api.MassApi;
import com.foxinmy.weixin4j.mp.api.MediaApi;
import com.foxinmy.weixin4j.mp.api.MenuApi;
import com.foxinmy.weixin4j.mp.api.MpApi;
import com.foxinmy.weixin4j.mp.api.NotifyApi;
import com.foxinmy.weixin4j.mp.api.QrApi;
import com.foxinmy.weixin4j.mp.api.TmplApi;
import com.foxinmy.weixin4j.mp.api.UserApi;
import com.foxinmy.weixin4j.mp.message.NotifyMessage;
import com.foxinmy.weixin4j.mp.message.TemplateMessage;
import com.foxinmy.weixin4j.mp.model.AutoReplySetting;
import com.foxinmy.weixin4j.mp.model.CustomRecord;
import com.foxinmy.weixin4j.mp.model.Following;
import com.foxinmy.weixin4j.mp.model.Group;
import com.foxinmy.weixin4j.mp.model.KfAccount;
import com.foxinmy.weixin4j.mp.model.KfSession;
import com.foxinmy.weixin4j.mp.model.MenuSetting;
import com.foxinmy.weixin4j.mp.model.QRParameter;
import com.foxinmy.weixin4j.mp.model.QRResult;
import com.foxinmy.weixin4j.mp.model.SemQuery;
import com.foxinmy.weixin4j.mp.model.SemResult;
import com.foxinmy.weixin4j.mp.model.User;
import com.foxinmy.weixin4j.mp.token.WeixinTokenCreator;
import com.foxinmy.weixin4j.mp.type.DatacubeType;
import com.foxinmy.weixin4j.mp.type.IndustryType;
import com.foxinmy.weixin4j.mp.type.Lang;
import com.foxinmy.weixin4j.token.TokenHolder;
import com.foxinmy.weixin4j.token.TokenStorager;
import com.foxinmy.weixin4j.tuple.MassTuple;
import com.foxinmy.weixin4j.tuple.MpArticle;
import com.foxinmy.weixin4j.tuple.MpVideo;
import com.foxinmy.weixin4j.tuple.Tuple;
import com.foxinmy.weixin4j.type.MediaType;
/**
* 微信公众平台接口实现
*
* @className WeixinProxy
* @author jy.hu
* @date 2014年3月23日
* @since JDK 1.7
* @see api文档
*/
public class WeixinProxy {
private final MediaApi mediaApi;
private final NotifyApi notifyApi;
private final CustomApi customApi;
private final MassApi massApi;
private final UserApi userApi;
private final GroupApi groupApi;
private final MenuApi menuApi;
private final QrApi qrApi;
private final TmplApi tmplApi;
private final HelperApi helperApi;
private final DataApi dataApi;
private final TokenHolder tokenHolder;
/**
* 默认使用文件方式保存token、使用weixin4j.properties配置的账号信息
*/
public WeixinProxy() {
this(MpApi.DEFAULT_TOKEN_STORAGER);
}
/**
* 默认使用weixin4j.properties配置的账号信息
*
* @param tokenStorager
*/
public WeixinProxy(TokenStorager tokenStorager) {
this(MpApi.DEFAULT_WEIXIN_ACCOUNT.getId(), MpApi.DEFAULT_WEIXIN_ACCOUNT
.getSecret(), tokenStorager);
}
/**
*
* @param appid
* @param appsecret
*/
public WeixinProxy(String appid, String appsecret) {
this(appid, appsecret, MpApi.DEFAULT_TOKEN_STORAGER);
}
public WeixinProxy(String appid, String appsecret,
TokenStorager tokenStorager) {
this(new TokenHolder(new WeixinTokenCreator(appid, appsecret),
tokenStorager));
}
public WeixinProxy(TokenHolder tokenHolder) {
this.tokenHolder = tokenHolder;
this.mediaApi = new MediaApi(tokenHolder);
this.notifyApi = new NotifyApi(tokenHolder);
this.customApi = new CustomApi(tokenHolder);
this.massApi = new MassApi(tokenHolder);
this.userApi = new UserApi(tokenHolder);
this.groupApi = new GroupApi(tokenHolder);
this.menuApi = new MenuApi(tokenHolder);
this.qrApi = new QrApi(tokenHolder);
this.tmplApi = new TmplApi(tokenHolder);
this.helperApi = new HelperApi(tokenHolder);
this.dataApi = new DataApi(tokenHolder);
}
public TokenHolder getTokenHolder() {
return this.tokenHolder;
}
/**
* 上传图文消息内的图片获取URL
* 请注意,本接口所上传的图片不占用公众号的素材库中图片数量的5000个的限制。图片仅支持jpg/png格式,大小必须在1MB以下。
*
* @param is
* 图片数据流
* @param fileName
* 文件名 为空时将自动生成
* @return 图片URL 可用于后续群发中,放置到图文消息中
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @throws WeixinException
*/
public String uploadImage(InputStream is, String fileName)
throws WeixinException {
return mediaApi.uploadImage(is, fileName);
}
/**
* 上传群发中的视频素材
*
* @param is
* 图片数据流
* @param fileName
* 文件名 为空时将自动生成
* @param title
* 视频标题 非空
* @param description
* 视频描述 可为空
* @return 群发视频消息对象
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @see 高级群发
* @see com.foxinmy.weixin4j.tuple.MpVideo
*/
public MpVideo uploadVideo(InputStream is, String fileName, String title,
String description) throws WeixinException {
return mediaApi.uploadVideo(is, fileName, title, description);
}
/**
* 上传媒体文件 此接口只包含图片、语音、缩略图、视频(临时)四种媒体类型的上传
*
* 正常情况下返回{"type":"TYPE","media_id":"MEDIA_ID","created_at":123456789},
* 否则抛出异常.
*
*
* @param is
* 媒体数据流
* @param mediaType
* 媒体文件类型:分别有图片(image)、语音(voice)、视频(video)和缩略图(thumb)
* @param fileName
* 文件名
* @return 上传到微信服务器返回的媒体标识
* @see 上传临时素材
* @see 上传永久素材
* @see com.foxinmy.weixin4j.model.MediaUploadResult
* @see com.foxinmy.weixin4j.type.MediaType
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @throws WeixinException
*/
public MediaUploadResult uploadMedia(boolean isMaterial, InputStream is,
String fileName) throws WeixinException {
return mediaApi.uploadMedia(isMaterial, is, fileName);
}
/**
* 下载媒体文件
*
* 正常情况下返回表头如Content-Type: image/jpeg,否则抛出异常.
*
*
* @param mediaId
* 存储在微信服务器上的媒体标识
* @param mediaType
* 媒体类型
* @param isMaterial
* 是否永久素材
* @return 写入硬盘后的文件对象
* @throws WeixinException
* @see 上传下载说明
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @see {@link #downloadMedia(String)}
*/
public File downloadMediaFile(String mediaId, boolean isMaterial)
throws WeixinException {
return mediaApi.downloadMediaFile(mediaId, isMaterial);
}
/**
* 下载媒体文件
*
* @param mediaId
* 媒体ID
* @param isMaterial
* 是否永久素材
* @return 媒体文件下载结果
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @see com.foxinmy.weixin4j.model.MediaDownloadResult
* @see 上传下载说明
*/
public MediaDownloadResult downloadMedia(String mediaId, boolean isMaterial)
throws WeixinException {
return mediaApi.downloadMedia(mediaId, isMaterial);
}
/**
* 上传永久图文素材
*
* 、新增的永久素材也可以在公众平台官网素材管理模块中看到,永久素材的数量是有上限的,请谨慎新增。图文消息素材和图片素材的上限为5000,
* 其他类型为1000
*
*
* @param articles
* 图文列表
* @return 上传到微信服务器返回的媒体标识
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @see com.foxinmy.weixin4j.tuple.MpArticle
* @see 上传永久媒体素材
*/
public String uploadMaterialArticle(List articles)
throws WeixinException {
return mediaApi.uploadMaterialArticle(articles);
}
/**
* 下载永久图文素材
*
* @param mediaId
* 媒体ID
* @return 图文列表
* @throws WeixinException
* @see {@link #downloadMedia(String, boolean)}
* @see com.foxinmy.weixin4j.tuple.MpArticle
* @see com.foxinmy.weixin4j.mp.api.MediaApi
*/
public List downloadArticle(String mediaId)
throws WeixinException {
return mediaApi.downloadArticle(mediaId);
}
/**
* 更新永久图文素材
*
* @param mediaId
* 要修改的图文消息的id
* @param index
* 要更新的文章在图文消息中的位置(多图文消息时,此字段才有意义),第一篇为0
* @param articles
* 图文列表
* @return 处理结果
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @see com.foxinmy.weixin4j.tuple.MpArticle
* @see 更新永久图文素材
*/
public JsonResult updateMaterialArticle(String mediaId, int index,
List articles) throws WeixinException {
return mediaApi.updateMaterialArticle(mediaId, index, articles);
}
/**
* 删除永久媒体素材
*
* @param mediaId
* 媒体素材的media_id
* @return 处理结果
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @see 删除永久媒体素材
*/
public JsonResult deleteMaterialMedia(String mediaId)
throws WeixinException {
return mediaApi.deleteMaterialMedia(mediaId);
}
/**
* 上传永久视频素材
*
* @param is
* 大小不超过1M且格式为MP4的视频文件
* @param title
* 视频标题
* @param introduction
* 视频描述
* @return 上传到微信服务器返回的媒体标识
* @see 上传永久媒体素材
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @throws WeixinException
*/
public String uploadMaterialVideo(InputStream is, String title,
String introduction) throws WeixinException {
return mediaApi.uploadMaterialVideo(is, title, introduction);
}
/**
* 获取永久媒体素材的总数 .图片和图文消息素材(包括单图文和多图文)的总数上限为5000,其他素材的总数上限为1000
*
* @return 总数对象
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.model.MediaCounter
* @see 获取素材总数
* @see com.foxinmy.weixin4j.mp.api.MediaApi
*/
public MediaCounter countMaterialMedia() throws WeixinException {
return mediaApi.countMaterialMedia();
}
/**
* 获取媒体素材记录列表
*
* @param mediaType
* 素材的类型,图片(image)、视频(video)、语音 (voice)、图文(news)
* @param pageable
* 分页数据
* @return 媒体素材的记录对象
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @see com.foxinmy.weixin4j.mp.model.MediaRecord
* @see com.foxinmy.weixin4j.type.MediaType
* @see com.foxinmy.weixin4j.mp.model.MediaItem
* @see com.foxinmy.weixin4j.model.MediaItem
* @see com.foxinmy.weixin4j.model.Pageable
* @see com.foxinmy.weixin4j.model.Pagedata
* @see 获取素材列表
*/
public MediaRecord listMaterialMedia(MediaType mediaType, Pageable pageable)
throws WeixinException {
return mediaApi.listMaterialMedia(mediaType, pageable);
}
/**
* 获取全部的媒体素材
*
* @param mediaType
* 媒体类型
* @return 素材列表
* @see com.foxinmy.weixin4j.mp.api.MediaApi
* @see {@link #listMaterialMedia(MediaType, Pageable)}
* @throws WeixinException
*/
public List listAllMaterialMedia(MediaType mediaType)
throws WeixinException {
return mediaApi.listAllMaterialMedia(mediaType);
}
/**
* 发送客服消息(在48小时内不限制发送次数)
*
* @param notify
* 客服消息对象
* @return 处理结果
* @see {@link #sendNotify(NotifyMessage,String) }
* @throws WeixinException
*/
public JsonResult sendNotify(NotifyMessage notify) throws WeixinException {
return notifyApi.sendNotify(notify);
}
/**
* 发送客服消息(在48小时内不限制发送次数)
*
* @param notify
* 客服消息对象
* @param kfAccount
* 客服账号 可为空
* @throws WeixinException
* @return 处理结果
* @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.Music
* @see com.foxinmy.weixin4j.tuple.News
* @see com.foxinmy.weixin4j.mp.api.NotifyApi
*/
public JsonResult sendNotify(NotifyMessage notify, String kfAccount)
throws WeixinException {
return notifyApi.sendNotify(notify, kfAccount);
}
/**
* 客服聊天记录
*
* @param openId
* 用户标识 为空时则查询全部记录
* @param starttime
* 查询开始时间
* @param endtime
* 查询结束时间 每次查询不能跨日查询
* @param pagesize
* 每页大小 每页最多拉取50条
* @param pageindex
* 查询第几页 从1开始
* @see com.foxinmy.weixin4j.mp.model.CustomRecord
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see 查询客服聊天记录
* @see 查询客服聊天记录
* @throws WeixinException
*/
public List getCustomRecord(String openId, Date starttime,
Date endtime, int pagesize, int pageindex) throws WeixinException {
return customApi.getCustomRecord(openId, starttime, endtime, pagesize,
pageindex);
}
/**
* 获取公众号中所设置的客服基本信息,包括客服工号、客服昵称、客服登录账号
*
* @param isOnline
* 是否在线 为ture时可以可以获取客服在线状态(手机在线、PC客户端在线、手机和PC客户端全都在线)、客服自动接入最大值、
* 客服当前接待客户数
* @return 多客服信息列表
* @see com.foxinmy.weixin4j.mp.model.KfAccount
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see 获取客服基本信息
* @see 获取客服基本信息
* @see 获取在线客服接待信息
* @see 获取在线客服接待信息
* @throws WeixinException
*/
public List listKfAccount(boolean isOnline)
throws WeixinException {
return customApi.listKfAccount(isOnline);
}
/**
* 新增客服账号
*
* @param id
* 完整客服账号,格式为:账号前缀@公众号微信号,账号前缀最多10个字符,必须是英文或者数字字符。如果没有公众号微信号,
* 请前往微信公众平台设置。
* @param name
* 客服昵称,最长6个汉字或12个英文字符
* @param pwd
* 客服账号登录密码
* @return 处理结果
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see 客服管理接口返回码
* @see 新增客服账号
*/
public JsonResult createAccount(String id, String name, String pwd)
throws WeixinException {
return customApi.createAccount(id, name, pwd);
}
/**
* 更新客服账号
*
* @param id
* 完整客服账号,格式为:账号前缀@公众号微信号,账号前缀最多10个字符,必须是英文或者数字字符。如果没有公众号微信号,
* 请前往微信公众平台设置。
* @param name
* 客服昵称,最长6个汉字或12个英文字符
* @param pwd
* 客服账号登录密码
* @return 处理结果
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see 客服管理接口返回码
* @see 新增客服账号
*/
public JsonResult updateAccount(String id, String name, String pwd)
throws WeixinException {
return customApi.updateAccount(id, name, pwd);
}
/**
* 上传客服头像
*
* @param id
* 完整客服账号,格式为:账号前缀@公众号微信号
* @param headimg
* 头像图片文件必须是jpg格式,推荐使用640*640大小的图片以达到最佳效果
* @return 处理结果
* @throws WeixinException
* @throws IOException
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see 客服管理接口返回码
* @see 上传客服头像
*/
public JsonResult uploadAccountHeadimg(String id, File headimg)
throws WeixinException, IOException {
return customApi.uploadAccountHeadimg(id, headimg);
}
/**
* 删除客服账号
*
* @param id
* 完整客服账号,格式为:账号前缀@公众号微信号
* @return 处理结果
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @throws WeixinException
* @see 客服管理接口返回码
* @see 删除客服账号
*/
public JsonResult deleteAccount(String id) throws WeixinException {
return customApi.deleteAccount(id);
}
/**
* 创建客服会话
*
* 开发者可以使用本接口,为多客服的客服工号创建会话,将某个客户直接指定给客服工号接待,需要注意此接口不会受客服自动接入数以及自动接入开关限制。
* 只能为在线的客服(PC客户端在线,或者已绑定多客服助手)创建会话。
*
*
* @param userOpenId
* 用户的userOpenId
* @param kfAccount
* 完整客服账号,格式为:账号前缀@公众号微信号
* @param text
* 附加信息,文本会展示在客服人员的多客服客户端
* @return 处理结果
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see 创建会话
*/
public JsonResult createKfSession(String userOpenId, String kfAccount,
String text) throws WeixinException {
return customApi.createKfSession(userOpenId, kfAccount, text);
}
/**
* 关闭客服会话
*
* @param userOpenId
* 用户的userOpenId
* @param kfAccount
* 完整客服账号,格式为:账号前缀@公众号微信号
* @param text
* 附加信息,文本会展示在客服人员的多客服客户端
* @return 处理结果
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see 创建会话
*/
public JsonResult closeKfSession(String userOpenId, String kfAccount,
String text) throws WeixinException {
return customApi.closeKfSession(userOpenId, kfAccount, text);
}
/**
* 获取客户的会话状态:获取客户当前的会话状态。
*
* @param userOpenId
* 用户的openid
* @return 会话对象
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see com.foxinmy.weixin4j.mp.model.KfSession
* @see 获取会话状态
*/
public KfSession getKfSession(String userOpenId) throws WeixinException {
return customApi.getKfSession(userOpenId);
}
/**
* 获取客服的会话列表:获取某个客服正在接待的会话列表。
*
* @param kfAccount
* 完整客服账号,格式为:账号前缀@公众号微信号,账号前缀最多10个字符,必须是英文或者数字字符。
* @return 会话列表
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see com.foxinmy.weixin4j.mp.model.KfSession
* @see 获取客服的会话列表
*/
public List listKfSession(String kfAccount)
throws WeixinException {
return customApi.listKfSession(kfAccount);
}
/**
* 获取未接入会话列表:获取当前正在等待队列中的会话列表,此接口最多返回最早进入队列的100个未接入会话。 缺陷:没有count字段
*
* @return 会话列表
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.CustomApi
* @see com.foxinmy.weixin4j.mp.model.KfSession
* @see 获取客服的会话列表
*/
public List listKfSessionWait() throws WeixinException {
return customApi.listKfSessionWait();
}
/**
* 上传群发的图文消息,一个图文消息支持1到10条图文
*
* @param articles
* 图片消息
* @return 媒体ID
* @throws WeixinException
* @see 上传图文素材
* @see com.foxinmy.weixin4j.tuple.MpArticle
* @see com.foxinmy.weixin4j.mp.api.MassApi
*/
public String uploadMassArticle(List articles)
throws WeixinException {
return massApi.uploadArticle(articles);
}
/**
* 群发消息
*
* 在返回成功时,意味着群发任务提交成功,并不意味着此时群发已经结束,所以,仍有可能在后续的发送过程中出现异常情况导致用户未收到消息,
* 如消息有时会进行审核、服务器不稳定等,此外,群发任务一般需要较长的时间才能全部发送完毕
*
*
* @param MassTuple
* 消息元件
* @param isToAll
* 用于设定是否向全部用户发送,值为true或false,选择true该消息群发给所有用户,
* 选择false可根据group_id发送给指定群组的用户
* @param groupId
* 分组ID
* @return 第一个元素为消息发送任务的ID,第二个元素为消息的数据ID,该字段只有在群发图文消息时,才会出现,可以用于在图文分析数据接口中
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.tuple.Text
* @see com.foxinmy.weixin4j.tuple.Image
* @see com.foxinmy.weixin4j.tuple.Voice
* @see com.foxinmy.weixin4j.tuple.MpVideo
* @see com.foxinmy.weixin4j.tuple.MpNews
* @see com.foxinmy.weixin4j.mp.api.MassApi
* @see com.foxinmy.weixin4j.tuple.MassTuple
* @see {@link com.foxinmy.weixin4j.mp.api.GroupApi#getGroups()}
* @see 根据分组群发
*/
public String[] massByGroupId(MassTuple tuple, boolean isToAll, int groupId)
throws WeixinException {
return massApi.massByGroupId(tuple, isToAll, groupId);
}
/**
* 分组ID群发图文消息
*
* @param articles
* 图文列表
* @param groupId
* 分组ID
* @return 第一个元素为消息发送任务的ID,第二个元素为消息的数据ID,该字段只有在群发图文消息时,才会出现,可以用于在图文分析数据接口中
* @see {@link #massByGroupId(Tuple,int)}
* @see 根据分组群发
* @see com.foxinmy.weixin4j.tuple.MpArticle
* @throws WeixinException
*/
public String[] massArticleByGroupId(List articles, int groupId)
throws WeixinException {
return massApi.massArticleByGroupId(articles, groupId);
}
/**
* openId群发
*
*
* 在返回成功时,意味着群发任务提交成功,并不意味着此时群发已经结束,所以,仍有可能在后续的发送过程中出现异常情况导致用户未收到消息,
* 如消息有时会进行审核、服务器不稳定等,此外,群发任务一般需要较长的时间才能全部发送完毕
*
*
* @param tuple
* 消息元件
* @param openIds
* openId列表
* @return 第一个元素为消息发送任务的ID,第二个元素为消息的数据ID,该字段只有在群发图文消息时,才会出现,可以用于在图文分析数据接口中
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.model.User
* @see com.foxinmy.weixin4j.tuple.Text
* @see com.foxinmy.weixin4j.tuple.Image
* @see com.foxinmy.weixin4j.tuple.Voice
* @see com.foxinmy.weixin4j.tuple.MpVideo
* @see com.foxinmy.weixin4j.tuple.MpNews
* @see com.foxinmy.weixin4j.mp.api.MassApi
* @see com.foxinmy.weixin4j.tuple.MassTuple
* @see 根据openid群发
* @see {@link com.foxinmy.weixin4j.mp.api.MediaApi#uploadMedia(File)}
* @see {@link com.foxinmy.weixin4j.mp.api.UserApi#getUser(String)}
*/
public String[] massByOpenIds(MassTuple tuple, String... openIds)
throws WeixinException {
return massApi.massByOpenIds(tuple, openIds);
}
/**
* 根据openid群发图文消息
*
* @param articles
* 图文列表
* @param openIds
* openId列表
* @return 第一个元素为消息发送任务的ID,第二个元素为消息的数据ID,该字段只有在群发图文消息时,才会出现,可以用于在图文分析数据接口中
* @see 根据openid群发
* @see {@link #massByOpenIds(Tuple,String...)}
* @see com.foxinmy.weixin4j.tuple.MpArticle
* @throws WeixinException
*/
public String[] massArticleByOpenIds(List articles,
String... openIds) throws WeixinException {
return massApi.massArticleByOpenIds(articles, openIds);
}
/**
* 删除群发消息
*
* 请注意,只有已经发送成功的消息才能删除删除消息只是将消息的图文详情页失效,已经收到的用户,还是能在其本地看到消息卡片
*
*
* @param msgid
* 发送出去的消息ID
* @throws WeixinException
* @see 删除群发
* @see com.foxinmy.weixin4j.mp.api.MassApi
* @see {@link #massByGroupId(Tuple, int)}
* @see {@link #massByOpenIds(Tuple, String...)
*/
public JsonResult deleteMassNews(String msgid) throws WeixinException {
return massApi.deleteMassNews(msgid);
}
/**
* 预览群发消息 开发者可通过该接口发送消息给指定用户,在手机端查看消息的样式和排版
*
* @param toUser
* 接收用户的openID
* @param toWxName
* 接收用户的微信号 towxname和touser同时赋值时,以towxname优先
* @param tuple
* 消息元件
* @return 处理结果
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.MassApi
* @see com.foxinmy.weixin4j.tuple.MassTuple
* @see 预览群发消息
*/
public JsonResult previewMassNews(String toUser, String toWxName,
MassTuple tuple) throws WeixinException {
return massApi.previewMassNews(toUser, toWxName, tuple);
}
/**
* 查询群发发送状态
*
* @param msgId
* 消息ID
* @return 消息发送状态
* @throws WeixinException
* @see com.foxinmy.weixin4j.mp.api.MassApi
* @see {@link com.foxinmy.weixin4j.util.MessageUtil#getStatusDesc(String)}
* @see 查询群发状态
*/
public String getMassNewStatus(String msgId) throws WeixinException {
return massApi.getMassNewStatus(msgId);
}
/**
* 获取用户信息
*
* @param openId
* 用户对应的ID
* @return 用户对象
* @throws WeixinException
* @see 获取用户信息
* @see com.foxinmy.weixin4j.mp.model.User
* @see com.foxinmy.weixin4j.mp.api.UserApi
* @see {@link #getUser(String,Lang)}
*/
public User getUser(String openId) throws WeixinException {
return userApi.getUser(openId);
}
/**
* 获取用户信息
*
* 在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的,对于不同公众号,
* 同一用户的openid不同),公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间
*
*
* @param openId
* 用户对应的ID
* @param lang
* 国家地区语言版本
* @return 用户对象
* @throws WeixinException
* @see 获取用户信息
* @see com.foxinmy.weixin4j.mp.type.Lang
* @see com.foxinmy.weixin4j.mp.model.User
* @see com.foxinmy.weixin4j.mp.api.UserApi
*/
public User getUser(String openId, Lang lang) throws WeixinException {
return userApi.getUser(openId, lang);
}
/**
* 获取用户一定数量(10000)的关注者列表
*
* @param nextOpenId
* 第一个拉取的OPENID,不填默认从头开始拉取
* @return 关注信息
* @throws WeixinException
* @see 获取关注者列表
* @see com.foxinmy.weixin4j.mp.model.Following
* @see com.foxinmy.weixin4j.mp.api.UserApi
*/
public Following getFollowing(String nextOpenId) throws WeixinException {
return userApi.getFollowing(nextOpenId);
}
/**
* 获取用户全部的关注者列表
*
* 当公众号关注者数量超过10000时,可通过填写next_openid的值,从而多次拉取列表的方式来满足需求,
* 将上一次调用得到的返回中的next_openid值,作为下一次调用中的next_openid值
*
*
* @return 用户对象集合
* @throws WeixinException
* @see 获取关注者列表
* @see com.foxinmy.weixin4j.mp.model.Following
* @see com.foxinmy.weixin4j.mp.api.UserApi
* @see {@link #getFollowing(String)}
*/
public List getAllFollowing() throws WeixinException {
return userApi.getAllFollowing();
}
/**
* 设置用户备注名
*
* @param openId
* 用户ID
* @param remark
* 备注名
* @throws WeixinException
* @see 设置用户备注名
* @see com.foxinmy.weixin4j.mp.api.UserApi
*/
public JsonResult remarkUserName(String openId, String remark)
throws WeixinException {
return userApi.remarkUserName(openId, remark);
}
/**
* 创建分组
*
* @param name
* 组名称
* @return group对象
* @throws WeixinException
* @see 创建分组
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.mp.model.Group#toCreateJson()
* @see com.foxinmy.weixin4j.mp.api.GroupApi
*/
public Group createGroup(String name) throws WeixinException {
return groupApi.createGroup(name);
}
/**
* 查询所有分组
*
* @return 组集合
* @throws WeixinException
* @see 查询所有分组
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.mp.api.GroupApi
*/
public List getGroups() throws WeixinException {
return groupApi.getGroups();
}
/**
* 查询用户所在分组
*
* @param openId
* 用户对应的ID
* @return 组ID
* @throws WeixinException
* @see 查询用户所在分组
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.mp.api.GroupApi
*/
public int getGroupByOpenId(String openId) throws WeixinException {
return groupApi.getGroupByOpenId(openId);
}
/**
* 修改分组名
*
* @param groupId
* 组ID
* @param name
* 组名称
* @throws WeixinException
* @see 修改分组名
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.mp.api.GroupApi
*/
public JsonResult modifyGroup(int groupId, String name)
throws WeixinException {
return groupApi.modifyGroup(groupId, name);
}
/**
* 移动用户到分组
*
* @param groupId
* 组ID
* @param openId
* 用户对应的ID
* @throws WeixinException
* @see 移动分组
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.mp.api.GroupApi
*/
public JsonResult moveGroup(int groupId, String openId)
throws WeixinException {
return groupApi.moveGroup(groupId, openId);
}
/**
* 批量移动分组
*
* @param groupId
* 组ID
* @param openIds
* 用户ID列表(不能超过50个)
* @throws WeixinException
* @see 批量移动分组
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.mp.api.GroupApi
*/
public JsonResult moveGroup(int groupId, String... openIds)
throws WeixinException {
return groupApi.moveGroup(groupId, openIds);
}
/**
* 删除用户分组,所有该分组内的用户自动进入默认分组.
*
* @param groupId
* 组ID
* @throws WeixinException
* @see 删除用户分组
* @see com.foxinmy.weixin4j.mp.model.Group
* @see com.foxinmy.weixin4j.mp.api.GroupApi
*/
public JsonResult deleteGroup(int groupId) throws WeixinException {
return groupApi.deleteGroup(groupId);
}
/**
* 自定义菜单
*
* @param btnList
* 菜单列表
* @throws WeixinException
* @see 创建自定义菜单
* @see com.foxinmy.weixin4j.model.Button
* @see com.foxinmy.weixin4j.type.ButtonType
* @see com.foxinmy.weixin4j.mp.api.MenuApi
*/
public JsonResult createMenu(List