企业微信和后台管理系统的结合管理(2)---创建企业微信应用并配置

当我们需要结合企业微信和业务系统的时候,我们需要建立一个企业微信应用,然后在微信管理后台中绑定对应参数,这样可以利用企业微信的服务端API对接相关的功能,包括提交菜单,以及获取对应的企业微信组织机构、发送消息等常规操作;而业务系统则可以把对应的业务流程和企业微信进行对接,包括消息的推送,以及利用JSSDK对相关业务数据的展示和处理等。本篇随笔介绍在利用企业微信前的相关处理步骤,如创建企业应用,绑定企业应用信息,以及相关的业务处理交互等。

1、创建企业微信应用

首先我们需要注册申请一个企业微信的账号,注册申请需要提交相关的企业资质信息,这里就不再赘述。

有了企业微信账号后,我们扫码进入企业微信的管理后台,在【应用与小程序】模块中创建一个应用,这个就是我们对应的业务应用了,企业微信可以创建多个不同场景的业务应用,其本身也自带了很多相关的应用在里面。

image

创建应用,我们需要录入相关的应用信息和Logo图标信息,如下界面所示。

image

例如我创建的一个企业微信应用,我们记住它的应用ID和它的秘钥,这个是一个很重要的信息,需要绑定在微信系统里面,我们后面对相关的企业微信服务端API接口调用,都需要利用到这些参数的。

image

如果我们的企业微信应用设计到支付信息的,需要打开企业支付的应用获得对应的秘钥信息的,如下所示。

image

打开【企业支付】就可以看到支付对应的密钥了,这个很重要,如我们需要利用企业微信发送红包或者直接付款给员工的时候,这个就需要用到了,如我前面随笔介绍的《企业微信支付的发送红包及相关接口使用

image

2、绑定企业微信相关参数

在企业微信后台创建对应的应用,并获得对应的应用ID、密钥等信息后,我们可以在微信后台管理系统里面录入我们获得的应用信息了。

image

一般来说,微信后台管理系统能够管理不同类型:公众号、企业微信、小程序等类型的账号信息,我们在对应的分类里面录入相关的企业应用信息,如下录入界面所示。

image

有了这些对应的信息后,我们可以对企业微信应用编辑相关的菜单信息,然后通过接口提交到微信服务端上去,这样我们的应用就具有了我们自定义的业务菜单了,如下是微信管理系统里面对菜单的管理。

image

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

image

这样配置好菜单并设置了相关的处理事件或者对应的JSSDK页面路径后,我们就可以提交到服务端上去,马上就可以看到企业应用的菜单变化了。

image

以上就是实际应用的菜单界面效果,这样我们企业应用就有了相关的处理入口了,有些是扫码事件,有些是自定义事件,有些则是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的配置信息自动加载对应的处理模块。

image

对于扫码处理逻辑,我们显示根据资产信息,构建一个文本消息发给企业微信客户端,然后引导用户打开响应的连接就可以跳转到对应的资产信息查看界面上去了,如下所示。

        /// <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();
        }   
image

其他的部分入口是通过编写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进行编写的页面。

image

其中的一些选择框,我们可以填写相关的字典数据,或者列表信息供选择。

image

这些数据最终可以提交到业务管理系统里面,从而实现了企业微信和业务管理系统的数据流对接。

还有一个如盘点任务一样的工作,我们可以交给企业微信端进行处理,通过手机进行移动端的数据处理,更加方便。

image
image

以上就是企业微信和业务管理系统的交互过程的一部分,我们具体可以根据自己的业务需要,扩展很多相关的处理页面。

通过整合企业微信和业务系统的数据流,我们可以更加方便的了解企业业务信息,也更加方便的利用手机终端进行一些快捷的查询或者处理业务操作。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容