在微信開發(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ì)的使用介紹谱俭。