【fastweixin框架教程6】微信企业号给关注的用户主动发送推送消息

  下面这个类我对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[]{"http://blog.csdn.net/luozhuang"}, new String[]{"http://avatar.csdn.net/B/F/A/1_luozhuang.jpg"});
    }
}


你可能感兴趣的:(java,推送消息,fastweixin)