下面这个类我对fastweixin 框架的简单封装调用,大家可以参考,如果需要QYAPIConfigExt和MainServernSupport,请参考本教程以前几篇文章
如需测试,需要去微信企业号官网申请试用账号。其中发送文本消息和图文消息都是没有问题。
我们知道,企业号主要是面向企业需求而生的,因此内部消息的交流显得非常重要,而且发送、回复消息数量应该很可观,对于大企业尤其如此,因此可以结合企业号实现内部消息的交流。企业号具有关注安全、消息无限制等特点,很适合企业内部的环境。
目标:企业号实现文本、图文消息等消息的发送操作。
注意事项:1、参考官方文档,确保有相应的权限进行操作
2、注意所有文字长度是字节,不是字数
3、截至写稿为止,疼讯可发送消息的实际数量是企业号用户数*30,自己可以看文档:http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8F%91%E6%B6%88%E6%81%AF
注2:图文可以用自己网站来代替疼讯保存,而其他媒体信息需要上传到疼讯服务器,其限制如下:
临时素材文件:(media_id)会在上传到微信服务器3天后自动删除。
永久素材文件:(media_id)会一直保存在微信服务器上,但是对企业能够保存的永久素材数量有所限制: 整个企业图文消息素材和图片素材数目的上限为5000,其他类型为1000.
本人根据实际业务具体需求,采用自己服务器来保存图文消息,下面类只需要传给疼讯一个URL链接即可。
你肯定会问我,那视频怎么办?
这种有两种方法解决:
1、上传到疼讯视频,然后把视频有个通用访问链接保存到数据库里面,然后通过servlet之类的技术拼合然后输出成HTML完整页面,把这个servlet访问链接给用户即可。
2、自己服务器保存视频,然后做个通用视频播放模板JSP(HTML5播放视频的网页一堆堆),把访问视频JSP的链接给用户即可。
package com.nsjs;
import com.fastwixinextend.QYAPIConfigExt;
import com.github.sd4324530.fastweixin.QYFastweixinTest;
import com.github.sd4324530.fastweixin.company.api.QYMessageAPI;
import com.github.sd4324530.fastweixin.company.api.config.QYAPIConfig;
import com.github.sd4324530.fastweixin.company.api.response.GetQYSendMessageResponse;
import com.github.sd4324530.fastweixin.company.message.QYArticle;
import com.github.sd4324530.fastweixin.company.message.QYNewsMsg;
import com.github.sd4324530.fastweixin.company.message.QYTextMsg;
import com.github.sd4324530.fastweixin.util.CollectionUtil;
import com.github.sd4324530.fastweixin.util.JSONUtil;
import java.util.ArrayList;
import java.util.List;
public class SendMessage {
public SendMessage() {
super();
}
public QYAPIConfigExt config = null;
public QYAPIConfigExt initConfig() {
if (config == null) {
config
= new QYAPIConfigExt(MainServernSupport.getCropId(), MainServernSupport.getAPPSecret(),
"luozhuang",
System.currentTimeMillis());
}
return config;
}
public QYAPIConfigExt initConfig(String CropId, String APPSecret,
String AccessToken,
long AccessTokenTime) {
QYAPIConfigExt config;
config
= new QYAPIConfigExt(CropId, APPSecret, AccessToken, AccessTokenTime);
return config;
}
/**
* @param Text 要发送文本内容
* @param WeixinIDList 成员IDlist
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
* @param AgentID 应用ID号
* @return
*/
public String sendMessage(String Text, String User,
String AgentID) {
QYTextMsg qyTextMsg = new QYTextMsg();
qyTextMsg.setText(new QYTextMsg.Text(Text));
qyTextMsg.setToUser(User);
qyTextMsg.setAgentId(AgentID);
QYMessageAPI messageAPI = new QYMessageAPI(initConfig());
GetQYSendMessageResponse response = messageAPI.send(qyTextMsg);
return response.getErrmsg();
}
/**
* @param Text 要发送文本内容
* @param User 成员IDlist
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
* @param ZZBM
* @param AgentID 应用ID号
* @return
*/
public String sendMessage(String Text, String User, String ZZBM,
String AgentID) {
QYTextMsg qyTextMsg = new QYTextMsg();
qyTextMsg.setText(new QYTextMsg.Text(Text));
qyTextMsg.setToUser(User);
qyTextMsg.setToParty(ZZBM);
qyTextMsg.setAgentId(AgentID);
QYMessageAPI messageAPI = new QYMessageAPI(initConfig());
GetQYSendMessageResponse response = messageAPI.send(qyTextMsg);
return response.getErrmsg();
}
/**
* User 和ZZBM必须选一个,需要注意的是ZZBM包括下属所有子部门,所以建议不是群发时候,不要使用ZZBM,只指定User
*
* @param User
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
* @param ZZBM 部门ID列表,多个接收者用‘|’分隔,最多支持100个。当touser为@all时忽略本参数
* @param agentid 应用ID号
* @param title 标题
* @param description 描述
* @param url 点击后跳转的链接。
* @param picurl 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80。如不填,在客户端不显示图片
* @return
*/
public String sendNewsMessage(String User, String ZZBM, String agentid, String[] title,
String[] description, String[] url,
String[] picurl) {
QYNewsMsg msg = new QYNewsMsg();
msg.setToUser(User);
msg.setToParty(ZZBM);
msg.setMsgType("news");
msg.setAgentId(agentid);
List<QYArticle> articleist = new ArrayList<QYArticle>();
for (int i = 0; i < title.length; i++) {
QYArticle article
= new QYArticle(title[i], description[i], picurl[i], url[i]);
articleist.add(article);
}
msg.setArticles(articleist);
QYMessageAPI messageAPI = new QYMessageAPI(initConfig());
GetQYSendMessageResponse response = messageAPI.send(msg);
System.out.println(JSONUtil.toJson(msg));
return response.getErrmsg();
}
/**
* User 和ZZBM必须选一个,需要注意的是ZZBM包括下属所有子部门,所以建议不是群发时候,不要使用ZZBM,只指定User
*
* @param User
* 成员ID列表(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向关注该企业应用的全部成员发送
* @param agentid 应用ID号
* @param title 标题
* @param description 描述
* @param url 点击后跳转的链接。
* @param picurl 图文消息的图片链接,支持JPG、PNG格式,较好的效果为大图640*320,小图80*80。如不填,在客户端不显示图片
* @return
*/
public String sendNewsMessage(String User, String agentid, String[] title,
String[] description, String[] url,
String[] picurl) {
QYNewsMsg msg = new QYNewsMsg();
msg.setToUser(User);
msg.setMsgType("news");
msg.setAgentId(agentid);
List<QYArticle> articleist = new ArrayList<QYArticle>();
for (int i = 0; i < title.length; i++) {
QYArticle article
= new QYArticle(title[i], description[i], picurl[i], url[i]);
articleist.add(article);
}
msg.setArticles(articleist);
QYMessageAPI messageAPI = new QYMessageAPI(initConfig());
GetQYSendMessageResponse response = messageAPI.send(msg);
System.out.println(JSONUtil.toJson(msg));
return response.getErrmsg();
}
public static void main(String[] arg) {
SendMessage message = new SendMessage();
message.sendNewsMessage("大师罗庄", "1", MainServernSupport.getAgentID(), new String[]{"大师罗庄博客"}, new String[]{"大师罗庄博客"}, new String[]{g"}, new String[]{});
}
}