首頁  >  文章  >  微信小程式  >  C#開發微信入口網站及應用(16)-微信企業號的配置與使用

C#開發微信入口網站及應用(16)-微信企業號的配置與使用

高洛峰
高洛峰原創
2017-02-18 09:18:161585瀏覽

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

1、微信企業號的註冊和登陸

企業號是繼公眾號、訂閱號的另外一種微信類型,它主要是面對企業的。企業號是微信為企業客戶提供的行動應用入口。可以幫助企業建立員工、上下游供應鏈與企業 IT 系統間的連結。利用 企業號 ,企業或第三方合作夥伴可以幫助企業快速、低成本的實現高品質的行動輕應用,實現生產、管理、協作、營運的 行動化 。

個人覺得企業號最大的亮點是可以不限數量的消息發送,也就是可以在企業員工之間暢通交流。相對於公眾號和訂閱號,發送訊息的謹慎程度,微信企業號可謂給人眼前一亮的感覺。不過微信企業號是需要內部建立好通訊錄,關注者需要匹配通訊錄的微信號、郵箱、電話號碼任一個通過才可以關注,也就是可以防止其他外來人員的自由關注了,另外如果為了安全考慮,還可以設定二次驗證,也就是一個審核過程。

企業號的認證和公眾號一樣,需要提供相關的企業資質文件,並且認證每年都要收取費用,否則可能有人員和功能的一些限制。覺得微信真是想著方法賺錢,目前已有的收費模式有,訂閱號碼、公眾號、企業號、開放平台,好像都有認證收費的了,而且微信小店也還需要收2萬的押金,一切都是錢呀。

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

對於企業開通企業號並開始使用需要四步驟

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

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

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

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

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

C#开发微信门户及应用(16)-微信企业号的配置和使用  C#开发微信门户及应用(16)-微信企业号的配置和使用

登入後我們就可以看到對應的電腦端的管理介面了。

C#开发微信门户及应用(16)-微信企业号的配置和使用

2、設定開發回調模式

如果開發過微信公眾號,那麼我們就知道,如果需要在微信伺服器和網站伺服器之間建立連接關係,實現訊息的轉發和處理,那麼就應該設置一個回調模式,需要配置好相關的參數。然後在自己 網站伺服器裡面建立一個處理微信伺服器訊息的入口。

C#开发微信门户及应用(16)-微信企业号的配置和使用  

進入設定後,我們需要修改相關的URL、Token、EncodingAESKey等參數,主要是URL,這個就是和公眾號的入口處理一樣的,需要我們發佈到網站伺服器上的處理入口。

Token和AESKey可以根據提示動態產生一個即可,AESKey好像必須是23位的,所以這個一般是讓它自己產生的,這個主要用來加密解密使用的。

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

1)URL是企業應用程式接收企業號推播請求的存取協定和位址,支援http或https協定。

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

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

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

C#开发微信门户及应用(16)-微信企业号的配置和使用

我公司的企業號配置後的介面如下圖所示。

C#开发微信门户及应用(16)-微信企业号的配置和使用

 這個URL裡面指向的頁面功能,需要對資料進行解析並傳回給微信伺服器,因此我們需要在伺服器上預先部署好這個處理功能入口。

除了上面的幾個函數,還有一個CorpID的參數需要使用,我們可以在後台主介面-設定裡面查看到。

C#开发微信门户及应用(16)-微信企业号的配置和使用

然後我們為了方便網站後台使用,我們和公眾號的配置一樣,把它放到了Web.Config裡面,如下所示。

C#开发微信门户及应用(16)-微信企业号的配置和使用

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

前面介紹了幾個配置項,需要在回調頁裡面使用的,本小節繼續介紹如何實現企業號資訊的回發,使之通過回調測試的操作。

由於回調測試的資料是透過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#開發微信入口網站及應用(16)-微信企業號的設定與使用 相關文章請關注PHP中文網!


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