91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

delphi如何實現微信開發

發布時間:2021-01-28 15:11:49 來源:億速云 閱讀:422 作者:小新 欄目:移動開發

這篇文章給大家分享的是有關delphi如何實現微信開發 的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

大體思路:

1.用戶向服務號發消息,(這里可以是個菜單項,也可以是一個關鍵詞,如:注冊會員。)

2.kbmmw web server收到消息,生成一個圖文消息給微信,在圖文消息中做好自己的url,在url中,可以把第一步消息帶來的openid寫到url的參數表中。

3.用戶點這個圖文消息

4.web server收到這個圖文消息的url,根據這個url,生成一個網頁給微信,這里面關鍵是把openid寫到網頁中

5.用戶填寫這個網頁,提交(提交的同時也把openid也提交回來了)

6.Ok,現在得到我想要的內容,最需要的openid.即那個用戶提交的,就這樣被提交回來了。

7.根據6返回的內容,實現業務邏輯。

openid:做為微信用戶,當你關注一個服務號時生成的唯一值,從服務號的角度看,這是你的服務號的關注者。如果你想發消息給你的微信用戶,只能通過這個openid.


進入開發:

首先,在這里,可以申請一個測試賬號用于開發。過程很簡單,用你的手機號申請,給你手機發個驗證碼,就開通了!
然后,還需要一個靜態IP及80端口,理論上講用動態域名也可以。綁定到你這個開發賬號上。
接下來,你還要熟悉一下微信的API,了解一些基本概念。
現在,就可以用delphi開發了!

先要學習一下接入的資料,在這里,因為原理都在,所以一定要認真閱讀,然后,利用Delphi實現一個對應函數,然后申請微信公眾平臺接口測試帳號。
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;
函數的返回結果為真時,表示接入成功!該函數,參考csdn朋友上傳的范例,表示感謝。在這個范例中,提供了SHA1函數的單元,所以,你要下載回來。

準備完這個函數,接下來,如何使用這個函數呢?
因為微信服務器是向接入的web服務器發送Get請求,所以,我們要在自己實現的kbmMW web server的PerformGet方法中來調用這個CheckSignature。

function TDJ_FrmPhoneHTTPService.PerformGet(ClientIdent: TkbmMWClientIdentity; const AURL: string;
 const Args: array of Variant): Variant;
var
 FuncName: string;
 qv: TkbmMWHttpQueryValues;//處理Get請求傳遞來的參數.
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請求傳遞來的參數.
     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;
....略去下面的實現

在實際的項目,我是這樣實現的,將微信的接口代碼,實現在一個單元wechatImpl中,再實現一個DataModule,對wechatImpl的方法進一步封裝,封裝的時候,來實現對數據庫的操作。

還是以驗證為例,來看一下DataModule中是如何實現的?

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值,去調用驗證函數.
   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
對應的注冊內容為:
url=www.test.cc/wechat.html?id=1
token=kbmmwtoken1
這樣,當微信服務器發送驗證請求時,會把id當作參數一并傳遞過來,datamodule的CheckSignature方法,會根據id的值,取得數據表中定義token值,然后再調用微信接口的驗證方法。

總結一下上面的內容,為了實現微信接入,我將實現的代碼分為三層:
1.在kbmmw web server的get方法中調用數據庫層的驗證函數
2.在數據庫層實現驗證函數,從取表中取得預先定義的微信號的相關信息,如id,token,再調用具體的微信接口
3.實現具體的微信接口,供數據庫層調用。

計劃等微信接口的實現全部完成后共享給朋友們,無奈近期時間緊,雜事多,還需要一段時間。就先把實現完成的思路先放上來分享。

對接入web server的url地址驗證是做微信服務的第一步,所以,上面相關的內容一定要理解,才可繼續進行下去。
實際上是這樣:
關注你服務號的微信用戶,向你的服務號發送消息,微信平臺,會往你驗證的url進行轉發,這就相當于你微信服務號的微信用戶,向你的Web server發送消息。你開發的Web server的目的,就是響應這些消息,與你的微信服務號關注者進行互動!

感謝各位的閱讀!關于“delphi如何實現微信開發 ”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴海县| 河池市| 建昌县| 岢岚县| 诏安县| 长宁区| 嘉兴市| 双江| 香格里拉县| 贺州市| 沛县| 乌拉特中旗| 白山市| 湖南省| 惠水县| 婺源县| 韶山市| 江安县| 息烽县| 思南县| 东方市| 昭平县| 铜鼓县| 洪泽县| 清河县| 台北市| 泽库县| 夏邑县| 崇明县| 库尔勒市| 雷山县| 莲花县| 彰化县| 康定县| 右玉县| 定日县| 宁海县| 三台县| 阿图什市| 宿松县| 洪雅县|