欢迎光临本站
我们一直在努力

微信服务器接口开发实例教程

因erp系统需要与微信公众号做数据接口,现准备做一个中间服务器。
开发环境:xe10
使用控件:idhttpserver

因刚开发阶段,在路由路上直接做了测试机的80端口转发,申请微信公众测试号后,却一直配置失败。跟踪发现是服务器无法收到微信发来的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['echostr'] <> '' then
  begin
    Memo1.Lines.Add(ARequestInfo.Params.Values['echostr']);
    AResponseInfo.ContentType := 'text/html; charset=UTF-8';
    AResponseInfo.ContentText := ARequestInfo.Params.Values['echostr'];
  end;
end;

end.
登录后复制

以上就是开发微信服务器接口的实例教程的详细内容,更多请关注有卡有网。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《微信服务器接口开发实例教程》
文章链接:https://www.youkayouwang.com/kaquan-baike/xcx/152913.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。