【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"});
    }
}


發佈了1023 篇原創文章 · 獲贊 273 · 訪問量 1030萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章