[轉載紅魚兒]delphi 實現微信開發(2)接入微信公衆號平臺

先要學習一下接入的資料,在這裏,由於原理都在,因此必定要認真閱讀,而後,利用Delphi實現一個對應函數,而後申請微信公衆平臺接口測試賬號
function CheckSignature(const signature, timestamp, nonce, token: string): boolean;
var
 php

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的目的,就是響應這些消息,與你的微信服務號關注者進行互動!
相關文章
相關標籤/搜索