當(dāng)前位置:首頁(yè) > IT技術(shù) > 微信平臺(tái) > 正文

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)
2021-07-22 17:56:14

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)

我們知道,企業(yè)號(hào)主要是面向企業(yè)需求而生的,因此內(nèi)部消息的交流顯得非常重要,而且發(fā)送、回復(fù)消息數(shù)量應(yīng)該很可觀,對(duì)于大企業(yè)尤其如此,因此可以結(jié)合企業(yè)號(hào)實(shí)現(xiàn)內(nèi)部消息的交流。企業(yè)號(hào)具有關(guān)注安全、消息無(wú)限制等特點(diǎn),很適合企業(yè)內(nèi)部的環(huán)境。本文主要介紹如何利用企業(yè)號(hào)實(shí)現(xiàn)文本、圖片、文件、語(yǔ)音、視頻、圖文消息等消息的發(fā)送操作。

?我們知道,企業(yè)號(hào)主要是面向企業(yè)需求而生的,因此內(nèi)部消息的交流顯得非常重要,而且發(fā)送、回復(fù)消息數(shù)量應(yīng)該很可觀,對(duì)于大企業(yè)尤其如此,因此可以結(jié)合企業(yè)號(hào)實(shí)現(xiàn)內(nèi)部消息的交流。企業(yè)號(hào)具有關(guān)注安全、消息無(wú)限制等特點(diǎn),很適合企業(yè)內(nèi)部的環(huán)境。本文主要介紹如何利用企業(yè)號(hào)實(shí)現(xiàn)文本、圖片、文件、語(yǔ)音、視頻、圖文消息等消息的發(fā)送操作。

1、企業(yè)號(hào)特點(diǎn)

對(duì)于企業(yè)號(hào),有以下一些特點(diǎn):

1)關(guān)注更安全

–只有企業(yè)通訊錄的成員才能關(guān)注企業(yè)號(hào),分級(jí)管理員、保密消息等各種特性確保企業(yè)內(nèi)部信息的安全。

企業(yè)可以設(shè)置自行驗(yàn)證關(guān)注者身份,進(jìn)行二次安全驗(yàn)證,保證企業(yè)信息使用和傳遞安全。

若員工離職,企業(yè)管理員可在通訊錄中刪除該成員,該成員即自動(dòng)取消關(guān)注企業(yè)號(hào),同時(shí)微信中的企業(yè)號(hào)歷史記錄也會(huì)被清除。

2)應(yīng)用可配置

–企業(yè)可自行在企業(yè)號(hào)中可配置多個(gè)服務(wù)號(hào),可以連接不同的企業(yè)應(yīng)用系統(tǒng),只有授權(quán)的企業(yè)成員才能使用相應(yīng)的服務(wù)號(hào)。

3)消息無(wú)限制

–發(fā)送消息無(wú)限制,并提供完善的的管理接口及微信原生能力,以適應(yīng)企業(yè)復(fù)雜、個(gè)性化的應(yīng)用場(chǎng)景。

企業(yè)可以主動(dòng)發(fā)消息給員工,消息量不受限制。

4)使用更便捷

–企業(yè)號(hào)在微信中有統(tǒng)一的消息入口,用戶可以更方便地管理企業(yè)號(hào)消息。微信通訊錄也可以直接訪問(wèn)企業(yè)號(hào)中的應(yīng)用。

?

2、企業(yè)號(hào)的管理接口內(nèi)容

目前企業(yè)號(hào)的內(nèi)容可以用下面的分層圖來(lái)展示,分別包含素材管理、被動(dòng)響應(yīng)消息、通訊錄管理、自定義菜單等內(nèi)容,詳細(xì)可以看下面圖示。

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用

?

3、企業(yè)號(hào)消息和事件的處理

企業(yè)號(hào)和公眾號(hào)一樣,可以分為消息處理和事件處理,下面是他們兩種類型的處理操作,也就發(fā)送的消息有文本消息、圖片消息、文件消息、視頻消息、語(yǔ)音消息、地理文字消息、圖文和多媒體消息等。

事件處理主要就是關(guān)注、取消關(guān)注事件,以及菜單click類型和view類型兩種操作,還有就是地理位置上報(bào)事件等。

兩種類型的處理圖如下所示。

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_02?

?

4、企業(yè)號(hào)消息管理

在企業(yè)的管理后臺(tái),和公眾號(hào)一樣,可以看到對(duì)應(yīng)信息交流記錄,包括文字、圖片、地理位置等等,如下所示。

?C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_03

由于消息分為幾種類型,包括文本(Text)、圖片(Image)、文件(File)、語(yǔ)音(Voice)、視頻(Video)、圖文消息等(News)、MpNews等。

因此我們需要分別對(duì)它們進(jìn)行一定的定義和封裝處理,如下是它們的信息對(duì)象設(shè)計(jì)圖。

?C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_04

?

企業(yè)號(hào)發(fā)送消息的官方定義如下:

企業(yè)可以主動(dòng)發(fā)消息給員工,消息量不受限制。

調(diào)用接口時(shí),使用Https協(xié)議、JSON數(shù)據(jù)包格式,數(shù)據(jù)包不需做加密處理。

目前支持文本、圖片、語(yǔ)音、視頻、文件、圖文等消息類型。除了news類型,其它類型的消息可在發(fā)送時(shí)加上保密選項(xiàng),保密消息會(huì)被打上水印,并且只有接收者才能閱讀。

?

我們以發(fā)送的文本消息為例進(jìn)行說(shuō)明,它的定義如下所示。

  • text消息
{
   "touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "text",
   "agentid": "1",
   "text": {
       "content": "Holiday Request For Pony(http://xxxxx)"
   },
   "safe":"0"
}

?

參數(shù) 必須 說(shuō)明
touser UserID列表(消息接收者,多個(gè)接收者用‘|’分隔)。特殊情況:指定為@all,則向關(guān)注該企業(yè)應(yīng)用的全部成員發(fā)送
toparty PartyID列表,多個(gè)接受者用‘|’分隔。當(dāng)touser為@all時(shí)忽略本參數(shù)
totag TagID列表,多個(gè)接受者用‘|’分隔。當(dāng)touser為@all時(shí)忽略本參數(shù)
msgtype 消息類型,此時(shí)固定為:text
agentid 企業(yè)應(yīng)用的id,整型。可在應(yīng)用的設(shè)置頁(yè)面查看
content 消息內(nèi)容
safe 表示是否是保密消息,0表示否,1表示是,默認(rèn)0


?

?

?其中每種消息都會(huì)包含以下消息所示,也就是它們共同的屬性:

    touser": "UserID1|UserID2|UserID3",
   "toparty": " PartyID1 | PartyID2 ",
   "totag": " TagID1 | TagID2 ",
   "msgtype": "text",
   "agentid": "1",

因此我們可以定義一個(gè)基類用來(lái)方便承載這些共同的信息。

    /// <summary>
    /// 企業(yè)號(hào)發(fā)送消息的基礎(chǔ)消息內(nèi)容
    /// </summary>
    public class CorpSendBase
    {      
        /// <summary>
        /// UserID列表(消息接收者,多個(gè)接收者用‘|’分隔)。特殊情況:指定為@all,則向關(guān)注該企業(yè)應(yīng)用的全部成員發(fā)送
        /// </summary>
        public string touser { get; set; }

        /// <summary>
        /// PartyID列表,多個(gè)接受者用‘|’分隔。當(dāng)touser為@all時(shí)忽略本參數(shù)
        /// </summary>
        public string toparty { get; set; }

        /// <summary>
        /// TagID列表,多個(gè)接受者用‘|’分隔。當(dāng)touser為@all時(shí)忽略本參數(shù)
        /// </summary>
        public string totag { get; set; }

        /// <summary>
        /// 消息類型
        /// </summary>
        public string msgtype { get; set; }

        /// <summary>
        /// 企業(yè)應(yīng)用的id,整型??稍趹?yīng)用的設(shè)置頁(yè)面查看
        /// </summary>
        public string agentid { get; set; }

        /// <summary>
        /// 表示是否是保密消息,0表示否,1表示是,默認(rèn)0
        /// </summary>
        [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
        public string safe { get; set; }

    }

然后其他消息逐一繼承這個(gè)基類即可,如下所示。

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_05

最終會(huì)構(gòu)成下面這個(gè)繼承關(guān)系圖。?

?C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_04

5、消息接口的定義和實(shí)現(xiàn)?

?定義好相關(guān)的發(fā)送對(duì)象后,我們就可以定義它的統(tǒng)一發(fā)送接口了,如下所示。

    /// <summary>
    /// 企業(yè)號(hào)消息管理接口定義
    /// </summary>
    public interface ICorpMessageApi
    {        
        /// <summary>
        /// 發(fā)送消息。
        /// 需要管理員對(duì)應(yīng)用有使用權(quán)限,對(duì)收件人touser、toparty、totag有查看權(quán)限,否則本次調(diào)用失敗。
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        CommonResult SendMessage(string accessToken, CorpSendBase data);
    }

最終,文本等類型的消息會(huì)根據(jù)接口定義進(jìn)行實(shí)現(xiàn),實(shí)現(xiàn)代碼如下所示。注意,發(fā)送過(guò)程不需要調(diào)用加密類進(jìn)行加密。

    /// <summary>
    /// 企業(yè)號(hào)消息管理實(shí)現(xiàn)類
    /// </summary>
    public class CorpMessageApi : ICorpMessageApi
    {
        /// <summary>
        /// 發(fā)送消息。
        /// 需要管理員對(duì)應(yīng)用有使用權(quán)限,對(duì)收件人touser、toparty、totag有查看權(quán)限,否則本次調(diào)用失敗。
        /// </summary>
        /// <param name="accessToken"></param>
        /// <returns></returns>
        public CommonResult SendMessage(string accessToken, CorpSendBase data)
        {        
            CommonResult result = new CommonResult();

            string urlFormat = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={0}";
            var url = string.Format(urlFormat, accessToken);
            var postData = data.ToJson();

            //數(shù)據(jù)不用加密發(fā)送
            CorpSendResult sendResult = CorpJsonHelper<CorpSendResult>.ConvertJson(url, postData);
            if (sendResult != null)
            {
                result.Success = (sendResult.errcode == CorpReturnCode.請(qǐng)求成功);
                result.ErrorMessage = string.Format("invaliduser:{0},invalidparty:{1},invalidtag:{2}",
                    sendResult.invaliduser, sendResult.invalidparty, sendResult.invalidtag);
            }

            return result;
        }
    }

6、消息的發(fā)送操作和實(shí)際效果

?定義好相應(yīng)的發(fā)送對(duì)象后,我們就可以進(jìn)行統(tǒng)一的消息發(fā)送操作,包括文本、圖片、文件、語(yǔ)音等等類型的消息,注意有些消息是需要上傳到服務(wù)器上,然后在根據(jù)mediaId進(jìn)行發(fā)送出去的。

發(fā)送文本和圖片的操作代碼如下所示。

        private void btnSendText_Click(object sender, EventArgs e)
        {
            //發(fā)送文本內(nèi)容
            ICorpMessageApi bll = new CorpMessageApi();

            CorpSendText text = new CorpSendText("API 中文測(cè)試(http://www.iqidi.com)");
            text.touser = "wuhuacong";
            text.toparty = "4";//部門(mén)ID
            text.totag = "0";

            text.safe = "0";
            text.agentid = "0";

            CommonResult result = bll.SendMessage(token, text);
            if (result != null)
            {
                Console.WriteLine("發(fā)送消息:{0} {1} {2}", text.text.content, (result.Success ? "成功" : "失敗"), result.ErrorMessage);
            }
        }
        private void btnSendImage_Click(object sender, EventArgs e)
        {
            btnUpload_Click(sender, e);

            if (!string.IsNullOrEmpty(image_mediaId))
            {
                //發(fā)送圖片內(nèi)容
                ICorpMessageApi bll = new CorpMessageApi();

                CorpSendImage image = new CorpSendImage(image_mediaId);
                CommonResult result = bll.SendMessage(token, image);
                if (result != null)
                {
                    Console.WriteLine("發(fā)送圖片消息:{0} {1} {2}", image_mediaId, (result.Success ? "成功" : "失敗"), result.ErrorMessage);
                }
            }
        }

最后在微信企業(yè)號(hào)上截圖效果如下所示,包括了文本測(cè)試、文件測(cè)試、圖文測(cè)試、語(yǔ)音測(cè)試均正常。

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_07?C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_08

?

如果對(duì)這個(gè)《C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用》系列感興趣,可以關(guān)注我的其他文章,系列隨筆如下所示:

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(25)-微信企業(yè)號(hào)的客戶端管理功能

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(24)-微信小店貨架信息管理

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(23)-微信小店商品管理接口的封裝和測(cè)試

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(22)-微信小店的開(kāi)發(fā)和使用

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(21)-微信企業(yè)號(hào)的消息和事件的接收處理及解密?

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(20)-微信企業(yè)號(hào)的菜單管理

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(18)-微信企業(yè)號(hào)的通訊錄管理開(kāi)發(fā)之成員管理

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(17)-微信企業(yè)號(hào)的通訊錄管理開(kāi)發(fā)之部門(mén)管理

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(16)-微信企業(yè)號(hào)的配置和使用

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(15)-微信菜單增加掃一掃、發(fā)圖片、發(fā)地理位置功能

?C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(14)-在微信菜單中采用重定向獲取用戶數(shù)據(jù)

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(13)-使用地理位置擴(kuò)展相關(guān)應(yīng)用

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(12)-使用語(yǔ)音處理

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(11)--微信菜單的多種表現(xiàn)方式介紹

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(10)--在管理系統(tǒng)中同步微信用戶分組信息

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(9)-微信門(mén)戶菜單管理及提交到微信服務(wù)器

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(8)-微信門(mén)戶應(yīng)用管理系統(tǒng)功能介紹

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(7)-微信多客服功能及開(kāi)發(fā)集成

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(6)--微信門(mén)戶菜單的管理操作

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(5)--用戶分組信息管理

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(4)--關(guān)注用戶列表及詳細(xì)信息管理

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(3)--文本消息和圖文消息的應(yīng)答

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(2)--微信消息的處理和應(yīng)答

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(1)--開(kāi)始使用微信接口

C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_09主要研究技術(shù):代碼生成工具、會(huì)員管理系統(tǒng)、客戶關(guān)系管理軟件、病人資料管理軟件、Visio二次開(kāi)發(fā)、酒店管理系統(tǒng)、倉(cāng)庫(kù)管理系統(tǒng)等共享軟件開(kāi)發(fā)
專注于Winform開(kāi)發(fā)框架/混合式開(kāi)發(fā)框架、Web開(kāi)發(fā)框架、Bootstrap開(kāi)發(fā)框架、微信門(mén)戶開(kāi)發(fā)框架的研究及應(yīng)用。
??轉(zhuǎn)載請(qǐng)注明出處
C#開(kāi)發(fā)微信門(mén)戶及應(yīng)用(19)-微信企業(yè)號(hào)的消息發(fā)送(文本、圖片、文件、語(yǔ)音、視頻、圖文消息等)_微信公眾平臺(tái)及門(mén)戶應(yīng)用_09撰寫(xiě)人:伍華聰??
????
?

本文摘自 :https://blog.51cto.com/w

開(kāi)通會(huì)員,享受整站包年服務(wù)立即開(kāi)通 >