這篇文章給大家分享的是有關delphi如何實現(xiàn)微信開發(fā) 的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
十余年的婺源網(wǎng)站建設經(jīng)驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。成都全網(wǎng)營銷推廣的優(yōu)勢是能夠根據(jù)用戶設備顯示端的尺寸不同,自動調(diào)整婺源建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯(lián)建站從事“婺源網(wǎng)站設計”,“婺源網(wǎng)站推廣”以來,每個客戶項目都認真落實執(zhí)行。
大體思路:
1.用戶向服務號發(fā)消息,(這里可以是個菜單項,也可以是一個關鍵詞,如:注冊會員。)
2.kbmmw web server收到消息,生成一個圖文消息給微信,在圖文消息中做好自己的url,在url中,可以把第一步消息帶來的openid寫到url的參數(shù)表中。
3.用戶點這個圖文消息
4.web server收到這個圖文消息的url,根據(jù)這個url,生成一個網(wǎng)頁給微信,這里面關鍵是把openid寫到網(wǎng)頁中
5.用戶填寫這個網(wǎng)頁,提交(提交的同時也把openid也提交回來了)
6.Ok,現(xiàn)在得到我想要的內(nèi)容,最需要的openid.即那個用戶提交的,就這樣被提交回來了。
7.根據(jù)6返回的內(nèi)容,實現(xiàn)業(yè)務邏輯。
openid:做為微信用戶,當你關注一個服務號時生成的唯一值,從服務號的角度看,這是你的服務號的關注者。如果你想發(fā)消息給你的微信用戶,只能通過這個openid.
進入開發(fā):
首先,在這里,可以申請一個測試賬號用于開發(fā)。過程很簡單,用你的手機號申請,給你手機發(fā)個驗證碼,就開通了!
然后,還需要一個靜態(tài)IP及80端口,理論上講用動態(tài)域名也可以。綁定到你這個開發(fā)賬號上。
接下來,你還要熟悉一下微信的API,了解一些基本概念。
現(xiàn)在,就可以用delphi開發(fā)了!
先要學習一下接入的資料,在這里,因為原理都在,所以一定要認真閱讀,然后,利用Delphi實現(xiàn)一個對應函數(shù),然后申請微信公眾平臺接口測試帳號。
function CheckSignature(const signature, timestamp, nonce, token: string): boolean;
var
strs: TStringList;
tmpStr: string;
begin
strs := TStringList.Create;
try
strs.Add(token);
strs.Add(timestamp);
strs.Add(nonce);
strs.Sort;
tmpStr := strs[0] + strs[1] + strs[2];
tmpStr := SHA1(tmpStr);
if tmpStr = signature then
Result := True
else
Result := False;
finally
FreeAndNil(strs);
end;
end;
函數(shù)的返回結果為真時,表示接入成功!該函數(shù),參考csdn朋友上傳的范例,表示感謝。在這個范例中,提供了SHA1函數(shù)的單元,所以,你要下載回來。
準備完這個函數(shù),接下來,如何使用這個函數(shù)呢?
因為微信服務器是向接入的web服務器發(fā)送Get請求,所以,我們要在自己實現(xiàn)的kbmMW web server的PerformGet方法中來調(diào)用這個CheckSignature。
function TDJ_FrmPhoneHTTPService.PerformGet(ClientIdent: TkbmMWClientIdentity; const AURL: string;
const Args: array of Variant): Variant;
var
FuncName: string;
qv: TkbmMWHttpQueryValues;//處理Get請求傳遞來的參數(shù).
begin
if Length(Args) < 1 then
kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'Missing URL.')
else
begin
FuncName := UpperCase(copy(Args[0], 2, Length(Args[0]) - 1));
if FuncName.Equals('WECHAT.HTML') then
begin
// 轉微信接口
qv := TkbmMWHttpQueryValues.Create;
qv.AsString := Args[2];//取得get請求傳遞來的參數(shù).
try
// 驗證接入
if qv.ValueByName['echostr'] <> '' then//如果echostr不為空,表明是驗證請求
begin
Result := '';
if dmwx.CheckSignature(qv.ValueByName['id'], qv.ValueByName['signature'],
qv.ValueByName['timestamp'], qv.ValueByName['nonce']) then
Result := qv.ValueByName['echostr'];//如果驗證成功,返回echostr,告知微信服務器驗證成功.
end;
SetResponseMimeType('text/HTML');
SetResponsecharset('utf-8');
finally
FreeAndnil(qv);
end;
exit;//結束本次對Get的響應.
end;
....略去下面的實現(xiàn)
在實際的項目,我是這樣實現(xiàn)的,將微信的接口代碼,實現(xiàn)在一個單元wechatImpl中,再實現(xiàn)一個DataModule,對wechatImpl的方法進一步封裝,封裝的時候,來實現(xiàn)對數(shù)據(jù)庫的操作。
還是以驗證為例,來看一下DataModule中是如何實現(xiàn)的?
function tdmwx.CheckSignature(id, signature, timestamp, nonce: string): Boolean;
begin
result:=False;
if not qWXFWH.Active then
qWXFWH.Open;
if qWXFWH.Locate('fid', VarArrayOf([id]), []) then//查詢服務號表,是否存在對應的id記錄
begin
if wechatImpl.CheckSignature(signature, timestamp, nonce, qWXFWH.FieldByName('FToken').AsString)//存在,則取在表中定義的token值,去調(diào)用驗證函數(shù).
then
Result := true;
end;
end;
其中,qWXFWH是一個kbmMWuniDACQuery對象,用以保存微信服務號的一張表,表結構如下:
CREATE TABLE WX_FWH (
FID INTEGER,//一個服務號的id,達到管理多個服務號的目的。
FTOKEN VarChar(32),//每個服務號的token值
FAPPID VarChar(16),
FAPPSECRET varchar(16),
FACCESSTOKEN VARCHAR (512),
FEXPIRESIN INTEGER,
FGETDATE DATETIME);
在注冊服務器時,要先在這個表中增加注冊信息,比如:id=1,token=kbmmwtoken1
對應的注冊內(nèi)容為:
url=www.test.cc/wechat.html?id=1
token=kbmmwtoken1
這樣,當微信服務器發(fā)送驗證請求時,會把id當作參數(shù)一并傳遞過來,datamodule的CheckSignature方法,會根據(jù)id的值,取得數(shù)據(jù)表中定義token值,然后再調(diào)用微信接口的驗證方法。
總結一下上面的內(nèi)容,為了實現(xiàn)微信接入,我將實現(xiàn)的代碼分為三層:
1.在kbmmw web server的get方法中調(diào)用數(shù)據(jù)庫層的驗證函數(shù)
2.在數(shù)據(jù)庫層實現(xiàn)驗證函數(shù),從取表中取得預先定義的微信號的相關信息,如id,token,再調(diào)用具體的微信接口
3.實現(xiàn)具體的微信接口,供數(shù)據(jù)庫層調(diào)用。
計劃等微信接口的實現(xiàn)全部完成后共享給朋友們,無奈近期時間緊,雜事多,還需要一段時間。就先把實現(xiàn)完成的思路先放上來分享。
對接入web server的url地址驗證是做微信服務的第一步,所以,上面相關的內(nèi)容一定要理解,才可繼續(xù)進行下去。
實際上是這樣:
關注你服務號的微信用戶,向你的服務號發(fā)送消息,微信平臺,會往你驗證的url進行轉發(fā),這就相當于你微信服務號的微信用戶,向你的Web server發(fā)送消息。你開發(fā)的Web server的目的,就是響應這些消息,與你的微信服務號關注者進行互動!
感謝各位的閱讀!關于“delphi如何實現(xiàn)微信開發(fā) ”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!