delphi は WeChat の開発と WeChat パブリック アカウント プラットフォームへのアクセスを実現します

高洛峰
リリース: 2017-03-03 09:42:22
オリジナル
3983 人が閲覧しました

まず、http://mp.weixin.qq.com/wiki/home/index.html にあるアクセス情報を調べる必要があります。原理はすべてそこにあるため、必ず読む必要があります。その後、Delphi を使用して対応する機能を 1 つ実装し、WeChat パブリック プラットフォーム インターフェイスのテスト アカウントを申請します。 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

function CheckSignature(const 署名、タイムスタンプ、ノンス、トークン: 文字列): boolean;
var

strs: TStringList;
tmpStr: string;
begin

strs := TStringList.Create;
try
strs.Add(token);
strs.Add(timestamp);
strs.Add(nonce);

str s .Sort;
tmpStr := strs[0] + strs[1] + strs[2];
tmpStr := SHA1(tmpStr);

if tmpStr = 署名 then
結果 := True
else
結果 := False ;
finally
FreeAndNil(strs);
end;
end;
関数の戻り結果がtrueの場合は、アクセスが成功したことを意味します。この機能については、csdn friends がアップロードしたサンプルを参照してください。ありがとうございます。この例では、SHA1 関数のユニットが提供されているため、それをダウンロードし直す必要があります。

この機能を準備したら、次はこの機能をどうやって使うのか?
WeChatサーバーは接続されているWebサーバーにGetリクエストを送信するため、自分で実装したkbmMW WebサーバーのPerformGetメソッドでこのCheckSignatureを呼び出す必要があります。 OnFunction TDJ_FRMPHONEHTTPSERVICE.PERFORMGET (ClientId: TKBMMMWCLIENTITY; Const Aurl: String;
Array of Variant): Variant; cname: string;
qv: tkbmmmwhtpquryValues; // get リクエストによって渡されたパラメータを処理します。 ) < 1 then
kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'URL が見つかりません。')
else
begin
UpperCase(copy(Args[0], 2, Length(Args[0])) - 1));
if FuncName.Equals ('WECHAT.HTML') then
begin
// WeChatインターフェースに転送
qv := TkbmMWHttpQueryValues.Create;
qv.AsString := Args[2];// getリクエスト配信のパラメータを取得します
try
/qv.valuebyname ['echostr']&lt; . ValueByname ['Echostr']; // 検証が成功した場合は、Echostr に戻り、検証が成功したことを通知します。
SetResponsemimetype ('text/html'); ;
End;
exit;// Get へのこの応答を終了します。
end;
.... 以下の実装は省略します

実際のプロジェクトでは、このように実装し、WeChat インターフェイスのコードを追加し、ユニットで実装しましたwechatImpl を実装し、wechatImpl メソッドをさらにカプセル化する DataModule を実装し、カプセル化する際にデータベースの動作を実現します。

検証を例として、それが DataModule でどのように実装されるかを見てみましょう。

function tdmwx.CheckSignature(id, signal, 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)/ / が存在する場合は、テーブルで定義されたトークン値を取得し、検証関数を呼び出します。
then
結果 := true;
end;
end;
このうち、qWXFWH は WeChat サービスを保存するために使用される kbmMWuniDACQuery オブジェクトですaccount Table、テーブル構造は次のとおりです:
CREATE TABLE WX_FWH (
FID INTEGER,//複数のサービス アカウントを管理する目的を達成するためのサービス アカウントの ID。
FTOKEN VarChar(32),//トークンの値各サービス アカウントの
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
このように、WeChat サーバーが検証リクエストを送信するときに、ID がパラメータ datamodule として渡されます。 CheckSignature メソッドは、ID 値に基づいてデータ テーブルに定義されたトークン値を取得し、WeChat インターフェイスの検証メソッドを呼び出します。

上記の内容を要約すると、WeChat アクセスを実現するために、実装されたコードを 3 つの層に分割しました。
1. kbmmw Web サーバーの get メソッドでデータベース層の検証関数を呼び出します
2. 検証関数を実装します。データベース層で、ID やトークンなどの事前定義された WeChat 関連情報をテーブルから取得し、特定の WeChat インターフェイスを呼び出します
3. データベース層が呼び出す特定の WeChat インターフェイスを実装します。

WeChatインターフェースの実装が完了したら、友人と共有する予定ですが、残念ながら最近は時間が限られており、雑用が多いため、しばらく時間がかかります。まずは実装に向けたアイデアを共有しましょう。

Webサーバーに接続されているURLアドレスの検証はWeChatサービスを提供するための最初のステップであるため、続行する前に上記の関連内容を理解する必要があります。
実際は次のようになります:
サービス アカウントをフォローしている WeChat ユーザーがサービス アカウントにメッセージを送信すると、WeChat プラットフォームはメッセージを確認した URL に転送します。これは、WeChat サービス アカウントの WeChat ユーザーがサービスにメッセージを送信するのと同じです。 Web サーバーがメッセージを送信します。開発する Web サーバーの目的は、これらのメッセージに応答し、WeChat サービス アカウントのフォロワーと対話することです。

Delphi による WeChat 開発の実現と WeChat パブリック アカウント プラットフォームへのアクセスに関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート