搜尋
首頁微信小程式微信開發使用delphi+intraweb進行微信訊息處理

使用delphi+intraweb進行微信訊息處理

Feb 24, 2017 pm 04:22 PM
微信開發

在第二講使用delphi+intraweb進行微信開發2—intraweb以.net方式發布(以asp.net mvc4模式部署)在IIS(.net虛擬主機)上我們成功把iw應用部署在了雲端虛擬主機上,在這一講裡,我們將延續第一講的內容回歸微信開發,這次講解微信訊息處理。

首先明確幾個知識點:

1、微信伺服器轉送使用者訊息使用的http post方法,在第一講中關於微信伺服器的http資料提交方法我們並沒有細說,實際上微信進行接入驗證使用的是http get方法;而轉發用戶訊息則使用的http post方法,並且轉發訊息時訊息以xml格式進行編碼,ContentType=text/xml。

2、微信伺服器訊息轉送是可以選擇三種資料傳遞方式的,一、明文;二、加密;三、混合。在這一講了為了調試方便,我們採用明文方式傳遞資料。下一講再講解訊息加密方式的處理。

 

原本覺得這一講的內容沒什麼難度,要是.net、php甚至是delphi的webbroker都應該很容易實現。但用上iw後發現問題很複雜!

iw處理http請求資料的類別是THttpRequest,但是我看遍了THttpRequest的屬性和方法就沒有找到直接訪問http content的地方,只有個似乎是讀取http content的THttpRequest.ContentFields屬性,但是實際執行程式碼並調試後發現,這個屬性根本無法取到微信伺服器傳遞過來的xml文件,內容總是空的。

經過重複驗證發現這個ContentFields屬性只能對http request時ContentType為application/x-www-form-urlencoded時傳遞的鍵值對內容有效,也就是對於表單類型的提交是可以取到資料的,在第一講的微信存取中就是這種情況,微信傳遞過來的signature、timestamp、nonce等欄位值都是可以透過THttpRequest.ContentFields取出來的。

事情發展到現在完全陷入困境了,那麼ContentType=text/xml時如何用THttpRequest類別的方法取得內容呢?經過研究發現THttpRequest類別有個Files屬性,當時感覺希望就在這個屬性上,畢竟xml也可以當做檔案來上傳不是嗎?呵呵,很遺憾的是,我當時無論怎麼實驗(反組譯dcu都用上了),這個屬性的檔數總是0,這個希望也斷了!

於是乎在iw官方的問題貼論壇上發帖留言開始了求教之路,1天、2天始終有人看沒人回,在屢次搜索相關提問後發現了曾經有人和我遇到同樣的問題,當時作者給了回應說提問者表示不清楚要求發電子郵件給作者代碼,呵呵,算是抓到稻草了,立即冒充提問者給作者發送我的代碼並附上了提問,呀呀,石沉大海啊,呵呵,iw真是想愛你這麼的不容易。

沒有辦法繼續搜尋其他人的提問吧,功夫不負有心人啊,終於找到了一個帖子,裡面提問者和我的問題不相同,但是回答者提到iw demos裡面有個PostFormData範例工程,立即查看我下載的demo,發現根本沒有這個工程,上官網重新下載例子工程,呵呵,終於有了!打開程式碼一看,原來如此!跟第一講一樣就是一行程式碼難受我好幾天。

親們看吧:

使用delphi+intraweb進行微信訊息處理

就是那個「RegisterContentType」方法,呵呵,你能想到嗎?幫助裡面有提到嗎?我靠!

好吧,總算可以了,那麼接著說,增加了content-type註冊之後,就可以用THttpRequest.Files獲取post過來的xml了,這倒是和我最初的預測差不多,小安慰一下。

親們,我的血淚歷程告訴大家,針對iw這種幫助不完善又沒源代碼的web開發框架,提問區查找和iw demos就是我們最大的依靠了,要用iw就趕快下載個最新的demo看看吧。

剩下就沒什麼好說了,貼個程式碼截圖大夥看看,照著微信的文檔做,比較容易:

使用delphi+intraweb進行微信訊息處理

TEventHandler類別:

使用delphi+intraweb進行微信訊息處理

#部署到伺服器上後用微信用戶端測試截圖:

使用delphi+intraweb進行微信訊息處理

如果你看到這裡了,好吧,我再告訴你個小秘密吧:

#經我反覆測試,那個「RegisterContentType」方法只在SA、ISAPI模式下有效,當我按照第二講說的編譯成library並按照aspx模式部署好後,無論如何也取不到xml文件,僅僅是工程類型由於部署要求做了個變化,其它代碼都沒有任何變化,就是不知道是為什麼,上圖大夥看到的截圖是我以ISAPI方式部署在我伺服器上實現的。

 

最後再附上微信訊息的xml格式中日期欄位的編解碼函數,微信的日期類型是整形值,所以需要將整形值轉換成TDateTime類型,微信的整形值的計算是以'1970-01-01 00:00:00'作為基準時間計算的秒差。另外要注意的是,微信時間是UTC時間,也就是轉換成北京時間要加上8小時。

///


/// 微信的日期時間都是int64型,是和1970-01-01 00:00:00之間的秒差,這個函數用來回傳1970-01-01 00:00:00時刻        
///        
/// 1970-01-01 00:00:00        
function##      function## ## GetWxBaseDt: TDateTime
;        
begin           Result##) # := VarToDateTime('1970-01-01 00:00:00'
# );         end
;




///


       
/// 取得適合微信使用的目前日期,以int64表示,是目前時間和1970-01-01 00:00:00之間的秒差

######         #############/// 然後再減去3600*8轉成UTC時間秒差即為微信時間#########         ############/// #############/// ###### ##         ############/// 目前時間,int64格式######### #########

function GetWxNow: Int64;        
begin        
  Result := SecondsBetween(Now, GetWxBaseDt) - 3600 * 8;        
end;        

function GetWxNowStr: string;        
var        
  i64: Int64;        
begin        
  i64 := GetWxNow;        
  Result := IntToStr(i64);        
end;        

##///


/// Pass the CreateTime field value obtained from WeChat xml as a parameter into the function
/// You can use the int type of WeChat Convert the time into TDatetime type
##///
/// TDateTime
##function
ConvertWxDtToDateTime(wxDt: string): TDateTime; var
i64
: Int64; begin
i64
:= StrToInt64(wxDt); Result
:= IncSecond(GetWxBaseDt, i64 + 3600*8); end
;

For more articles related to using delphi+intraweb for WeChat message processing, please pay attention to the PHP Chinese website!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境