サンプルコードを公開しました! delphi+intraweb を使用して WeChat 開発 1 ~ 4 のコード サンプルをダウンロードしてください。これはサンプル コードですが、パッケージは完成しており、自己拡張や修正に適しています。
iw14.0.50 は、完全な httphandler 関数が追加されたことです。最後に、アドレス バーに URL を直接入力して、iw 関数ページを開くことができます。 EasyUI として; 表示モード ダイアログ ボックスが煩わしくなくなりました。これで、初めて主流の Web 開発ツールに近づいたように感じます。
とても興奮しているので、試してみましょう。実際、iw にはまだ落とし穴がたくさんありますが、それについては後ほど説明します...
1. 新しい iw プロジェクトを作成し、スタンドアロン サーバー/サービスを選択して開発するのが理想的です。このモードでは、正式にリリースされると、ライブラリ タイプのプロジェクトを作成して .net サーバーに公開できるため、デバッグが非常に便利になります。 (はい、正しく読みました。iw は isapi モードから離脱し、.net mvc4 アプリケーションと同じように IIS にデプロイできるようになりました。後で説明するように、.net 仮想ホストも iw アプリケーションを公開できます。大幅な改善です。)
2. プロジェクトを保存した後、たとえば wxapi.pas という名前の新しいユニット ファイルをプロジェクトに追加します。このファイル内のコードは WeChat アクセス処理を担当します。コードは次のとおりです:
EInterface erUses クラス、iW.Content.base、System.Sysutils、httpapp、iWapplication、
i i
Type
//// & gt; クラスTContentBase から継承されたものは、asp.net の httphandler と同等です
///
TWxApi = class(TContentBase)
protected
function Execute(aRequest: THtt pRequest; aReply: THttpReply; const aPathname: string ; aSession: TIWApplication ; aParams: TStrings): Boolean; public
public コンストラクター Create; end
uses rSessionUnit、Crypt.SHA1; クエスト: THttpRequest;
aPathname: string; TIWApplication;
aParams: TStrings): ブール値;
タイムスタンプ: 文字列;
署名:= True; ']; '];
strs := TStringList.Create;
strs.Add('MyTestToken'); // トークンは WeChat インターフェイスの設定情報と一致している必要があります
strs.Add(timestamp); ;
begin
aReply.WriteString(echostr)
end else begin
aReply.WriteString('このプロンプトが表示された場合は、このリンク アドレスが WeChat インターフェイス アドレスとして使用できることを意味します。 ');
end;
aSession.Terminate; // セッション リソースを解放します。このハンドラーはセッションを必要としません。
end; iwForm を使用する必要がある場合は、使用できる TContentForm 基本クラスもあります。ブラウザのアドレス バーに URL を入力して iwform を直接開くこともできます。 TWxApi.Execute のコードは WeChat アクセス用のコードです。理解できない場合は、WeChat ヘルプ: WeChat アクセス ガイドを参照してください。
3. この httphandler を ServerController に登録し、ServerController 登録コードを直接ポストします:
procedure TIWServerController.IWServerControllerBaseConfig(Sender: TObject);
begin
// ServerController.OnConfig イベントで、定義した WeChat ハンドラーを登録します
// ServerController。 Onconfigイベントは、アプリケーションのライフサイクルで1回しか実行されません、最初に /$/start を実行してセッションを開始する必要があります。その後、 // 通常、/wxapi.php ページにアクセスできます。これは明らかに必要なものではありません。
end; ://localhost/wxapi.php
登録したコントローラーにアクセスできます。
しかし、このコードには小さな落とし穴があります。詳細については、私のコードのコメントを参照してください。
落とし穴は、ハンドラーが登録された後、iw アプリケーションが開始されることですが、プログラムを開始するためにブラウザーのアドレス バーに /$/start を入力する代わりに、/wxapi.php を直接入力すると httphandler の検証に失敗し、ページは自動的にメイン フォームに移動します。ヘルプを読んだ後、TContentBase.RequiresSessionStart:=false を設定する必要があることがわかりました。そうでない場合、iw アプリケーションは httphandler を使用する前に、まずセッションを開始してメイン フォームにアクセスする必要があります。ヘルプに従って、TContentBase.RequiresSessionStart:=false を設定しました。 /wxapi.php を直接入力しても機能しませんが、再度メイン フォームに移動すると、httphandler コードが実際に実行されたことが判明したため、404 コード エラーが表示されます。エラー。マルチパーティの検証と実験により、TContentBase.CanStartSession:= True を設定する必要があることがわかりました。笑、これはヘルプには記載されていませんが、おそらく新しいバージョンで新しく追加された属性です。さて、アドレスバーに
http://localhost/wxapi.php
と入力すると、ページが通常どおり開くことができます。
が、実際には構成が失敗したことを示すメッセージが表示されます。何が起こっているのでしょうか? 私が使用したコードは、他の人が作成した WeChat アクセス インターフェイス コードの Delphi バージョンからコピーされたものでした。そのとき、最初に思ったのは、ページのエンコードが間違っているということでした。 iw のハンドラーのデフォルトのエンコーディングを UTF-8 形式に変更したので、gbk、iso-8859-1 などのエンコーディング形式を試しましたが、上記のエラーが表示されました。仕方なく、ハンドラー コードが実行されたかどうかをログに記録しました。結果は衝撃的でした。しかし、ローカル マシンでデバッグすると、ハンドラー コードは実行されませんでした。実サーバーのブラウザで閲覧しても問題ありません。何日もかけてさまざまなテストと修正を行った後、私はあきらめるつもりでしたが、iw の httphandler サンプルを調べたところ、その ServerController: OnBrowserCheck にイベントが実装されていることがわかりました。同じイベント コードをテスト用に自分のコードに追加しました。すごい、うまくいきました。 。 。 procedure TIWServerController.IWServerControllerBaseBrowserCheck( 、ははは、ほんの数行のコードに数日苦労しましたが、ついに WeChat 開発に使用できるようになりました。
aSession: TIWApplication; var rBrowser: TBrowser);
begin
// このイベント コードは非常に重要です。私はここで数日間行き詰まっています。
//
// このイベントが実装されていない場合、どのブラウザでも /wxapi.php を入力すると正常に応答できます。
// WeChat で設定が失敗したことが示された場合にのみ、コード内のログ出力を使用したことがわかりました。 WeChat リクエストは受信できますが、
// TWxApi.Execute メソッドは実行されません。その後、公式 Web サイトにアクセスして関連するヘルプを読んだところ、ブラウザのみをサポートしていることがわかりました
// ブラウザは出力に正常に応答できます。 WeChat によって送信された TWxApi.Execute メソッド この Web リクエストは明らかに既知のブラウザーに属しません
rBrowser が TOther の場合、開始します
rBrowser := TInternetExplorer.Create(8); // ページのコンテンツを出力します互換性のある IE8 ページの閲覧
end;
end;