C#開發(fā)微信門戶及應(yīng)用(47) - 整合Web API畏铆、微信后臺(tái)管理及前端微信小程序的應(yīng)用方案

在微信開發(fā)中,我一直強(qiáng)調(diào)需要建立一個(gè)比較統(tǒng)一的Web API接口體系吉殃,以便實(shí)現(xiàn)數(shù)據(jù)的集中化辞居,這樣我們?cè)诔R?guī)的Web業(yè)務(wù)系統(tǒng)楷怒,Winform業(yè)務(wù)系統(tǒng)、微信應(yīng)用瓦灶、微信小程序鸠删、APP等方面,都可以直接調(diào)用基于JSON數(shù)據(jù)格式的Web API接口贼陶,在我之前的幾篇隨筆中刃泡,對(duì)這方面都有一定的介紹,本篇繼續(xù)這個(gè)主題碉怔,細(xì)致深入的闡述如何在接口和源碼的基礎(chǔ)上整合Web API烘贴、微信后臺(tái)管理及前端微信小程序的應(yīng)用方案。

1撮胧、基于Web API的微信開發(fā)框架

首先我們各個(gè)業(yè)務(wù)模塊桨踪,都應(yīng)該圍繞著Web API進(jìn)行展開,如果是都部署在同一個(gè)服務(wù)器或者局域網(wǎng)內(nèi)的系統(tǒng)芹啥,考慮到開發(fā)的復(fù)雜性锻离,退而求其次,也可以基于同一個(gè)數(shù)據(jù)庫進(jìn)行開發(fā)墓怀。
總體而言汽纠,我們是以Web API為核心進(jìn)行的應(yīng)用框架構(gòu)建的,如下圖所示傀履。





在項(xiàng)目場景中虱朵,我們這里的微信后臺(tái)管理系統(tǒng),是一個(gè)獨(dú)立維護(hù)微信后臺(tái)數(shù)據(jù)的管理系統(tǒng)钓账,對(duì)于操作微信相關(guān)API所需要的接口調(diào)用憑證(token)卧秘,我們可以通過Web API接口獲得,這樣保證各個(gè)平臺(tái)(如Winform界面官扣、其他Web界面)翅敌,操作的接口token都保持一致



而后臺(tái)管理系統(tǒng),我們通過下面的來了解整體功能惕蹄,整個(gè)后臺(tái)管理系統(tǒng)使用了Bootstrap的框架進(jìn)行前端處理蚯涮。

2、整合Web API卖陵、微信后臺(tái)管理及前端微信小程序應(yīng)用

首先我們?cè)赪eb API平臺(tái)上遭顶,創(chuàng)建一個(gè)AccountController的MVC控制器來提供對(duì)應(yīng)的API接口,實(shí)現(xiàn)對(duì)賬號(hào)相關(guān)的信息查詢泪蔫,接口訪問憑證的獲取等業(yè)務(wù)棒旗。

    /// <summary>
    /// 微信公眾號(hào)、小程序、企業(yè)號(hào)的賬號(hào)配置
    /// </summary>
    public class AccountController : BusinessController<Account, AccountInfo>

然后增加獲取token的方法

        /// <summary>
        /// 獲取公眾號(hào)/企業(yè)號(hào)/小程序操作的訪問令牌AccessToken
        /// </summary>
        /// <param name="accountId">賬號(hào)ID</param>
        /// <returns></returns>
        [HttpGet]
        public string GetAccessTokenByAccount(string accountId)
        {
            var result = MyMemoryCache.GetAccessTokenByAccount(accountId);
            return result;
        }

這個(gè)token的生成铣揉,是存儲(chǔ)在內(nèi)存緩存里面的饶深,定期刷新的,這樣我們可以避免頻繁的請(qǐng)求接口憑證token逛拱,可以統(tǒng)一生成給各個(gè)業(yè)務(wù)系統(tǒng)使用 敌厘。

        /// <summary>
        /// 獲取公眾號(hào)(或企業(yè)號(hào))操作的訪問令牌AccessToken
        /// </summary>
        /// <param name="accountId">賬號(hào)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.企業(yè)號(hào).ToString())
                    {
                        // 獲取微信企業(yè)號(hào)操作的訪問令牌AccessToken
                        ICorpBasicApi baseBLL = new CorpBasicApi();
                        result = baseBLL.GetAccessToken(info.CorpID, info.CorpSecret);
                    }
                    else
                    {
                        //小程序、訂閱號(hào)朽合、服務(wù)器號(hào)共享一個(gè)邏輯
                        // 獲取微信操作的訪問令牌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的統(tǒng)一生成和存儲(chǔ)外俱两,我們就可以在各個(gè)不同的系統(tǒng)中使用這個(gè)token 接口獲取并使用來操作微信對(duì)應(yīng)接口了。

    //客戶端調(diào)試和服務(wù)端應(yīng)用統(tǒng)一采用一個(gè)AccessToken的方式
    //避免客戶端測試的時(shí)候曹步,替換更新了服務(wù)端的AccessToken宪彩,從而導(dǎo)致服務(wù)端的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;

關(guān)于微信后臺(tái)管理系統(tǒng)讲婚,這個(gè)是對(duì)微信相關(guān)數(shù)據(jù)尿孔,如賬號(hào)配置、菜單磺樱、事件、權(quán)限控制婆咸、業(yè)務(wù)數(shù)據(jù)定義等方面的綜合管理竹捉,通過基于Bootstrap的MVC的技術(shù)進(jìn)行Web端的數(shù)據(jù)維護(hù),如下界面所示尚骄。
系統(tǒng)登錄后块差,通過水平菜單進(jìn)行后臺(tái)功能管理。



系統(tǒng)支持多微信賬號(hào)的接入管理和使用倔丈,同時(shí)支持訂閱號(hào)憨闰、公眾號(hào)、企業(yè)號(hào)需五、小程序的賬號(hào)配置鹉动。



在系統(tǒng)中管理菜單,并通過把菜單提交到服務(wù)器上宏邮,實(shí)現(xiàn)菜單的動(dòng)態(tài)配置和生成泽示,能夠?yàn)槲覀兿到y(tǒng)適應(yīng)各種的需要,實(shí)現(xiàn)靈活的處理蜜氨。

在微信服務(wù)賬號(hào)的門戶上械筛,菜單的表現(xiàn)效果如下所示。

為了更有效管理訂閱用戶以及分組信息飒炎,我們可以從微信服務(wù)器上獲取相關(guān)的信息埋哟,供我們了解關(guān)注的用戶信息,也可以為后續(xù)的群發(fā)消息做準(zhǔn)備郎汪。


基于Bootstrap的Web前端赤赊,我們處理H5頁面起來也是得心應(yīng)手闯狱,非常方便。
在我前面的一些案例中砍鸠,都利用了We UI樣式來進(jìn)行很多微信H5頁面的功能設(shè)計(jì)扩氢,包括微信支付頁面、簽到頁面等等爷辱。如微信支付頁面如下所示:



以及簽到頁面效果如下所示录豺。

基于微信的H5頁面,我們后臺(tái)管理系統(tǒng)整合了一個(gè)實(shí)際的設(shè)備維修案例的微信應(yīng)用場景饭弓,該需求主要圍繞固定資產(chǎn)(如醫(yī)療設(shè)備)的微信應(yīng)用展開双饥,包括錄入及查詢資產(chǎn)信息、資產(chǎn)盤點(diǎn)弟断、設(shè)備的維修保養(yǎng)咏花、日常巡檢、維修阀趴、計(jì)量檢測等事務(wù)昏翰。
整個(gè)案例微信端應(yīng)用采用的是H5頁面以及微信的JSDK進(jìn)行相關(guān)的接口開發(fā),符合微信的界面風(fēng)格刘急。后端管理就是本后臺(tái)管理系統(tǒng)棚菊。




設(shè)備盤點(diǎn)和設(shè)備計(jì)量如下所示:



預(yù)防性維護(hù)和設(shè)備計(jì)量界面如下所示。

3叔汁、微信小程序的后臺(tái)和前端的應(yīng)用整合

例如對(duì)于我們開發(fā)的《公司企業(yè)展示》小程序统求,適合展示公司信息,以及公司的產(chǎn)品信息据块,在這個(gè)應(yīng)用中我們是整合了后臺(tái)管理系統(tǒng)和微信前端開發(fā)實(shí)現(xiàn)的码邻。
我們?cè)谖⑿藕笈_(tái)管理系統(tǒng)中,實(shí)現(xiàn)商品數(shù)據(jù)的后臺(tái)管理另假,數(shù)據(jù)數(shù)據(jù)我們分為幾種類型像屋,方便在前端界面展示。


商品編輯界面包括對(duì)基礎(chǔ)信息的修改边篮、封面和Banner圖片的維護(hù)开睡、以及商品多個(gè)展示圖片、商品詳細(xì)介紹的內(nèi)容維護(hù)苟耻,如下界面所示篇恒。

除了商品的封面圖片以及Banne圖片外,我們?cè)谛〕绦虻纳唐吩敿?xì)界面里面凶杖,需要在頂端展示多個(gè)可以滾動(dòng)的圖片效果胁艰,那么我們需要維護(hù)商品的圖片,如下界面所示。

當(dāng)然商品的詳細(xì)信息需要一個(gè)富文本的編輯器來進(jìn)行圖片文字的編輯處理腾么,如下界面所示奈梳。

上面介紹了管理后臺(tái)的數(shù)據(jù)維護(hù),我們就是基于上面的數(shù)據(jù)模型解虱,在小程序上實(shí)現(xiàn)商品數(shù)據(jù)的展示的攘须。
下圖是小程序的商品展示首圖,其中包括了頂部Banner欄目殴泰、中間的商品分類于宙、底部的商品信息展示幾部分。

而詳細(xì)部分內(nèi)容悍汛,則是需要滾動(dòng)展示商品的多個(gè)圖片捞魁,另外還需要展示詳細(xì)的HTML內(nèi)容,HTML內(nèi)容的展示使用富文本轉(zhuǎn)化插件wxParse即可實(shí)現(xiàn)离咐,這部分在隨筆《在微信小程序中使用富文本轉(zhuǎn)化插件wxParse》有詳細(xì)的使用介紹谱俭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市宵蛀,隨后出現(xiàn)的幾起案子昆著,更是在濱河造成了極大的恐慌,老刑警劉巖术陶,帶你破解...
    沈念sama閱讀 211,948評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件凑懂,死亡現(xiàn)場離奇詭異,居然都是意外死亡瞳别,警方通過查閱死者的電腦和手機(jī)征候,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,371評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門杭攻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來祟敛,“玉大人,你說我怎么就攤上這事兆解」萏” “怎么了?”我有些...
    開封第一講書人閱讀 157,490評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵锅睛,是天一觀的道長埠巨。 經(jīng)常有香客問我,道長现拒,這世上最難降的妖魔是什么辣垒? 我笑而不...
    開封第一講書人閱讀 56,521評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮印蔬,結(jié)果婚禮上勋桶,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好例驹,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,627評(píng)論 6 386
  • 文/花漫 我一把揭開白布捐韩。 她就那樣靜靜地躺著,像睡著了一般鹃锈。 火紅的嫁衣襯著肌膚如雪荤胁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,842評(píng)論 1 290
  • 那天屎债,我揣著相機(jī)與錄音仅政,去河邊找鬼。 笑死扔茅,一個(gè)胖子當(dāng)著我的面吹牛已旧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播召娜,決...
    沈念sama閱讀 38,997評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼运褪,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了玖瘸?” 一聲冷哼從身側(cè)響起秸讹,我...
    開封第一講書人閱讀 37,741評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎雅倒,沒想到半個(gè)月后璃诀,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,203評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔑匣,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,534評(píng)論 2 327
  • 正文 我和宋清朗相戀三年劣欢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裁良。...
    茶點(diǎn)故事閱讀 38,673評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡凿将,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出价脾,到底是詐尸還是另有隱情牧抵,我是刑警寧澤,帶...
    沈念sama閱讀 34,339評(píng)論 4 330
  • 正文 年R本政府宣布侨把,位于F島的核電站犀变,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏秋柄。R本人自食惡果不足惜获枝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,955評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望骇笔。 院中可真熱鬧省店,春花似錦机隙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,770評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至谎脯,卻和暖如春葱跋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背源梭。 一陣腳步聲響...
    開封第一講書人閱讀 32,000評(píng)論 1 266
  • 我被黑心中介騙來泰國打工娱俺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人废麻。 一個(gè)月前我還...
    沈念sama閱讀 46,394評(píng)論 2 360
  • 正文 我出身青樓荠卷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烛愧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子油宜,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,562評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容