在上一篇中,我們講解了如何申請微信公眾號,公眾平臺開發(fā)的基本原理以及服務器環(huán)境的搭建。這一講開始,我們正式進入微信公眾號的開發(fā)。
1. 微信接口
我們前一篇已經(jīng)講了,微信平臺(不管是訂閱號還是服務號)和我們的網(wǎng)站進行交互時,都是通過微信平臺開放給外部系統(tǒng)的接口調(diào)用來實現(xiàn)的,也就是說,粉絲向公眾號發(fā)送一次交互(文字,圖片,聲音或者菜單點擊都算交互)后,微信平臺會向你配置的url所對應的網(wǎng)站發(fā)出調(diào)用請求,來執(zhí)行你的網(wǎng)站的代碼,在代碼中你進行各種處理后返回一個處理結果。
你的網(wǎng)站具體使用什么語言來開發(fā)取決于你自己的愛好,不過我建議大家使用php來做,因為目前做web開發(fā)php是最方便的,當然你也可以用java寫,沒關系的,我們以php為例說明。
微信平臺在配置url時會驗證一下你對應的這個url的網(wǎng)站是否真實存在,是否是你自己的網(wǎng)站。驗證的原理很簡單,你首先填寫一個Token(你不用管這個是什么,只要記住它其實就是一個字符串符號,用來生成一個代表你自己身份的簽名),然后填寫你的網(wǎng)站的url,點擊提交,如下圖。
平臺就會向這個url所對應的網(wǎng)站發(fā)送一個GET請求,同時攜帶4個參數(shù)。參數(shù)參考圖2的說明。如下圖。
其中timestamp是一個時間戳。時間戳其實就是從 1970年 1月1日至當前時間的總秒數(shù)。你就數(shù)吧,從1970年 1月 1日到我們現(xiàn)在這個時刻一共流逝了多少秒那么這個時間戳就是多少。所以時間戳任何時刻都是不同的。Nonce和echostr都是平臺產(chǎn)生的隨機數(shù)。Signature也就是簽名,它是經(jīng)過如下計算得到的:
將當前時間戳(timestamp),nonce以及你輸入的TOKEN按照字母順序排序后拼接在一起形成一個字符串。例如: timestamp是345632,nonce是132a,TOKEN是123,那么我們先按照字母順序排列,得到這樣的順序:123,132a,345632.然后拼接得到:123132a345632.最后經(jīng)過SHA1加密運算得到簽名Signature:E69E5E13D8B045923EF1BE38DF938F5621CA3004。SHA1是一個加密算法,細節(jié)這里就不講了。這些參數(shù)一會都會通過查詢參數(shù)的形式發(fā)送給我們網(wǎng)站的。
搭建php網(wǎng)站
為了能夠接受這些參數(shù)我們需要一個自己的php網(wǎng)站。Ok,我們現(xiàn)在就開始搭建這樣的一個網(wǎng)站。
1. 先下載WAMP集成安裝套件,這個很簡單,大家一路點擊“下一步”,最后點擊一下“完成”就可以了,我是直接安裝在C盤根目錄的,安裝好了以后的目錄結構 如下圖. 安裝完成后我們可以看到,我們需要的apache,mysql和php都已經(jīng)安裝好了,而且默認幫你安裝了一個管理工具,非常方便。最重要的就是www這個目錄,這個是就我們即將要創(chuàng)建的網(wǎng)站的根目錄。
2. 進入www目錄,新建一個index.php的文件,在里面只寫入一行代碼,如下圖所示。
然后在瀏覽器里面輸入localhost,如果出現(xiàn)上圖的頁面,說明我們的服務器環(huán)境是已經(jīng)ok,我們就可以繼續(xù)下一步了。
3. 接下來,我們開始代碼處理。我們首先獲取平臺傳過來的4個參數(shù),
具體的代碼見下面,里面已經(jīng)有很詳細的說明了哦。這里再說一下,為什么使用php,大家看到?jīng)]有,用php 代碼只有不到100行,而我之前用java實現(xiàn)過同樣的功能,卻花了500多行,這得益于php的很多函數(shù)以及幫我們做好了,我們可以直接使用。所以,php特別適合中小型網(wǎng)站的哦開發(fā)哦。大家也可以用其他語言換個方式實現(xiàn)一下試試。
這里再補充解釋一下上面的代碼:代碼的處理過程是這樣的,將傳過來的時間戳timestamp,隨機數(shù)nonce和你自己輸入的TOKEN(你自己輸入的,所以當然知道TOKEN是多少)排序,拼接,SHA1處理,最后得到一個簽名。
因為我們得到這個簽名的過程和平臺處理的過程是一模一樣的,所以我們得到的簽名和平臺發(fā)送給我們的簽名Signature的值應該是一模一樣的。
將得到的結果和傳過來的簽名Signature比較,如果相等,就返回echostr(echostr也是平臺發(fā)給我們的參數(shù)哦)給平臺,告訴平臺我已經(jīng)接受到了你的請求,而且這個請求在網(wǎng)絡傳輸?shù)倪^程中沒有被篡改(因為簽名相等)。這樣驗證就通過了,相當于和平臺和我們的網(wǎng)站之間建立了一個可信的通信通道。
如果你看到平臺顯示下面的信息,說明驗證通過了,你就可以正式開始你的微信開發(fā)了。
.2. 使用php開發(fā)微信服務器端
我們的微信商城其實就是一個web程序,只不過這個web程序的客戶端不再是瀏覽器而是微信平臺了,所以,任何支持web服務器端開發(fā)的語言都可以作為我們微信商城的開發(fā)語言,例如Java、php等。為什么這里我選擇php呢,因為php是目前為止最適合web開發(fā)的語言,而且隨著我們的深入,你會發(fā)現(xiàn)php在web開發(fā)上的強大之處,很多java要很多行代碼才能夠實現(xiàn)的功能,php只要一句代碼就可以很好的實現(xiàn)了。所以,我們選擇php作為我們的示例開發(fā)語言。
那么,大家在使用php開發(fā)時,我相信一提到調(diào)試,很多人還是會覺得很頭疼,特別是新手更加是這樣。我見過很多人抱怨php調(diào)試非常不方便,只能使用一些echo,print等輸出語句輸出變量值來進行調(diào)試,這樣的確是非常麻煩的,因為這些輸出語句無法設置斷點。所以,我這里首先幫大家解決php斷點調(diào)試的問題,因為沒有這個斷點調(diào)試的“利器”,以后的開發(fā)中出現(xiàn)問題,你想解決是很痛苦的。
說起php的斷點調(diào)試,我相信很多同學首先想到的就是zend studio+zend debugger,沒錯,你可以這么做,但是,這么做就意味著你需要手動配置很多東西,而且還不一樣能保證停留在斷點處。這里,我就不饒灣子了,我教大家一個很方便的工具,直接安裝一下就可以原來調(diào)試php了。
這個工具就是XAMPP+PhpEclipse的組合,其中XAMPP是一個集成安裝包,里面包括了:Apache, MySQL、PHP和Perl。XAMPP其中的A代表Apache,M代表MySQL,第一個P代表PHP,第2個P代表Perl.這個工具自身攜帶了php調(diào)試功能xdbug,大家安裝以后幾乎不需要特意配置就可以用來調(diào)試php了。
下面請跟著我一步步來操作:
1.打開http://www./zh_cn/download.html,下載XAMPP
for Windows1.8.2 & 1.8.3
2. 解壓該壓縮包,并雙擊 xampp-win32-1.8.0-VC9-installer.exe
3. 一路點Next,在選擇文件安裝位置時,選擇安裝在C:\盤根目錄。
4. 等待安裝
5. 完成。
6. 完成后會自動打開控制面板。其中1處是啟動各種服務的按鈕,2 是配置各種服務的按鈕,3是查看各種服務的日志的按鈕。
7. 點擊Apache,MySql 的Start按鈕,啟動apache web服務器和mysql 數(shù)據(jù)庫服務器,如下圖,能看到Pid和ports的下方出現(xiàn)了 值 時表示服務啟動成功 。
如果出現(xiàn)啟動報錯時,檢查一下是否 相關的端口被占用了,修改配置文件里面的相關端口的配置后再重新啟動試試。
下載并解壓phpeclipse,點擊運行,你會發(fā)現(xiàn)聰明的phpeclipse已經(jīng)自動發(fā)現(xiàn)了xampp,并且已經(jīng)自動幫你配置好了。
接下來很重要的一步,我們將創(chuàng)建一個php網(wǎng)站項目,并且驗證一下我們的xampp是否能對我們的php網(wǎng)站進行調(diào)試。只有我們的調(diào)試能正常進行,以后的課程中我才能一步步的幫大家分析微信平臺和我們的網(wǎng)站的交互過程的細節(jié),大家才能真正明白原理,然后大家在實際中遇到問題時也可以使用調(diào)試來分析解決。
1. 首先,新建一個php項目 。增加一個php文件,里面隨便加一些最簡單的代碼。并設置幾個斷點。這里注意:設置斷點時一定不要雙擊來設置,一定要通過在左側右鍵,然后在彈出的右鍵菜單里面選擇:“Toggle Xdebug BreakPoint”來設置。這是因為雙擊設置的是java的斷點,而我們是需要對php設置斷點,必須通過右鍵的方式來設置,這樣設置的才是php的斷點,這樣的斷點XDebug才可以識別。否則,你很容易會出現(xiàn)莫名其妙的無法在斷點處停住的問題。
2. 接下來,打開我們的xampp的安裝目錄,我的是:C:\xampp\php,用記事本打開里面的php.ini配置文件。我們要把里面的最后一部分關于xdebug的配置前的注釋打開。修改好之后的截圖如下:
這樣,我們就打開了xampp的xdebug調(diào)試功能。如果你不是很肯定是否已經(jīng)打開了該調(diào)試功能,可以自己創(chuàng)建任意一個php項目,在里面寫上一個文件,在該文件里面寫上:phpinfo();然后執(zhí)行以下,看看是否有如下輸出:
3. 這樣,我們已經(jīng)完成了服務器端的配置。接下來需要在我們的phpeclipse里面設置一下,讓我們的ide能夠和我們服務器端的xdebug通信。跟我來。打開windows-prefrences下面的phpeclipse,按照如下圖所示 檢查是否配置正確。
4. 接下來就可以測試一下我們的調(diào)試功能是否能正常調(diào)試了。一起來。在file.php上右擊,選擇debug as->debugconfiguration
5. 配置 完保存后,以后調(diào)試時,只需要在工具欄的那個debug圖標下選擇我們剛才的配置就可以進行調(diào)試了,如下圖。
6. 這時,我們在phpeclipse里面自帶的瀏覽器或者在ie瀏覽器里面輸入:http://localhost:8080/phpTest/file.php?XDEBUG_SESSION_START=testID
注意后面的參數(shù):XDEBUG_SESSION_START=testID這里的testID 就是我們之前在debug配置里面設置的標識字符串。如圖。
7. 最后,停在斷點的效果如下圖所示。
有了斷點單步調(diào)試的功能,接下來我們不管做什么php網(wǎng)站,都方便很多了。在下一講,我將結合php單步調(diào)試給大家深入分析微信商城開發(fā)的原理。