设为首页 加入收藏

TOP

C#开发微信门户及应用(47) - 整合Web API、微信后台管理及前端微信小程序的应用方案(一)
2017-10-10 12:44:44 】 浏览:3355
Tags:开发 门户 应用 整合 Web API 后台 管理 前端 程序 方案

在微信开发中,我一直强调需要建立一个比较统一的Web API接口体系,以便实现数据的集中化,这样我们在常规的Web业务系统,Winform业务系统、微信应用、微信小程序、APP等方面,都可以直接调用基于JSON数据格式的Web API接口,在我之前的几篇随笔中,对这方面都有一定的介绍,本篇继续这个主题,细致深入的阐述如何在接口和源码的基础上整合Web API、微信后台管理及前端微信小程序的应用方案。

1、基于Web API的微信开发框架

首先我们各个业务模块,都应该围绕着Web API进行展开,如果是都部署在同一个服务器或者局域网内的系统,考虑到开发的复杂性,退而求其次,也可以基于同一个数据库进行开发。

总体而言,我们是以Web API为核心进行的应用框架构建的,如下图所示。

 在项目场景中,我们这里的微信后台管理系统,是一个独立维护微信后台数据的管理系统,对于操作微信相关API所需要的接口调用凭证(token),我们可以通过Web API接口获得,这样保证各个平台(如Winform界面、其他Web界面),操作的接口token都保持一致

而后台管理系统,我们通过下面的来了解整体功能,整个后台管理系统使用了Bootstrap的框架进行前端处理。

 

2、整合Web API、微信后台管理及前端微信小程序应用

首先我们在Web API平台上,创建一个AccountController的MVC控制器来提供对应的API接口,实现对账号相关的信息查询,接口访问凭证的获取等业务。

    /// <summary>
    /// 微信公众号、小程序、企业号的账号配置
    /// </summary>
    public class AccountController : BusinessController<Account, AccountInfo>

然后增加获取token的方法

        /// <summary>
        /// 获取公众号/企业号/小程序操作的访问令牌AccessToken
        /// </summary>
        /// <param name="accountId">账号ID</param>
        /// <returns></returns>
        [HttpGet]
        public string GetAccessTokenByAccount(string accountId)
        {
            var result = MyMemoryCache.GetAccessTokenByAccount(accountId);
            return result;
        }

这个token的生成,是存储在内存缓存里面的,定期刷新的,这样我们可以避免频繁的请求接口凭证token,可以统一生成给各个业务系统使用 。

        /// <summary>
        /// 获取公众号(或企业号)操作的访问令牌AccessToken
        /// </summary>
        /// <param name="accountId">账号ID</param>
        /// <returns></returns>
        public static string GetAccessTokenByAccount(string accountId)
        {
            var key = string.Format("{0}_{1}", System.Reflection.MethodBase.GetCurrentMethod().Name, accountId);
            var token = MemoryCacheHelper.GetCacheItem<string>(key, delegate()
            {
                string result = "";
                AccountInfo info = MyMemoryCache.GetAccountByID(accountId);
                if (info != null)
                {
                    if (info.AccountType == AccountType.企业号.ToString())
                    {
                        // 获取微信企业号操作的访问令牌AccessToken
                        ICorpBasicApi baseBLL = new CorpBasicApi();
                        result = baseBLL.GetAccessToken(info.CorpID, info.CorpSecret);
                    }
                    else
                    {
                        //小程序、订阅号、服务器号共享一个逻辑
                        // 获取微信操作的访问令牌AccessToken
                        WHC.Weixin.Interface.IBasicApi baseBLL = new WHC.Weixin.API.BasicApi();
                        result = baseBLL.GetAccessToken(info.AppID, info.AppSecret);
                    }
                }
                return result;
            },
               new TimeSpan(0, 5, 0)//5分钟过期
           );
            
            return token;
        }

解决了token的统一生成和存储外,我们就可以在各个不同的系统中使用这个token 接口获取并使用来操作微信对应接口了。

                //客户端调试和服务端应用统一采用一个AccessToken的方式
                //避免客户端测试的时候,替换更新了服务端的AccessToken,从而导致服务端的AccessToken无效。
                HttpHelper helper = new HttpHelper();
                var tokenWebSiteUrl = string.Format("https://www.youdomain.com/api/Framework/Account/GetAccessTokenByAccount?accountId={0}", accountId);
                var result = helper.GetHtml(tokenWebSiteUrl);
                if(!string.IsNullOrEmpty(result))
                {
                    result = result.Trim('"');
                }
                Console.WriteLine("通过Web API 获取到的Token为:" + result);
                this.token = result;

关于微信后台管理系统,这个是对微信相关数据,如账号配置、菜单、事件、权限控制、业务数据定义等方面的综合管理,通过基于Bootstrap的MVC的技术进行Web端的数据维护,如下界面所示。

系统登录后,通过水平菜单进行后台功能管理。

系统支持多微信账号的接入管理和使用,同时支持订阅号、公众号、企业号、小程序的账号配置。

 

在系统中管理菜单,并通过把菜单提交到服务器上,实现菜单的动态配置和生成,能够为我们系统适应各种的需要,实现灵活的处理。

在微信服务账号的门户上,菜单的表现效果如下所示。

为了更有效管

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C#趋势图(highcharts插件) 下一篇浅谈.net MVC

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目