微信應(yīng)用如火如荼,許多公司都希望搭上資訊快車,這個是一個商機,也是一個技術(shù)的方向,因此,有空研究下、學(xué)習(xí)下微信的相關(guān)開發(fā),也就成為日常計劃的重要事情之一了。本系列文章希望從一個循序漸進的角度上,全面介紹微信的相關(guān)開發(fā)過程和相關(guān)經(jīng)驗總結(jié),希望給大家了解一下相關(guān)的開發(fā)歷程。本隨筆主要針對微信開發(fā)過程的前期準備和一些初始的工作的介紹。
在寫下本文的之前一周時間裡,我主要是參考一些介紹文章以及微信公眾平臺的相關(guān)接口說明,並結(jié)合C#的代碼開發(fā),整理了自己公司的門戶界面,實現(xiàn)了微信工作號的初步使用者互動和資訊展示工作,隨著工作的進一步開展,越來越多的功能可能加入,並希望從應(yīng)用角度上擴展微信的接口,從而實現(xiàn)我對微信接口的技術(shù)探秘和了解過程。
1、微信帳號
要開發(fā)使用微信的平臺API,就需要到微信的公眾平臺(https://mp.weixin.qq.com/)去註冊,擁有一個服務(wù)號碼或訂閱號,服務(wù)號碼主要面對企業(yè)和組織,訂閱號碼主要面向組織和個人,他們之間有一定的差異,根據(jù)不同的需要自己申請對應(yīng)的帳號即可。
為了使用一些高級的接口,你可能需要擁有服務(wù)號和高級的認證。帳號註冊過程,需要下載一個申請表格,列印並蓋公章,另外還需要申請人拿著身分證拍照(有點怪異,呵呵),然後上傳到伺服器進行審核,一般很快就能取得核準。
我以公司名義申請了服務(wù)號,帳號註冊後,會在主界面上顯示你的相關(guān)信息,另外給你申請一個二維碼的東西,掃描二維碼即可進入公司的微信關(guān)注確認對話框,非常方便。如下就是我申請後的公司帳號二維碼,可以直接使用掃描。
2、微信選單定義
微信有兩種方式的選單定義,一種是編輯模式,一種是開發(fā)模式,兩者互斥,也就是說,一旦我們採用了開發(fā)模式,就不能使用編輯模式了,反過來也一樣。編輯下的選單,其實也是可以管理的,但微信不支持,覺得很不爽。
一般情況下,如果我們剛剛申請了微信號碼,可以使用編輯選單測試一下,根據(jù)說明編輯一些選單試試。雖然微信說24小時內(nèi)更新,不過一般很快,最快可能一兩分鐘就更新了,感覺還是不錯的。
使用開發(fā)者模式,你需要根據(jù)微信的要求,在伺服器上放置一個頁面鏈接,使用C#開發(fā)的,可以採用***.ashx的命名方式,使用Asp.NET的一般處理程序即可,不需要使用普通的頁面。
使用開發(fā)模式的選單,也就是可以呼叫微信API進行選單建立的工作,對於呼叫微信的API(微信有很多API可以呼叫),我們需要知道,有幾個參數(shù)的重要性,所以在開發(fā)模式打開的時候,會給你列出這些參數(shù),如下圖。
?3、接入微信的鏈接處理
上面說了,你申請開發(fā)模式對菜單或?qū)ζ渌鸄PI的調(diào)用,你需要順利通過接入微信的測試,也就是確認你填寫的鏈接存在並能順利經(jīng)過微信的回調(diào)測試。微信提供了一個PHP的頁面處理例子,如果我們是C#開發(fā)的呢,可以搜一下就會得到答案,我的處理方式如下所示。
創(chuàng)建一個一般處理程序,然後在其處理頁裡面增加一個處理邏輯,如果是非POST方式的內(nèi)容,就是表示微信進行的Get測試,你需要增加一些處理邏輯,把它給你的內(nèi)容傳回去即可,如果是POST方式的,就是微信伺服器對介面訊息的請求操作了,後面介紹。
????///?<summary> ????///?微信接口。統(tǒng)一接收并處理信息的入口。????///?</summary> ????public?class?wxapi?:?IHttpHandler ????{????????public?void?ProcessRequest(HttpContext?context) ????????{????????????string?postString?=?string.Empty;????????????if?(HttpContext.Current.Request.HttpMethod.ToUpper()?==?"POST") ????????????{????????????????using?(Stream?stream?=?HttpContext.Current.Request.InputStream) ????????????????{ ????????????????????Byte[]?postBytes?=?new?Byte[stream.Length]; ????????????????????stream.Read(postBytes,?0,?(Int32)stream.Length); ????????????????????postString?=?Encoding.UTF8.GetString(postBytes); ????????????????}????????????????if?(!string.IsNullOrEmpty(postString)) ????????????????{ ????????????????????Execute(postString); ????????????????} ????????????}????????????else ????????????{????????????????Auth();?//微信接入的測試????????????} ????????}
一般來說,Auth函數(shù)裡面,就是要對相關(guān)的參數(shù)進行獲取,然後進行處理返回給微信伺服器。
????????????string?token?=?"****";//你申請的時候填寫的Token ????????????string?echoString?=?HttpContext.Current.Request.QueryString["echoStr"];????????????string?signature?=?HttpContext.Current.Request.QueryString["signature"];????????????string?timestamp?=?HttpContext.Current.Request.QueryString["timestamp"];????????????string?nonce?=?HttpContext.Current.Request.QueryString["nonce"];
完整的Author函數(shù)程式碼如下所示,其中我把業(yè)務(wù)邏輯進行進一步抽取到了一個新的類別裡面,方便業(yè)務(wù)邏輯的管理。
????????///?<summary> ????????///?成為開發(fā)者的第一步,驗證并相應(yīng)服務(wù)器的數(shù)據(jù)????????///?</summary> ????????private?void?Auth() ????????{????????????string?token?=?ConfigurationManager.AppSettings["WeixinToken"];//從配置文件獲取Token ????????????if?(string.IsNullOrEmpty(token)) ????????????{ ????????????????LogTextHelper.Error(string.Format("WeixinToken?配置項沒有配置!")); ????????????}????????????string?echoString?=?HttpContext.Current.Request.QueryString["echoStr"];????????????string?signature?=?HttpContext.Current.Request.QueryString["signature"];????????????string?timestamp?=?HttpContext.Current.Request.QueryString["timestamp"];????????????string?nonce?=?HttpContext.Current.Request.QueryString["nonce"];????????????if?(new?BasicApi().CheckSignature(token,?signature,?timestamp,?nonce)) ????????????{????????????????if?(!string.IsNullOrEmpty(echoString)) ????????????????{ ????????????????????HttpContext.Current.Response.Write(echoString); ????????????????????HttpContext.Current.Response.End(); ????????????????} ????????????} ????????}
而對微信參數(shù)的簽章並回傳的操作CheckSignature,程式碼如下圖所示。
????????///?<summary> ????????///?驗證微信簽名????????///?</summary> ????????public?bool?CheckSignature(string?token,?string?signature,?string?timestamp,?string?nonce) ????????{????????????string[]?ArrTmp?=?{?token,?timestamp,?nonce?}; ????????????Array.Sort(ArrTmp);????????????string?tmpStr?=?string.Join("",?ArrTmp); ????????????tmpStr?=?FormsAuthentication.HashPasswordForStoringInConfigFile(tmpStr,?"SHA1"); ????????????tmpStr?=?tmpStr.ToLower();????????????if?(tmpStr?==?signature) ????????????{????????????????return?true; ????????????}????????????else ????????????{????????????????return?false; ????????????} ????????}
4、使用開發(fā)方式建立選單
一旦你順利通過微信的認證,那麼它就讓你以開發(fā)方式呼叫它的API,並且可以隨意創(chuàng)建你的選單了。
創(chuàng)建選單的方式,你可以透過下面的位置進入到他的API處理介面裡面。
進入後,你會發(fā)現(xiàn)微信把很多訊息的處理,分門別類放到不同的分類裡面了。
其實我們現(xiàn)在初步要做的就是如何看看,使用程式碼方式呼叫建立選單,進入選單的API偵錯介面裡面。
你會發(fā)現(xiàn)裡面還需要輸入一個Access_Token的東西,這個是一個會話身份認證,因此你還需要到介面裡面去找這個如何創(chuàng)建的。下面圖的兩個紅色部分,就是我們開始的時候,微信提示我們「開發(fā)者憑證」的兩個關(guān)鍵參數(shù)。
弄完這些,你就可以根據(jù)獲得的Access_Token進行選單的創(chuàng)建工作了,根據(jù)選單的定義,它分為幾類,可以分為URL方式(View),事件方式(Click)。
click:用戶點擊click類型按鈕後,微信伺服器會透過訊息介面推播訊息類型為event 的結(jié)構(gòu)給開發(fā)者(參考訊息介面指南),並且?guī)习粹o中開發(fā)者填寫的key值,開發(fā)者可以透過自訂的key值與使用者互動;
view:使用者點擊view類型按鈕後,微信用戶端將會開啟開發(fā)者在按鈕中填寫的url值 (即網(wǎng)頁連結(jié)),達到開啟網(wǎng)頁的目的,建議與網(wǎng)頁授權(quán)取得使用者基本資訊介面結(jié)合,取得使用者的登入個人資訊。
?
4、我創(chuàng)建的菜單案例
在隨筆的開始,我公佈了一個二維碼,一旦使用微信掃一掃,進行關(guān)注服務(wù)號後,那麼就可以看到我自己創(chuàng)建的菜單了。主選單一般最多三列,每個主選單還可以有子選單,他們的文字都有限制的。
我們來看看我公司的微信門戶菜單,看起來是不是很酷呢。
?
更多C#開發(fā)微信入口網(wǎng)站及應(yīng)用(1)--開始使用微信介面相關(guān)文章請關(guān)注PHP中文網(wǎng)!

熱AI工具

Undress AI Tool
免費脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)
