範例程式碼已經放出!請移步使用delphi+intraweb進行微信開發1~4程式碼範例進行下載,雖為範例程式碼但是是從我專案中移出來的,封裝很完備適於自行擴充和修改。
iw14.0.50來了,在新的版本中最吸引我的就是增加了完善的httphandler功能:終於可以直接在網址列輸入url開啟iw功能頁了;可以自由使用EasyUI等js框架了;顯示模式對話框也不再七繞八繞惹人煩了;呵呵,我感覺iw第一次接近主流web開發工具了!
興奮過了,來試試看。其實iw的坑還是挺多的,雖然已經接近主流了,但是,後面慢慢都會說到…
#1、新建一個iw工程,選擇Stand Alone Server / Service ,這種模式下進行開發是最理想的,調試很方便,正式發佈時可以再建立一個library型的工程發佈到.net伺服器上。 (是的,大家沒有看錯,現在iw已經脫離了isapi模式,可以像部署.net mvc4應用程式一樣部署到iis上,後面會解釋,.net虛擬主機也可以發布iw應用了!巨大的進步。)
2、儲存工程後在工程中新增一個新的單元文件,例如命名為wxapi.pas,這個文件中的程式碼將承擔微信存取工作。程式碼如下:
interface
uses
Classes, IW.Content.Base, System.SysUtils,HTTPApp, IWApplication,
IW.HTTP.Request, IW.HTTP.Reply;
type
///
/// 從TContentBase繼承下來的類,就相當於asp.net中的httphandler
///
TWxApi = class(TContentBase)
protected
與 function Execute(aRequest: THttpRequest; TStrings): Boolean; override;
public
constructor Create; override;
end;
implementation
uses 1 ## { TWxApi }
constructor TWxApi. Create;
begin
inherited;
// 檔案中不需要存在
function TWxApi.Execute(aRequest: THttpRequest; aReply : THttpReply;
const aPathname: string; aSession: TIWApplication;
signature: string;
timestamp: string;
nonce: string;
echostr: string;
strs: TStringList;
tmpStr: string;
signature := aParams.Values['signature'] ;
timestamp := aParams.Values['timestamp'];
nonce := aParams.Values['nonce'] ## nonce := aParams.Values['nonce'] ## nonce := aParams.Values['nonce'] o Value.
strs := TStringList.Create; nonce);
strs.Sort;
tmpStr := strs[0]+strs[1]+strs[2]; ad p
if tmpStr=signature then
begin
aReply.WriteString(echo Reply.WriteString('如果看到這個提示說明此連結位址可作為微信介面位址使用。 ');
end;
aSession.Terminate; // 釋放會話資源,本handler無會話 #即iw版httphandler的基礎類,如果不需要顯示iwForm,從這個類型繼承下來即可。如果需要使用iwForm還有個TContentForm基礎類別可以使用,哇哦,在瀏覽器網址列輸入url也可以直接開啟iwform了哦。 TWxApi.Execute中的程式碼即微信存取的程式碼,非常簡單,不了解的看看微信幫助:微信存取指南。
3、在ServerController中註冊此httphandler,直接貼出ServerController註冊代碼:
procedure TIWServerController.IWServerControllerBaseConfig(Sender: TObject); Control ControllerBaseConfig(Sender: TObject);的微信Handler
// ServerController.OnConfig事件在整個應用程式生命週期中只被執行一次
with THandlers.Add('', 'wxapi.php', .
CanStartSession := True; // 從字面上理解是能夠啟動會話
RequiresSessionStart := False; // 從字面上理解是需要啟動會話,這兩個屬性必須進行設置,否則輸入/wxapi.php將轉向主視窗
/start 啟動會話後才
。
end;
end;
#如程式碼所示, 這段程式碼所示,紅色的THandlers.Add('', 'wxapi.php', TWxApi.Create)這段程式碼就完成了httphandler的註冊,在瀏覽器網址列輸入
http://localhost/wxapi.php
http://localhost/wxapi.php
能正常開啟頁面了。4、將編譯完成的iw應用拷貝到主機上進行測試,實戰微信存取
,居然提示設定失敗!這是什麼情況,我使用的程式碼是從別人寫好的一個Delphi版微信接入介面程式碼中拷貝的,那個程式相同的程式碼沒有任何問題,當時第一個念頭是頁面編碼不正確,好吧,我改,iw的handler預設的編碼是utf-8格式的,於是我嘗試了gbk,iso-8859-1等多種編碼格式,均提示上述錯誤。萬般無奈只好寫日誌看看到底handler程式碼執行沒有,結果令人震驚,放到真實伺服器上後,微信驗證時handler程式碼居然沒有執行,而在我本機調試時和真實伺服器的瀏覽器上瀏覽時都很好沒有任何問題。巨大的坑啊,連著好幾天各種測試,各種修改,都準備放棄了,呵呵,結果看了下iw自己的httphandler示例,發現在其ServerController中實現了一個事件:OnBrowserCheck,於是嘗試在自己程式碼中增加了相同事件程式碼來測試,哇塞,可以了。 。 。
procedure TIWServerController.IWServerControllerBaseBrowserCheck(
aSession: TIWApplication; var rBrowser: TBrowser); 我
//
// 在沒有實現這個事件的時候,在任何瀏覽器輸入/wxapi.php 都能成功回應,唯獨到了
// 微信中就顯示設定失敗,後來在程式碼中使用了日誌輸出才發現iw能收到微信請求,但是
// TWxApi.Execute方法卻沒有執行,後來去官網閱讀了相關幫助,才發現iw只有支援的孩
// 覽器才可正常回應輸出,而微信發出的web請求顯然不屬於任何已知的瀏覽器
if rBrowser is TOther then begin
(8) ; // 以相容IE8頁面瀏覽進行頁面內容輸出
end;
end;
,呵呵,太不容易了,就這麼幾行程式碼折騰好幾天,不過iw終於可以用在微信開發了。
我認為Delphi的強大在於除編譯器外所有原始碼都提供,這樣出現問題了可以透過閱讀原始碼解決,但是iw太封閉了,沒有原始碼就算了,幫助也跟不上,在線那個幫助實在太太太弱了,建議用iw的朋友結合在線幫助和iw自己的示例工程一起看,少走彎路!不過,iw發展到今天確實已經挺好用了,尤其對於有delphi情節的人,能用自己最擅長的語言和開發工具進行web開發真是挺爽的一件事情。 更多delphi+intraweb進行微信開發-微信平台接入 相關文章請關注PHP中文網!