程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> C#開發微信門戶及應用(19)-微信企業號的消息發送(文本、圖片、文件、語音、視頻、圖文消息等),

C#開發微信門戶及應用(19)-微信企業號的消息發送(文本、圖片、文件、語音、視頻、圖文消息等),

編輯:C#入門知識

C#開發微信門戶及應用(19)-微信企業號的消息發送(文本、圖片、文件、語音、視頻、圖文消息等),


 我們知道,企業號主要是面向企業需求而生的,因此內部消息的交流顯得非常重要,而且發送、回復消息數量應該很可觀,對於大企業尤其如此,因此可以結合企業號實現內部消息的交流。企業號具有關注安全、消息無限制等特點,很適合企業內部的環境。本文主要介紹如何利用企業號實現文本、圖片、文件、語音、視頻、圖文消息等消息的發送操作。

1、企業號特點

對於企業號,有以下一些特點:

1)關注更安全

–只有企業通訊錄的成員才能關注企業號,分級管理員、保密消息等各種特性確保企業內部信息的安全。

企業可以設置自行驗證關注者身份,進行二次安全驗證,保證企業信息使用和傳遞安全。

若員工離職,企業管理員可在通訊錄中刪除該成員,該成員即自動取消關注企業號,同時微信中的企業號歷史記錄也會被清除。

2)應用可配置

–企業可自行在企業號中可配置多個服務號,可以連接不同的企業應用系統,只有授權的企業成員才能使用相應的服務號。

3)消息無限制

–發送消息無限制,並提供完善的的管理接口及微信原生能力,以適應企業復雜、個性化的應用場景。

企業可以主動發消息給員工,消息量不受限制

4)使用更便捷

–企業號在微信中有統一的消息入口,用戶可以更方便地管理企業號消息。微信通訊錄也可以直接訪問企業號中的應用。

 

2、企業號的管理接口內容

目前企業號的內容可以用下面的分層圖來展示,分別包含素材管理、被動響應消息、通訊錄管理、自定義菜單等內容,詳細可以看下面圖示。

 

3、企業號消息和事件的處理

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

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

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

 

 

4、企業號消息管理

在企業的管理後台,和公眾號一樣,可以看到對應信息交流記錄,包括文字、圖片、地理位置等等,如下所示。

 

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

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

 

 

企業號發送消息的官方定義如下:

企業可以主動發消息給員工,消息量不受限制

調用接口時,使用Https協議、JSON數據包格式,數據包不需做加密處理。

目前支持文本、圖片、語音、視頻、文件、圖文等消息類型。除了news類型,其它類型的消息可在發送時加上保密選項,保密消息會被打上水印,並且只有接收者才能閱讀。

 

我們以發送的文本消息為例進行說明,它的定義如下所示。

  • 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"
}

 

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

 

 

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

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

因此我們可以定義一個基類用來方便承載這些共同的信息。

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

        /// <summary>
        /// PartyID列表,多個接受者用‘|’分隔。當touser為@all時忽略本參數
        /// </summary>
        public string toparty { get; set; }

        /// <summary>
        /// TagID列表,多個接受者用‘|’分隔。當touser為@all時忽略本參數
        /// </summary>
        public string totag { get; set; }

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

        /// <summary>
        /// 企業應用的id,整型。可在應用的設置頁面查看
        /// </summary>
        public string agentid { get; set; }

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

    }

然後其他消息逐一繼承這個基類即可,如下所示。

最終會構成下面這個繼承關系圖。 

 

5、消息接口的定義和實現 

 定義好相關的發送對象後,我們就可以定義它的統一發送接口了,如下所示。

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

最終,文本等類型的消息會根據接口定義進行實現,實現代碼如下所示。注意,發送過程不需要調用加密類進行加密。

    /// <summary>
    /// 企業號消息管理實現類
    /// </summary>
    public class CorpMessageApi : ICorpMessageApi
    {
        /// <summary>
        /// 發送消息。
        /// 需要管理員對應用有使用權限,對收件人touser、toparty、totag有查看權限,否則本次調用失敗。
        /// </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();

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

            return result;
        }
    }

6、消息的發送操作和實際效果

 定義好相應的發送對象後,我們就可以進行統一的消息發送操作,包括文本、圖片、文件、語音等等類型的消息,注意有些消息是需要上傳到服務器上,然後在根據mediaId進行發送出去的。

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

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

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

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

            CommonResult result = bll.SendMessage(token, text);
            if (result != null)
            {
                Console.WriteLine("發送消息:{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))
            {
                //發送圖片內容
                ICorpMessageApi bll = new CorpMessageApi();

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

最後在微信企業號上截圖效果如下所示,包括了文本測試、文件測試、圖文測試、語音測試均正常。

 

 

如果對這個《C#開發微信門戶及應用》系列感興趣,可以關注我的其他文章,系列隨筆如下所示:

C#開發微信門戶及應用(18)-微信企業號的通訊錄管理開發之成員管理

C#開發微信門戶及應用(17)-微信企業號的通訊錄管理開發之部門管理

C#開發微信門戶及應用(16)-微信企業號的配置和使用

C#開發微信門戶及應用(15)-微信菜單增加掃一掃、發圖片、發地理位置功能

 C#開發微信門戶及應用(14)-在微信菜單中采用重定向獲取用戶數據

C#開發微信門戶及應用(13)-使用地理位置擴展相關應用

C#開發微信門戶及應用(12)-使用語音處理

C#開發微信門戶及應用(11)--微信菜單的多種表現方式介紹

C#開發微信門戶及應用(10)--在管理系統中同步微信用戶分組信息

C#開發微信門戶及應用(9)-微信門戶菜單管理及提交到微信服務器

C#開發微信門戶及應用(8)-微信門戶應用管理系統功能介紹

C#開發微信門戶及應用(7)-微信多客服功能及開發集成

C#開發微信門戶及應用(6)--微信門戶菜單的管理操作

C#開發微信門戶及應用(5)--用戶分組信息管理

C#開發微信門戶及應用(4)--關注用戶列表及詳細信息管理

C#開發微信門戶及應用(3)--文本消息和圖文消息的應答

C#開發微信門戶及應用(2)--微信消息的處理和應答

C#開發微信門戶及應用(1)--開始使用微信接口


C:\

可以的

參考這個對C盤進行清理:
1.關閉系統還原:我的電腦屬性/系統還原/關閉所有磁盤上的系統還原,但是以後就不能用系統還原了!
2.關閉系統休眠:控制面板/電源/休眠/在啟動系統休眠前面的勾去掉
3.移動虛擬內存,我的電腦屬性/高級/性能/設置/高級/更改/選C盤也就是系統盤,選無分頁面,然後把虛擬內存設置到其磁盤,要剩余磁盤空間多的磁盤,比如D,E,F等盤. 設成內存的1.5~2.5倍,大小可設成一樣!
5.清理IE臨時文件夾,internet選項,刪除臨時文件和脫機文件
6.刪除系統日志和程序日志,我的電腦/控制面板/管理工具/計算機管理/事件查看器/應用程序,鼠標右鍵/清除所事件,在依次清除系統日志
7.清理系統緩存:2000系統是:C:\WINNT\system32\dllcache下的所有文件
XP系統是:C:\windows\system32\dllcache下的所有文件 清理系統緩存(打開我的電腦/工具/文件和文件夾選項/隱藏受保護的系統文件的勾去掉在把顯示全部文件勾上)。也可以直接運行sfc.exe /purgecache命令自動刪除。
8.清空回收站
9.刪除c:\windows\SoftwareDistribution\Download下的文件(系統更新時下載的文件如你裝好了更新也就沒有用了)
10.刪除c:\windows\RegisteredPackages下所有目錄
11.刪除C:\WINDOWS\Downloaded Program Files下所有的文件
12.我的電腦 文件夾選項 查看 隱藏已知受系統保護的文件勾去掉,顯示所有文件勾上確定。
13.刪除c:\windows\所有帶$8882305$的文件(系統更新後的備份文件)

zhidao.baidu.com/question/11035955.html
zhidao.baidu.com/question/12223613.html
zhidao.baidu.com/question/14874715.html
......余下全文>>
 

C:\

可以的

參考這個對C盤進行清理:
1.關閉系統還原:我的電腦屬性/系統還原/關閉所有磁盤上的系統還原,但是以後就不能用系統還原了!
2.關閉系統休眠:控制面板/電源/休眠/在啟動系統休眠前面的勾去掉
3.移動虛擬內存,我的電腦屬性/高級/性能/設置/高級/更改/選C盤也就是系統盤,選無分頁面,然後把虛擬內存設置到其磁盤,要剩余磁盤空間多的磁盤,比如D,E,F等盤. 設成內存的1.5~2.5倍,大小可設成一樣!
5.清理IE臨時文件夾,internet選項,刪除臨時文件和脫機文件
6.刪除系統日志和程序日志,我的電腦/控制面板/管理工具/計算機管理/事件查看器/應用程序,鼠標右鍵/清除所事件,在依次清除系統日志
7.清理系統緩存:2000系統是:C:\WINNT\system32\dllcache下的所有文件
XP系統是:C:\windows\system32\dllcache下的所有文件 清理系統緩存(打開我的電腦/工具/文件和文件夾選項/隱藏受保護的系統文件的勾去掉在把顯示全部文件勾上)。也可以直接運行sfc.exe /purgecache命令自動刪除。
8.清空回收站
9.刪除c:\windows\SoftwareDistribution\Download下的文件(系統更新時下載的文件如你裝好了更新也就沒有用了)
10.刪除c:\windows\RegisteredPackages下所有目錄
11.刪除C:\WINDOWS\Downloaded Program Files下所有的文件
12.我的電腦 文件夾選項 查看 隱藏已知受系統保護的文件勾去掉,顯示所有文件勾上確定。
13.刪除c:\windows\所有帶$8882305$的文件(系統更新後的備份文件)

zhidao.baidu.com/question/11035955.html
zhidao.baidu.com/question/12223613.html
zhidao.baidu.com/question/14874715.html
......余下全文>>
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved