首頁 >微信小程式 >微信開發 >delphi 實現微信開發

delphi 實現微信開發

高洛峰
高洛峰原創
2017-02-23 13:46:222652瀏覽

大體思路:

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
# = TStringList.Create;
  try
    strs.Add(token);
    strs.Add(timestamp);
    strs.Add(nonce);
o#o
o#o#o#o#o#o#o
S;
S;
#S;
S;##S;#; ##    tmpStr := strs[0] + strs[1] + strs[2];
    tmpStr := SHA1(tmpStr);
 ##    else
      Result := False;
  finally
    FreeAndNil(strs);
  end;
end;







##ajj函數的結果回報!函數,參考csdn朋友上傳的範例,表示感謝。在這個範例中,提供了SHA1函數的單元,所以,你要下載回來。

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

function TDJ_FrmPhoneHTTPService.PerformGet(ClientIdent: TkbmMWClientIdentity; const AURL: string;
  const Args: array of Variant): Var ;//處理Get請求傳遞來的參數.
begin

  kb Length(Args) < 1 then
    kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'Missing URL#seMW_ERR_SERVICE_HTTP_URLMISSING, 'Missing URL#se. begin
    FuncName := UpperCase(copy(Args[0], 2, Length(Args[0]) - 1));
    if FuncName.Equals('WECHAT.HTML') then## ##      // 轉微訊號介面
      qv := TkbmMWHttpQueryValues.Create;
          // 驗證接取
        if qv.ValueByName['echostr'] <> '' then
//如果echostr不為空,表示是驗證請求

   ';          if dmwx
.
CheckSignature
(qv.ValueByName['id'], qv.ValueByName['sign .#c ], qv.ValueByName['nonce']) then            Result := qv.ValueByName['echostr'];/如果驗證成功,返回echo#str,告知微信伺服器驗證成功.        end;        SetResponseMimeType('text/HTML');
         FreeAndnil(qv);
      end;      exit;/ /結束這次對Get的回應.    end;
....略去下面的實現

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

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

function tdmwx.CheckSignature(id, signature, timestamp, nonce: string): Boolean;
begin
 Activresult:=False;
  if not qWXFWH.Active then ##H. Open;
  if qWXFWH.Locate('fid', VarArrayOf([id]), []) then//查詢服務編號表,是否有對應的id記錄
  begin
    if wechatImpl.#  begin
    if wechatImpl.CheckSignature( signature, timestamp, nonce, qWXFWH.FieldByName('FToken').AsString)//存在,則取在表中定義的token值,去呼叫驗證函數.
    then
   #  end;
end;
其中,qWXFWH是kbmMWuniDACQuery對象,用於保存微信服務號的一張表,表結構如下:
CREATE TABLE WX_FWH (
    FID INTEGER,///////////管理多個服務號碼的目的。 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 實作微信開發 相關文章請關注PHP中文網!

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