首頁  >  文章  >  微信小程式  >  C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等)

C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等)

高洛峰
高洛峰原創
2017-03-02 09:36:012668瀏覽

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

1、企業號特點

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

1)關注更安全

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

企業可以設定自行驗證追蹤者身份,進行二次安全驗證,確保企業資訊使用和傳遞安全。

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

2)應用可設定

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

3)訊息無限

–發送訊息無限制,並提供完善的管理介面及微信原生能力,以適應企業複雜、個人化的應用場景。

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

4)使用更便捷

–企業號在微信中有統一的訊息入口,使用者可以更方便地管理企業號訊息。微信通訊錄也可以直接存取企業號中的應用程式。

 

2、企業號的管理介面內容

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

C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等)

 

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

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

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

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

C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等) 

 

4、企業號訊息管理

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

 C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等)

由於訊息分為幾種類型,包括文字(Text)、圖片(Image)、檔案(File)、語音(Voice)、影片(Video)、圖文消息等(News)、MpNews等。

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

 C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等)

 

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

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

呼叫介面時,使用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://www.php.cn/)"
   },
   "safe":"0"
}

 

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


 

 

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

    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; }

    }

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

C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等)

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

 

C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等)

5、訊息介面的定義與實作 

# 定義好相關的傳送物件後,我們就可以定義它的統一傳送介面了,如下所示。

    /// <summary>
    /// 企业号消息管理接口定义    /// </summary>
    public interface ICorpMessageApi
    {        
        /// <summary>
        /// 发送消息。        /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。        /// </summary>
        /// <param>
        /// <returns></returns>
        CommonResult SendMessage(string accessToken, CorpSendBase data);
    }

最終,文字等類型的訊息會根據介面定義進行實現,實作程式碼如下所示。

注意,發送過程不需要呼叫加密類別進行加密

    /// <summary>
    /// 企业号消息管理实现类    /// </summary>
    public class CorpMessageApi : ICorpMessageApi
    {        /// <summary>
        /// 发送消息。        /// 需要管理员对应用有使用权限,对收件人touser、toparty、totag有查看权限,否则本次调用失败。        /// </summary>
        /// <param>
        /// <returns></returns>
        public CommonResult SendMessage(string accessToken, CorpSendBase data)
        {        
            CommonResult result = new CommonResult();            string urlFormat = "http://www.php.cn/{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;
        }
    }</corpsendresult>

6、訊息的傳送操作和實際效果

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

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

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

            CorpSendText text = new CorpSendText("API 中文测试(http://www.php.cn/)");
            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#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、文件、語音、影片、圖文訊息等)

 更多C#開發微信入口網站及應用微信企業號的訊息傳送(文字、圖片、檔案、語音、影片、圖文訊息等)相關文章請關注PHP中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn