企業微信和後臺管理系統的結合管理(2)---創建企業微信應用並配置

来源:https://www.cnblogs.com/wuhuacong/archive/2019/02/28/10445056.html
-Advertisement-
Play Games

當我們需要結合企業微信和業務系統的時候,我們需要建立一個企業微信應用,然後在微信管理後臺中綁定對應參數,這樣可以利用企業微信的服務端API對接相關的功能,包括提交菜單,以及獲取對應的企業微信組織機構、發送消息等常規操作;而業務系統則可以把對應的業務流程和企業微信進行對接,包括消息的推送,以及利用JS... ...


當我們需要結合企業微信和業務系統的時候,我們需要建立一個企業微信應用,然後在微信管理後臺中綁定對應參數,這樣可以利用企業微信的服務端API對接相關的功能,包括提交菜單,以及獲取對應的企業微信組織機構、發送消息等常規操作;而業務系統則可以把對應的業務流程和企業微信進行對接,包括消息的推送,以及利用JSSDK對相關業務數據的展示和處理等。本篇隨筆介紹在利用企業微信前的相關處理步驟,如創建企業應用,綁定企業應用信息,以及相關的業務處理交互等。

1、創建企業微信應用

首先我們需要註冊申請一個企業微信的賬號,註冊申請需要提交相關的企業資質信息,這裡就不再贅述。

有了企業微信賬號後,我們掃碼進入企業微信的管理後臺,在【應用與小程式】模塊中創建一個應用,這個就是我們對應的業務應用了,企業微信可以創建多個不同場景的業務應用,其本身也自帶了很多相關的應用在裡面。

創建應用,我們需要錄入相關的應用信息和Logo圖標信息,如下界面所示。

例如我創建的一個企業微信應用,我們記住它的應用ID和它的秘鑰,這個是一個很重要的信息,需要綁定在微信系統裡面,我們後面對相關的企業微信服務端API介面調用,都需要利用到這些參數的。

 如果我們的企業微信應用設計到支付信息的,需要打開企業支付的應用獲得對應的秘鑰信息的,如下所示。

打開【企業支付】就可以看到支付對應的密鑰了,這個很重要,如我們需要利用企業微信發送紅包或者直接付款給員工的時候,這個就需要用到了,如我前面隨筆介紹的《企業微信支付的發送紅包及相關介面使用

 

2、綁定企業微信相關參數

在企業微信後臺創建對應的應用,並獲得對應的應用ID、密鑰等信息後,我們可以在微信後臺管理系統裡面錄入我們獲得的應用信息了。

一般來說,微信後臺管理系統能夠管理不同類型:公眾號、企業微信、小程式等類型的賬號信息,我們在對應的分類裡面錄入相關的企業應用信息,如下錄入界面所示。

有了這些對應的信息後,我們可以對企業微信應用編輯相關的菜單信息,然後通過介面提交到微信服務端上去,這樣我們的應用就具有了我們自定義的業務菜單了,如下是微信管理系統裡面對菜單的管理。

菜單列表管理界面如下所示。

這樣配置好菜單並設置了相關的處理事件或者對應的JSSDK頁面路徑後,我們就可以提交到服務端上去,馬上就可以看到企業應用的菜單變化了。

以上就是實際應用的菜單界面效果,這樣我們企業應用就有了相關的處理入口了,有些是掃碼事件,有些是自定義事件,有些則是JSSDK編寫的業務入口,如資產錄入、盤點任務等。

 

3、業務處理對接

有了具體的菜單入口,我們需要處理我們入口的處理邏輯了,如果是掃碼,我們需要在後臺進行一定的事件響應,如在資產查看裡面掃碼後發送一個文本信息,供跳轉到相關的查看資產信息界面上去。

在之前隨筆介紹過對這些事件的處理,如《C#開發微信門戶及應用(21)-微信企業號的消息和事件的接收處理及解密》,如果需要瞭解企業微信發送消息的過程,可以參考下《企業微信發送應用消息的實現》隨筆的介紹即可。

例如對於掃碼入口,企業微信的後臺對這些事件進行捕捉,並匹配到對應的處理模塊上去處理,如下代碼所示。

        /// <summary>
        /// 掃碼推事件且彈出“消息接收中”提示框的事件推送的處理
        /// </summary>
        /// <param name="info">掃描信息</param>
        /// <returns></returns>
        public string HandleEventScancodeWaitmsg(RequestEventScancodeWaitmsg info, AccountInfo accountInfo)
        {
            string result = "";
            try
            {
                var handler = AutoFactory.Instatnce.Container.Resolve<IQRCodeHandler>();
                if (handler != null)
                {
                    result = handler.HandleScancodeWaitmsg(info, accountInfo);
                }
            }
            catch (Exception ex)
            {
                LogHelper.Error(ex);
            }
            return result;
        }

通過 AutoFactory.Instatnce.Container.Resolve<IQRCodeHandler>(); 我們可以看到業務的流程調整到了IOC的一個配置處理模塊上去了,這裡利用了Autofac的配置信息自動載入對應的處理模塊。

對於掃碼處理邏輯,我們顯示根據資產信息,構建一個文本消息發給企業微信客戶端,然後引導用戶打開響應的連接就可以跳轉到對應的資產信息查看界面上去了,如下所示。

        /// <summary>
        /// 處理掃碼結果
        /// </summary>
        /// <param name="info"></param>
        /// <returns></returns>
        private string HandleScanResult(RequestEventScanCode info, AccountInfo accountInfo)
        {
            ResponseText response = new ResponseText(info);
            if (info.ScanCodeInfo != null)
            {
                response.Content = string.Format("您的信息為:{0},可以結合後臺進行數據查詢。", info.ScanCodeInfo.ScanResult);

                var isUrl = ValidateUtil.IsURL(info.ScanCodeInfo.ScanResult);
                if (!isUrl)
                {
                    string assetcode = info.ScanCodeInfo.ScanResult;
                    if (!string.IsNullOrEmpty(assetcode))
                    {
                        response.Content = ConvertAssetInfo(info, accountInfo, assetcode);
                    }
                    else
                    {
                        response.Content = string.Format("掃碼內容為空。");
                    }
                }
            }

            var result = response.ToXml();
            return result;
        }

        /// <summary>
        /// 轉換資產信息為文本消息
        /// </summary>
        /// <returns></returns>
        private string ConvertAssetInfo(RequestEventScanCode info, AccountInfo accountInfo, string assetcode)
        {
            StringBuilder sb = new StringBuilder();
            BLLFactory<Asset>.Instance.SetConfigName("workflow");
            var assetInfo = BLLFactory<Asset>.Instance.FindByCode(assetcode);
            if (assetInfo != null)
            {
                //~資產代碼~、資產名稱、管理部門、使用部門、使用人、存放地點、數量、資產動態、在用類型
                sb.AppendFormat("資產代碼:{0}", assetInfo.Code).Append("\n");
                sb.AppendFormat("資產名稱:{0}", assetInfo.Name).Append("\n");
                sb.AppendFormat("管理部門:{0}", assetInfo.ChargeDept).Append("\n");
                sb.AppendFormat("使用部門:{0}", assetInfo.CurrDept).Append("\n");
                sb.AppendFormat("使用人:{0}", assetInfo.UsePerson).Append("\n");
                sb.AppendFormat("存放地點:{0}", assetInfo.KeepAddr).Append("\n");
                sb.AppendFormat("數量:{0}", assetInfo.Qty).Append("\n");
                sb.AppendFormat("資產動態:{0}", assetInfo.Status).Append("\n");
                sb.AppendFormat("在用類型:{0}", assetInfo.UseType).Append("\n");

                sb.AppendFormat("<a href='{0}/QyH5/AssetInfo?code={1}' >點擊查看詳細信息</a>", WebsiteDomain, assetInfo.Code);
            }
            else
            {
                sb.AppendFormat("資產代碼【{0}】不存在。", assetcode).Append("\n");
                sb.AppendFormat("<a href='{0}/QyH5/Asset?devicecode={1}' >點擊添加設備信息</a>", WebsiteDomain, assetcode);
            }

            return sb.ToString();
        }   

其他的部分入口是通過編寫JSSDK頁面的方式實現業務數據的處理的,在JSSDK編寫裡面,我們有時候需要獲取當前登錄的用戶身份信息,如企業微信的userid,那麼我們就可以通過跳轉的方式獲取code,然後根據對應的code解析為userid即可。

            //獲取企業微信賬號信息
            var accountInfo = GetAccount(ConfigData.CorpAccountNo);

            //如果傳入了userid,使用傳入的參數
            if (string.IsNullOrEmpty(userid))
            {
                //通過重定向的code獲取對應的UserId
                userid = GetUserId(accountInfo.AppID, accountInfo.AppSecret);
            }

而為了避免反覆的解析code參數導致出錯(code只能被用一次,後續再用會出錯的),那麼我們可以把用戶的userid存放在session裡面,這樣判斷如果這個Session不存在了,我們再解析code就沒問題了。

        /// <summary>
        /// 根據當前的Code獲取對應的openid(獲取獲取openid的參數)
        /// </summary>
        /// <param name="accountInfo">登陸賬號信息</param>
        /// <returns></returns>
        protected virtual string GetUserId(string appid, string appsecret)
        {
            string userId = Request.QueryString["userid"];
            if (string.IsNullOrEmpty(userId))
            {
                var user_id = Session["user_id"];
                if (user_id != null)
                {
                    userId = user_id.ToString();
                }
                else
                {
                    //如果沒有傳遞userId,那麼就根據code參數獲取userId
                    string code = Request.QueryString["code"];
                    if (!string.IsNullOrEmpty(code))
                    {
                        string accessToken = baseApi.GetAccessToken(appid, appsecret);
                        var result = baseApi.GetUserInfo(accessToken, code);
                        if (result != null)
                        {
                            userId = result.UserId;
                            Session["user_id"] = userId;//存儲在Session
                        }
                    }
                }
            }
            return userId;
        }

下麵是一個資產信息錄入的界面效果,利用JSSDK進行編寫的頁面。

其中的一些選擇框,我們可以填寫相關的字典數據,或者列表信息供選擇。

這些數據最終可以提交到業務管理系統裡面,從而實現了企業微信和業務管理系統的數據流對接。

還有一個如盤點任務一樣的工作,我們可以交給企業微信端進行處理,通過手機進行移動端的數據處理,更加方便。

以上就是企業微信和業務管理系統的交互過程的一部分,我們具體可以根據自己的業務需要,擴展很多相關的處理頁面。

通過整合企業微信和業務系統的數據流,我們可以更加方便的瞭解企業業務信息,也更加方便的利用手機終端進行一些快捷的查詢或者處理業務操作。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1 使用 WebShellKillerTool 進行網站文件掃描 能抓出一般後臺漏洞文件 2 控制面板-->文件夾選項-->顯示隱藏文件-->上面兩個如果是勾選狀態要去除 否則 有的文件會偽裝未受保護的系統文件 而不能被查看 3 檢查global 文件是否被篡改 4 檢查網站JS是否被註入特殊文件 ...
  • 1.前言 本篇文章通過ASP.NET Core的EPPlus包去操作Excel(導入導出),其使用原理與NPOI類似,導出Excel的時候不需要電腦上安裝office,非常好用 2.使用 新建一個ASP.NET Core Web應用程式(模型視圖控制器),還有一個類庫,SDK2.1版本,解決方案如下 ...
  • 在一些場合裡面,我們需要對一些記錄進行顏色標註處理,以標記記錄的信息重要性或者進行類別區分,如在客戶關係管理系統裡面,我們需要對客戶信息進行不同顏色的標註,方便對不同類別的管理,畢竟顏色區分還是比較直觀快速的一種。本隨筆介紹在我們的CRM客戶關係管理系統中,對客戶信息的標註處理和顯示區分的實現。 ...
  • 一. 基本數據 每個EF上下文實例都有一個 ChangeTracker(更改跟蹤器),它負責跟蹤需要寫入資料庫的更改。 當更改實體類的實例時(修改屬性,刪除實例,新建實例等),這些更改會記錄在 ChangeTracker 中,然後在調用 SaveChanges 時被寫入資料庫。 此資料庫提供程式負責 ...
  • 效果展示 TCP Transmission Control Protocol 傳輸控制協議 TCP是面向連接的流模式(俗稱:網路流)。即傳輸數據之前源端和終端建立可靠的連接,保證數據傳輸的正確性。 流模式:由於建立連接,收到的數據都是同一主機發送的,所有可以發送端Write一次,接收端Read多次; ...
  • 1 private void ShowForm(Form Indexform) 2 { 3 Form1 form1 = new Form1(); 4 form1 .TopLevel = false; 5 form1 .Parent = Indexform; 6 form1 .BringToFront... ...
  • 地址鏈接:https://pan.baidu.com/s/1AW9bLHM1sZ8E_0SFWFD4ww 提取碼:ze9p ...
  • 原文: lesson 1 Excuse me! Excuse me! Yes? Is this your handbag? Pardon? Is this your handbag? Yes it is.Thank you very much! 知識: Pardon? 原句:I beg your p ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...