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

 在本系列隨筆的前面,主要就是介紹微信公衆號的門戶應用開發,最近把整個微信框架進行了擴展補充,增長了最新的企業號的API封裝和開發,後續主要介紹如何利用C#進行微信企業號的開發工做,本篇做爲微信企業號的開發的起步篇,介紹微信企業號的配置和使用。html

一、微信企業號的註冊和登錄

企業號是繼公衆號、訂閱號的另一種微信類型,它主要是面對企業的。企業號是微信爲企業客戶提供的移動應用入口。能夠幫助企業創建員工、上下游供應鏈與企業 IT 系統間的鏈接。利用 企業號 ,企業或第三方合做夥伴能夠幫助企業快速、低成本的實現高質量的移動輕應用,實現生產、管理、協做、運營的 移動化 。api

我的以爲企業號最大的亮點是能夠不限數量的消息發送,也就是能夠在企業員工之間暢通交流。相對於公衆號和訂閱號,發送消息的謹慎程度,微信企業號可謂給人眼前一亮的感受。不過微信企業號是須要內部創建好通信錄,關注者須要匹配通信錄的微信號、郵箱、電話號碼任一個經過才能夠關注,也就是能夠防止其餘外來人員的自由關注了,另外若是爲了安全考慮,還能夠設置二次驗證,也就是一個審覈過程。安全

企業號的認證和公衆號同樣,須要提供相關的企業資質文件,而且認證每一年都要收取費用,不然可能有人員和功能的一些限制。以爲微信真是想着方法賺錢,目前已有的收費模式有,訂閱號、公衆號、企業號、開放平臺,好像都有認證收費的了,並且微信小店也還須要收2萬的押金,一切都是錢呀。服務器

好了,其餘很少說,微信的註冊地址是:https://qy.weixin.qq.com,一個郵箱不能同時註冊微信公衆號和微信企業號。微信

對於企業開通企業號並開始使用須要四步框架

1) 企業到微信官網( http://qy.weixin.qq.com )申請開通;函數

2) 開通後,企業在企業號管理後臺導入成員,發佈二維碼;post

3) 企業調用企業號 api 與企業自有系統對接開發;測試

4) 員工關注,收到微信信息,在微信中與企業交互網站

註冊好企業號,就能夠經過微信掃一掃,掃描企業二維碼進行登陸了,掃描的時候,須要微信進行確認,才能夠繼續輸入密碼進行登陸,操做界面以下所示(左邊是手機截圖,右邊是網頁截圖)。

 

登陸後咱們就能夠看到對應的電腦端的管理界面了。

二、設置開發回調模式

若是開發過微信公衆號,那麼咱們就知道,若是須要在微信服務器和網站服務器之間創建鏈接關係,實現消息的轉發和處理,那麼就應該設置一個回調模式,須要配置好相關的參數。而後在本身 網站服務器裏面創建一個處理微信服務器消息的入口。

 

進入配置後,咱們須要修改相關的URL、Token、EncodingAESKey等參數,主要是URL,這個就是和公衆號的入口處理同樣的,須要咱們發佈到網站服務器上的處理入口。

Token和AESKey能夠根據提示動態生成一個便可,AESKey好像必須是23位的,因此這個通常是讓它本身生成的,這個主要用來加密解密使用的。

URL、Token、EncodingAESKey三個參數說明。

1)URL是企業應用接收企業號推送請求的訪問協議和地址,支持http或https協議。

2)Token可由企業任意填寫,用於生成簽名。

3)EncodingAESKey用於消息體的加密,是AES密鑰的Base64編碼。

驗證URL、Token以及加密的詳細處理請參考後續 「接收消息時的加解密處理」 的部分。

我公司的企業號配置後的界面以下所示。

 這個URL裏面指向的頁面功能,須要對數據進行解析並返回給微信服務器,所以咱們須要在服務器上預先部署好這個處理功能入口。

除了上面的幾個函數,還有一個CorpID的參數須要使用,咱們能夠在後臺主界面-設置裏面查看到。

而後咱們爲了方便網站後臺使用,咱們和公衆號的配置同樣,把它放到了Web.Config裏面,以下所示。

三、實現回調頁面的功能開發

前面介紹了幾個配置項,須要在回調頁面裏面使用的,本小節繼續介紹如何實現企業號信息的回發,使之經過回調測試的操做。

因爲回調測試的數據是經過Get方式發送的,所以咱們的處理邏輯代碼以下所示,和公衆號的相似處理,只是實現部分不太同樣而已。

    /// <summary>
    /// 企業號回調信息接口。統一接收並處理信息的入口。
    /// </summary>
    public class corpapi : IHttpHandler
    {
        /// <summary>
        /// 處理企業號的信息
        /// </summary>
        /// <param name="context"></param>
        public void ProcessRequest(HttpContext context)
        {
            string postString = string.Empty;
            if (HttpContext.Current.Request.HttpMethod.ToUpper() == "POST")
            {
                using (Stream stream = HttpContext.Current.Request.InputStream)
                {
                    Byte[] postBytes = new Byte[stream.Length];
                    stream.Read(postBytes, 0, (Int32)stream.Length);
                    postString = Encoding.UTF8.GetString(postBytes);
                }

                if (!string.IsNullOrEmpty(postString))
                {
                    Execute(postString);
                }
            }
            else
            {
                Auth();
            }
        }

        /// <summary>
        /// 成爲開發者的第一步,驗證並相應服務器的數據
        /// </summary>
        private void Auth()
        {
            #region 獲取關鍵參數
            string token = ConfigurationManager.AppSettings["CorpToken"];//從配置文件獲取Token
            if (string.IsNullOrEmpty(token))
            {
                LogTextHelper.Error(string.Format("CorpToken 配置項沒有配置!"));
            }
            string encodingAESKey = ConfigurationManager.AppSettings["EncodingAESKey"];//從配置文件獲取EncodingAESKey
            if (string.IsNullOrEmpty(encodingAESKey))
            {
                LogTextHelper.Error(string.Format("EncodingAESKey 配置項沒有配置!"));
            }
            string corpId = ConfigurationManager.AppSettings["CorpId"];//從配置文件獲取corpId
            if (string.IsNullOrEmpty(corpId))
            {
                LogTextHelper.Error(string.Format("CorpId 配置項沒有配置!"));
            } 
            #endregion

            string echoString = HttpContext.Current.Request.QueryString["echoStr"];
            string signature = HttpContext.Current.Request.QueryString["msg_signature"];//企業號的 msg_signature
            string timestamp = HttpContext.Current.Request.QueryString["timestamp"];
            string nonce = HttpContext.Current.Request.QueryString["nonce"];

            string decryptEchoString = "";
            if (new CorpBasicApi().CheckSignature(token, signature, timestamp, nonce, corpId, encodingAESKey, echoString, ref decryptEchoString))
            {
                if (!string.IsNullOrEmpty(decryptEchoString))
                {
                    HttpContext.Current.Response.Write(decryptEchoString);
                    HttpContext.Current.Response.End();
                }
            }
        }

具體的處理代碼以下所示,裏面的一個加解密處理的類是微信企業號附錄裏面提供的,我使用了C#版本的SDK而已。

    /// <summary>
    /// 企業號基礎操做API實現
    /// </summary>
    public class CorpBasicApi : ICorpBasicApi
    {
        /// <summary>
        /// 驗證企業號簽名
        /// </summary>
        /// <param name="token">企業號配置的Token</param>
        /// <param name="signature">簽名內容</param>
        /// <param name="timestamp">時間戳</param>
        /// <param name="nonce">nonce參數</param>
        /// <param name="corpId">企業號ID標識</param>
        /// <param name="encodingAESKey">加密鍵</param>
        /// <param name="echostr">內容字符串</param>
        /// <param name="retEchostr">返回的字符串</param>
        /// <returns></returns>
        public bool CheckSignature(string token, string signature, string timestamp, string nonce, string corpId, string encodingAESKey, string echostr, ref string retEchostr)
        {
            WXBizMsgCrypt wxcpt = new WXBizMsgCrypt(token, encodingAESKey, corpId);
            int result = wxcpt.VerifyURL(signature, timestamp, nonce, echostr, ref retEchostr);
            if (result != 0)
            {
                LogTextHelper.Error("ERR: VerifyURL fail, ret: " + result);
                return false;
            }

            return true;

            //ret==0表示驗證成功,retEchostr參數表示明文,用戶須要將retEchostr做爲get請求的返回參數,返回給企業號。
            // HttpUtils.SetResponse(retEchostr);
        }

 

 

若是對這個《C#開發微信門戶及應用》系列感興趣,能夠關注個人其餘文章,系列隨筆以下所示:

C#開發微信門戶及應用(25)-微信企業號的客戶端管理功能

C#開發微信門戶及應用(24)-微信小店貨架信息管理

C#開發微信門戶及應用(23)-微信小店商品管理接口的封裝和測試

C#開發微信門戶及應用(22)-微信小店的開發和使用

C#開發微信門戶及應用(21)-微信企業號的消息和事件的接收處理及解密 

C#開發微信門戶及應用(20)-微信企業號的菜單管理

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

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)--開始使用微信接口

相關文章
相關標籤/搜索