WeChat サーバー インターフェイスを開発するためのサンプル チュートリアル

Y2J
リリース: 2017-05-10 13:56:29
オリジナル
1894 人が閲覧しました

ERP システムは WeChat 公式アカウントとデータを連携させる必要があるため、現在中間サーバーの構築を準備中です。
開発環境:追跡により、サーバーが WeChat からの GET リクエストを受信できないことが判明しました。コードは次のとおりです:


Delphi/Pascal code?

unit Unit1;

interface
 
uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, IdBaseComponent,
  IdComponent, IdCustomTCPServer, IdCustomHTTPServer, IdHTTPServer, IdContext,
  IdHashSHA, IdGlobal;
 
type
  TForm1 = class(TForm)
    IdHTTPServer1: TIdHTTPServer;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure IdHTTPServer1CommandGet(AContext: TIdContext;
      ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
  private
    { Private declarations }
  public
    { Public declarations }
    function SHA1(Input: String): String;
    function CheckSignature(ARequestInfo: TIdHTTPRequestInfo): boolean;
  end;
 
var
  Form1: TForm1;
Const
  Token = 'weixin';
 
implementation
 
{$R *.dfm}
 
function TForm1.SHA1(Input: String): String;
begin
  with TIdHashSHA1.Create do
  try
    Result := LowerCase(HashBytesAsHex(TidBytes(Bytesof(Input))));
  finally
    Free;
  end;
end;
 
 
function TForm1.CheckSignature(ARequestInfo: TIdHTTPRequestInfo): boolean;
var
  signature, timestamp, nonce, echostr: String;
  tmpstr: TStringList;
  temp: String;
begin
  tmpstr := TStringList.Create;
  try
    signature := ARequestInfo.Params.Values['signature'];
    timestamp := ARequestInfo.Params.Values['timestamp'];
    nonce := ARequestInfo.Params.Values['nonce'];
 
    echostr := ARequestInfo.Params.Values['echostr'];
    tmpstr.Add(Token);
    tmpstr.Add(timestamp);
    tmpstr.Add(nonce);
    tmpstr.Sort;
    temp := StringReplace(tmpstr.text, #13#10, '', [rfReplaceAll]);
    Result := SHA1(temp) = signature;
  finally
    tmpstr.Free;
  end;
end;
 
 
procedure TForm1.Button1Click(Sender: TObject);
begin
  IdHTTPServer1.Active := True;
end;
 
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);
begin
  Memo1.Lines.Add('123');
  if CheckSignature(ARequestInfo) then
  if ARequestInfo.Params.Values[&#39;echostr&#39;] <> &#39;&#39; then
  begin
    Memo1.Lines.Add(ARequestInfo.Params.Values[&#39;echostr&#39;]);
    AResponseInfo.ContentType := &#39;text/html; charset=UTF-8&#39;;
    AResponseInfo.ContentText := ARequestInfo.Params.Values[&#39;echostr&#39;];
  end;
end;
 
end.
ログイン後にコピー

以上がWeChat サーバー インターフェイスを開発するためのサンプル チュートリアルの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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