国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

高洛峰
發(fā)布: 2017-02-24 16:22:00
原創(chuàng)
3423人瀏覽過

在第二講使用delphi+intraweb進行微信開發(fā)2—intraweb以.net方式發(fā)布(以asp.net mvc4模式部署)在iis(.net虛擬主機)上 我們成功把iw應用部署在了云虛擬主機上,在這一講里,我們將延續(xù)第一講的內(nèi)容回歸微信開發(fā),這次講解微信消息處理。

首先明確幾個知識點:

1、微信服務器轉(zhuǎn)發(fā)用戶消息使用的http post方法,在第一講中關于微信服務器的http數(shù)據(jù)提交方法我們并沒有細說,實際上微信進行接入驗證使用的是http get方法;而轉(zhuǎn)發(fā)用戶消息則使用的http post方法,并且轉(zhuǎn)發(fā)消息時消息以xml格式進行編碼,ContentType=text/xml。

2、微信服務器消息轉(zhuǎn)發(fā)是可以選擇三種數(shù)據(jù)傳遞方式的,一、明文;二、加密;三、混合。在這一講了為了調(diào)試方便,我們采用明文方式傳遞數(shù)據(jù)。下一講再講解消息加密方式的處理。

?

本來感覺這一講的內(nèi)容沒什么難度,要是.net、php甚至是delphi的webbroker都應該很容易實現(xiàn)。但是用上iw后發(fā)現(xiàn)問題很復雜!

iw處理http請求數(shù)據(jù)的類是THttpRequest,但是我看遍了THttpRequest的屬性和方法就沒有找到直接存取http content的地方,只有個似乎是讀取http content的THttpRequest.ContentFields屬性,但是實際執(zhí)行代碼并調(diào)試后發(fā)現(xiàn),這個屬性根本無法取到微信服務器傳遞過來的xml文件,內(nèi)容始終是空的。

經(jīng)過反復驗證發(fā)現(xiàn)這個ContentFields屬性只能對http request時ContentType為application/x-www-form-urlencoded時傳遞的鍵值對內(nèi)容有效,也就是對于表單類型的提交是可以取到數(shù)據(jù)的,在第一講的微信接入中就是這種情況,微信傳遞過來的signature、timestamp、nonce等字段值都是可以通過THttpRequest.ContentFields取出來的。

事情發(fā)展到現(xiàn)在徹底陷入困境了,那么ContentType=text/xml時如何用THttpRequest類的方法獲取內(nèi)容呢?經(jīng)過研究發(fā)現(xiàn)THttpRequest類有個Files屬性,當時感覺希望就在這個屬性上,畢竟xml也可以當做文件來上傳不是嗎?呵呵,遺憾的是,我當時無論怎么實驗(反匯編dcu都用上了),這個屬性的文件數(shù)始終是0,這個希望也斷了!

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

沒有辦法繼續(xù)搜索其他人的提問吧,功夫不負有心人啊,終于找到了一個帖子,里面提問者和我的問題不相同,但是回答者提到iw demos里面有個PostFormData示例工程,立即查看我下載的demo,發(fā)現(xiàn)根本沒有這個工程,上官網(wǎng)重新下載例子工程,呵呵,終于有了!打開代碼一看,原來如此!跟第一講一樣就是一行代碼難受我好幾天。

親們看吧:

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

就是那個“RegisterContentType”方法,呵呵,你能想到嗎?幫助里面有提到嗎?我靠!

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

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

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

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

TEventHandler類:

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

部署到服務器上后用微信客戶端測試截屏:

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

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

經(jīng)我反復測試,那個“RegisterContentType”方法只在SA、ISAPI模式下有效,當我按照第二講說的編譯成library并按照aspx模式部署好后,無論如何也取不到xml文件,僅僅是工程類型由于部署要求做了個變化,其它代碼都沒有任何變化,就是不知道是為什么,上圖大伙看到的截圖是我以ISAPI方式部署在我服務器上實現(xiàn)的。

?

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

///


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

///

? ? ? ?
/// 獲取適合微信使用的當前日期,以int64表示,是當前時間和1970-01-01 00:00:00之間的秒差 ? ? ? ?
/// 然后再減去3600*8轉(zhuǎn)成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; ? ? ? ?

///

? ? ?
/// 把微信xml中獲取的CreateTime字段值當做參數(shù)傳入函數(shù) ? ? ?
/// 即可將微信的int類型的時間轉(zhuǎn)換成TDatetime類型 ? ? ?
/// ? ? ?
/// TDateTime
? ? ?
function?ConvertWxDtToDateTime(wxDt:?string):?TDateTime; ? ? ?
var ? ? ?
? i64:?Int64; ? ? ?
begin ? ? ?
? i64?:=?StrToInt64(wxDt); ? ? ?
? Result?:=?IncSecond(GetWxBaseDt,?i64?+?3600*8); ? ? ?
end
;

更多使用delphi+intraweb進行微信消息處理相關文章請關注PHP中文網(wǎng)!

微信app下載
微信app下載

微信是一款手機通信軟件,支持通過手機網(wǎng)絡發(fā)送語音短信、視頻、圖片和文字。微信可以單聊及群聊,還能根據(jù)地理位置找到附近的人,帶給大家全新的移動溝通體驗,有需要的小伙伴快來保存下載體驗吧!

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權歸原作者所有,本站不承擔相應法律責任。如您發(fā)現(xiàn)有涉嫌抄襲侵權的內(nèi)容,請聯(lián)系admin@php.cn
最新問題
開源免費商場系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關于我們 免責申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓,幫助PHP學習者快速成長!
關注服務號 技術交流群
PHP中文網(wǎng)訂閱號
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時隨地碎片化學習
PHP中文網(wǎng)抖音號
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://m.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號