Delphi が WeChat 開発を実装

高洛峰
リリース: 2017-02-23 13:46:22
オリジナル
2549 人が閲覧しました

一般的な考え方:

1. ユーザーはサービス アカウントにメッセージを送信します (これは、メニュー項目またはキーワード (メンバーの登録など) です。)

2.kbmmw Web サーバーはメッセージを受信し、画像とテキスト WeChat にメッセージを送信し、グラフィック メッセージ内に独自の URL を作成します。URL には、メッセージの最初のステップによってもたらされた openid を URL のパラメーター テーブルに書き込むことができます。

3. ユーザーがこのグラフィック メッセージをクリックします

4. Web サーバーはこのグラフィック メッセージの URL を受信し、この URL に基づいて WeChat の Web ページを生成します。ここで重要なのは、Web に openid を書き込むことです。ページ

5. ユーザーがこの Web ページに入力して送信します (送信時に openid も送信されます)

6. これで、必要なコンテンツ、つまりユーザーが送信したものを取得できました。そしてそれは返送されます。

7. 6で返された内容に基づいてビジネスロジックを実装します。

openid: WeChat ユーザーとして、サービス アカウントをフォローするときに生成される固有の値。サービス アカウントの観点から見ると、これはサービス アカウントのフォロワーです。 WeChat ユーザーにメッセージを送信したい場合は、この openid を通じてのみ開発に入ることができます。


:

まず、ここで開発用のテスト アカウントを申請できます。プロセスは非常に簡単で、携帯電話番号を使用して申請し、確認コードを携帯電話に送信するだけで有効になります。
次に、静的 IP とポート 80 も必要です。理論的には、動的ドメイン名も使用できます。開発アカウントにバインドします。
次に、WeChat の API に慣れ、いくつかの基本概念を理解する必要があります。
Delphi を使用して開発できるようになりました。

まず、アクセス情報を学習する必要があります。原理はすべて記載されているため、よく読んでから、Delphi を使用して対応する機能を実装し、WeChat パブリック プラットフォーム インターフェイスのテスト アカウントを申請します。
関数 CheckSignature(const 署名、タイムスタンプ、ノンス、トークン: 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 = signal then
Result := True
else
Result := False;
finally
FreeAndNil(strs);
end;
end;
関数の戻り結果が true の場合、アクセスを意味します成功しました!この機能については、csdn friends がアップロードしたサンプルを参照してください。ありがとうございます。この例では、SHA1 関数のユニットが提供されているため、それをダウンロードし直す必要があります。

この機能を準備したら、次はこの機能をどうやって使うのか?
WeChatサーバーは接続されているWebサーバーにGetリクエストを送信するため、自分で実装したkbmMW Webサーバーの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) kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'URL が見つかりません。')
else
begin
FuncName := 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 リクエスト配信 Come .
try
// アクセスを検証します
if qvalueByname ['echostr'] & lt & gt; '' then// echostr が空でない場合、検証リクエスト
結果: = '=' = '=' = '=' = '=';
場合
結果 := qv.ValueByName['echostr'];//検証が成功した場合、 return echostr で WeChat サーバーに通知します。 Responsecharset('utf-8 '); A 最後に FreeAndnil (qv); // 今回の応答を終了します。以下の実際のプロジェクトに移動します。私はこうです。これを実現するには、WeChat インターフェイス コードが wechatImpl ユニットに実装され、カプセル化されると、wechatImpl メソッドをさらにカプセル化するために DataModule が実装されます。データベースの操作を実装します。検証を例として、それが DataModule でどのように実装されるかを見てみましょう。
function tdmwx.CheckSignature(id, signal, timestamp, nonce: string): Boolean;
beginresult:=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 は kbmMWuniDACQuery オブジェクトで、WeChat サービス アカウントのテーブルを保存するために使用されます。テーブル構造は次のとおりです。
CREATE TABLE WX_FWH (
FID INTEGER,//サービス アカウントの ID。複数のサービスアカウントを管理する目的
FTOKEN VarChar(32),//各サービス番号のトークン値
FAPPID VarChar(16),
FAPPSECRET varchar(16),
FACCESSTOKEN VARCHAR (512),
FEXPIRESIN INTEGER,
FGETDATE DATETIME);
at サーバーを登録するときは、まずこのテーブルに登録情報を追加する必要があります (例: id=1、token=kbmmwtoken1)。対応する登録内容は次のとおりです:
url=www.test.cc/wechat.html? id=1
token=kbmmwtoken1
このようにして、WeChat サーバーが検証リクエストを送信すると、データモジュールの 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 サービス アカウントのフォロワーと対話することです。

WeChat 開発関連の Delphi 実装の詳細については、PHP 中国語 Web サイトに注目してください。


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