在第二講使用delphi+intraweb進(jìn)行微信開發(fā)2—intraweb以.net方式發(fā)布(以asp.net mvc4模式部署)在IIS(.net虛擬主機(jī))上 我們成功把iw應(yīng)用部署在了云虛擬主機(jī)上,在這一講里,我們將延續(xù)第一講的內(nèi)容回歸微信開發(fā),這次講解微信消息處理。
首先明確幾個(gè)知識(shí)點(diǎn):
1、微信服務(wù)器轉(zhuǎn)發(fā)用戶消息使用的http post方法,在第一講中關(guān)于微信服務(wù)器的http數(shù)據(jù)提交方法我們并沒有細(xì)說,實(shí)際上微信進(jìn)行接入驗(yàn)證使用的是http get方法;而轉(zhuǎn)發(fā)用戶消息則使用的http post方法,并且轉(zhuǎn)發(fā)消息時(shí)消息以xml格式進(jìn)行編碼,ContentType=text/xml。
2、微信服務(wù)器消息轉(zhuǎn)發(fā)是可以選擇三種數(shù)據(jù)傳遞方式的,一、明文;二、加密;三、混合。在這一講了為了調(diào)試方便,我們采用明文方式傳遞數(shù)據(jù)。下一講再講解消息加密方式的處理。
?
本來感覺這一講的內(nèi)容沒什么難度,要是.net、php甚至是delphi的webbroker都應(yīng)該很容易實(shí)現(xiàn)。但是用上iw后發(fā)現(xiàn)問題很復(fù)雜!
iw處理http請(qǐng)求數(shù)據(jù)的類是THttpRequest,但是我看遍了THttpRequest的屬性和方法就沒有找到直接存取http content的地方,只有個(gè)似乎是讀取http content的THttpRequest.ContentFields屬性,但是實(shí)際執(zhí)行代碼并調(diào)試后發(fā)現(xiàn),這個(gè)屬性根本無法取到微信服務(wù)器傳遞過來的xml文件,內(nèi)容始終是空的。
經(jīng)過反復(fù)驗(yàn)證發(fā)現(xiàn)這個(gè)ContentFields屬性只能對(duì)http request時(shí)ContentType為application/x-www-form-urlencoded時(shí)傳遞的鍵值對(duì)內(nèi)容有效,也就是對(duì)于表單類型的提交是可以取到數(shù)據(jù)的,在第一講的微信接入中就是這種情況,微信傳遞過來的signature、timestamp、nonce等字段值都是可以通過THttpRequest.ContentFields取出來的。
事情發(fā)展到現(xiàn)在徹底陷入困境了,那么ContentType=text/xml時(shí)如何用THttpRequest類的方法獲取內(nèi)容呢?經(jīng)過研究發(fā)現(xiàn)THttpRequest類有個(gè)Files屬性,當(dāng)時(shí)感覺希望就在這個(gè)屬性上,畢竟xml也可以當(dāng)做文件來上傳不是嗎?呵呵,遺憾的是,我當(dāng)時(shí)無論怎么實(shí)驗(yàn)(反匯編dcu都用上了),這個(gè)屬性的文件數(shù)始終是0,這個(gè)希望也斷了!
于是乎在iw官方的問題貼論壇上發(fā)帖留言開始了求教之路,1天、2天始終有人看沒人回,在屢次搜索相關(guān)提問后發(fā)現(xiàn)了曾經(jīng)有人和我遇到同樣的問題,當(dāng)時(shí)作者給了回應(yīng)說提問者表示不清楚要求發(fā)電子郵件給作者代碼,呵呵,算是抓到稻草了,立即冒充提問者給作者發(fā)送我的代碼并附上了提問,呀呀,石沉大海啊,呵呵,iw真是想愛你這么的不容易。
沒有辦法繼續(xù)搜索其他人的提問吧,功夫不負(fù)有心人啊,終于找到了一個(gè)帖子,里面提問者和我的問題不相同,但是回答者提到iw demos里面有個(gè)PostFormData示例工程,立即查看我下載的demo,發(fā)現(xiàn)根本沒有這個(gè)工程,上官網(wǎng)重新下載例子工程,呵呵,終于有了!打開代碼一看,原來如此!跟第一講一樣就是一行代碼難受我好幾天。
親們看吧:
就是那個(gè)“RegisterContentType”方法,呵呵,你能想到嗎?幫助里面有提到嗎?我靠!
好吧,總算可以了,那么接著說,增加了content-type注冊(cè)之后,就可以用THttpRequest.Files獲取post過來的xml了,這倒是和我最初的預(yù)測(cè)差不多,小安慰一下。
親們,我的血淚歷程告訴大家,針對(duì)iw這種幫助不完善又沒源代碼的web開發(fā)框架,提問區(qū)查找和iw demos就是我們最大的依靠了,要用iw就趕緊下載個(gè)最新的demo看看吧。
剩下就沒什么好說了,貼個(gè)代碼截圖大伙看看,照著微信的文檔做,比較容易:
TEventHandler類:
部署到服務(wù)器上后用微信客戶端測(cè)試截屏:
如果你看到這里了,好吧,我再告訴你個(gè)小秘密吧:
經(jīng)我反復(fù)測(cè)試,那個(gè)“RegisterContentType”方法只在SA、ISAPI模式下有效,當(dāng)我按照第二講說的編譯成library并按照aspx模式部署好后,無論如何也取不到xml文件,僅僅是工程類型由于部署要求做了個(gè)變化,其它代碼都沒有任何變化,就是不知道是為什么,上圖大伙看到的截圖是我以ISAPI方式部署在我服務(wù)器上實(shí)現(xiàn)的。
?
最后再附上微信消息的xml格式中日期字段的編解碼函數(shù),微信的日期類型是整形值,所以需要將整形值轉(zhuǎn)成TDateTime類型,微信的整形值的計(jì)算是以'1970-01-01 00:00:00'作為基準(zhǔn)時(shí)間計(jì)算的秒差。另外需要注意的是,微信時(shí)間是UTC時(shí)間,也就是轉(zhuǎn)換成北京時(shí)間要加上8個(gè)小時(shí)。
///
/// 微信的日期時(shí)間都是int64類型,是和1970-01-01 00:00:00之間的秒差,這個(gè)函數(shù)用來返回1970-01-01 00:00:00時(shí)刻 ? ? ? ?
/// ? ? ? ?
///
function?GetWxBaseDt:?TDateTime; ? ? ? ?
begin ? ? ? ?
? Result?:=?VarToDateTime('1970-01-01 00:00:00'); ? ? ? ?
end;
///
/// 獲取適合微信使用的當(dāng)前日期,以int64表示,是當(dāng)前時(shí)間和1970-01-01 00:00:00之間的秒差 ? ? ? ?
/// 然后再減去3600*8轉(zhuǎn)成UTC時(shí)間秒差即為微信時(shí)間 ? ? ? ?
/// ? ? ? ?
///
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字段值當(dāng)做參數(shù)傳入函數(shù) ? ? ?
/// 即可將微信的int類型的時(shí)間轉(zhuǎn)換成TDatetime類型 ? ? ?
/// ? ? ?
///
function?ConvertWxDtToDateTime(wxDt:?string):?TDateTime; ? ? ?
var ? ? ?
? i64:?Int64; ? ? ?
begin ? ? ?
? i64?:=?StrToInt64(wxDt); ? ? ?
? Result?:=?IncSecond(GetWxBaseDt,?i64?+?3600*8); ? ? ?
end;
更多使用delphi+intraweb進(jìn)行微信消息處理相關(guān)文章請(qǐng)關(guān)注PHP中文網(wǎng)!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

PHP ialah bahasa skrip sumber terbuka yang digunakan secara meluas dalam pembangunan web dan pengaturcaraan sisi pelayan, terutamanya dalam pembangunan WeChat. Hari ini, semakin banyak syarikat dan pembangun mula menggunakan PHP untuk pembangunan WeChat kerana ia telah menjadi bahasa pembangunan yang benar-benar mudah dipelajari dan mudah digunakan. Dalam pembangunan WeChat, penyulitan dan penyahsulitan mesej merupakan isu yang sangat penting kerana ia melibatkan keselamatan data. Untuk mesej tanpa kaedah penyulitan dan penyahsulitan, penggodam boleh mendapatkan data dengan mudah, menimbulkan ancaman kepada pengguna.

Dalam pembangunan akaun awam WeChat, fungsi pengundian sering digunakan. Fungsi undian ialah cara yang bagus untuk pengguna mengambil bahagian dalam interaksi dengan pantas, dan ia juga merupakan alat penting untuk mengadakan acara dan meninjau pendapat. Artikel ini akan memperkenalkan anda cara menggunakan PHP untuk melaksanakan fungsi undian WeChat. Dapatkan kebenaran akaun rasmi WeChat Pertama, anda perlu mendapatkan kebenaran akaun rasmi WeChat. Pada platform awam WeChat, anda perlu mengkonfigurasi alamat API akaun awam WeChat, akaun rasmi dan token yang sepadan dengan akaun awam. Dalam proses pembangunan kami menggunakan bahasa PHP, kami perlu menggunakan PH yang disediakan secara rasmi oleh WeChat

Dengan populariti WeChat, semakin banyak syarikat mula menggunakannya sebagai alat pemasaran. Fungsi pemesejan kumpulan WeChat ialah salah satu cara penting bagi perusahaan untuk menjalankan pemasaran WeChat. Walau bagaimanapun, jika anda hanya bergantung pada penghantaran manual, ia adalah tugas yang sangat memakan masa dan susah payah untuk pemasar. Oleh itu, adalah amat penting untuk membangunkan alat pemesejan massa WeChat. Artikel ini akan memperkenalkan cara menggunakan PHP untuk membangunkan alat penghantaran massa WeChat. 1. Kerja penyediaan Untuk membangunkan alat pemesejan massa WeChat, kita perlu menguasai perkara teknikal berikut: Pengetahuan asas PHP WeChat alat pembangunan platform awam: Sub

WeChat kini merupakan salah satu platform sosial dengan pangkalan pengguna terbesar di dunia Dengan populariti Internet mudah alih, semakin banyak syarikat mula menyedari kepentingan pemasaran WeChat. Apabila menjalankan pemasaran WeChat, perkhidmatan pelanggan adalah bahagian yang penting. Untuk mengurus tetingkap sembang perkhidmatan pelanggan dengan lebih baik, kami boleh menggunakan bahasa PHP untuk pembangunan WeChat. 1. Pengenalan kepada pembangunan PHP WeChat PHP ialah bahasa skrip bahagian pelayan sumber terbuka yang digunakan secara meluas dalam bidang pembangunan Web. Digabungkan dengan antara muka pembangunan yang disediakan oleh platform awam WeChat, kami boleh menggunakan bahasa PHP untuk menjalankan WeChat

Dalam pembangunan akaun awam WeChat, pengurusan tag pengguna ialah fungsi yang sangat penting, yang membolehkan pembangun memahami dan mengurus pengguna mereka dengan lebih baik. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi pengurusan teg pengguna WeChat. 1. Dapatkan openid pengguna WeChat Sebelum menggunakan fungsi pengurusan tag pengguna WeChat, kita perlu mendapatkan openid pengguna terlebih dahulu. Dalam pembangunan akaun awam WeChat, adalah amalan biasa untuk mendapatkan openid melalui kebenaran pengguna. Selepas kebenaran pengguna selesai, kami boleh mendapatkan pengguna melalui kod berikut

Memandangkan WeChat menjadi alat komunikasi yang semakin penting dalam kehidupan orang ramai, fungsi pemesejan tangkasnya digemari oleh sebilangan besar perusahaan dan individu. Bagi perusahaan, membangunkan WeChat menjadi platform pemasaran telah menjadi trend, dan kepentingan pembangunan WeChat secara beransur-ansur menjadi lebih menonjol. Antaranya, fungsi penghantaran kumpulan lebih banyak digunakan Jadi, sebagai pengaturcara PHP, bagaimana untuk melaksanakan rekod penghantaran mesej kumpulan? Berikut akan memberi anda pengenalan ringkas. 1. Memahami pengetahuan pembangunan yang berkaitan dengan akaun awam WeChat Sebelum memahami cara melaksanakan rekod penghantaran mesej kumpulan, I

Cara menggunakan PHP untuk membangunkan akaun awam WeChat Akaun awam WeChat telah menjadi saluran penting untuk promosi dan interaksi bagi banyak syarikat, dan PHP, sebagai bahasa Web yang biasa digunakan, juga boleh digunakan untuk membangunkan akaun awam WeChat. Artikel ini akan memperkenalkan langkah khusus untuk menggunakan PHP untuk membangunkan akaun awam WeChat. Langkah 1: Dapatkan akaun pembangun akaun rasmi WeChat Sebelum memulakan pembangunan akaun rasmi WeChat, anda perlu memohon akaun pembangun akaun rasmi WeChat. Untuk proses pendaftaran khusus, sila rujuk laman web rasmi platform awam WeChat

Dengan pembangunan Internet dan peranti pintar mudah alih, WeChat telah menjadi bahagian yang amat diperlukan dalam bidang sosial dan pemasaran. Dalam era yang semakin digital ini, cara menggunakan PHP untuk pembangunan WeChat telah menjadi tumpuan ramai pembangun. Artikel ini terutamanya memperkenalkan mata pengetahuan yang berkaitan tentang cara menggunakan PHP untuk pembangunan WeChat, serta beberapa petua dan langkah berjaga-jaga. 1. Persediaan persekitaran pembangunan Sebelum membangunkan WeChat, anda perlu menyediakan persekitaran pembangunan yang sepadan terlebih dahulu. Secara khusus, anda perlu memasang persekitaran operasi PHP dan platform awam WeChat
