DELPHI 微信公众平台 订阅号(一)(restserver 的方式失败了,得换控件了)

重无到有,记录连接微信公司平台的过程

2020.06.05编辑:由于restserver只能进行JSON格式的通讯,但微信POST数据是用的XML

一、需要准备的资料

1、一台有外网的服务器,开放80端口

2、注册一个微信公众平台订阅号(个人只能申请这个)

二、建立一个 restserver(dshttpserver的端口号必须是80)用来接入微信开发模式,参考以前写的https://blog.csdn.net/weixin_44387646/article/details/106218176。然后测试一下,能通讯并且收到返回值就可以

三、建立一个新函数让微信可以验证

//引用IdHashSHA

function sha1(input: string): string;
begin
  with tidhashsha1.create do
  try
    result := HashStringAsHex(input);
  finally
    free;
  end;
end;
function checktoken(token, signature, timestamp, nonce, echostr: string): string;
var
  s, s1: string;
  tmp: TStringList;
begin
  tmp := TStringList.Create;
  try
    tmp.Delimiter := ',';
    s := token + ',' + timestamp + ',' + nonce;
    tmp.DelimitedText := s;
    tmp.Sorted := true;
    s := tmp.Strings[0] + tmp.Strings[1] + tmp.Strings[2];
    s1 := sha1(s);
    if s1.ToUpper = signature.ToUpper then
      Result := echostr
    else
      Result := 'error';
  finally
    tmp.Free;
  end;
end;
function Twx.Rwx(Value: string): string;
var
  recv_signature: string;
  recv_timestamp: string;
  recv_nonce: string;
  recv_echostr: string;
  temp_str: string;
begin
  recv_signature := utf8decode(GetInvocationMetadata.QueryParams.Values['signature']);
  recv_timestamp := utf8decode(GetInvocationMetadata.QueryParams.Values['timestamp']);
  recv_nonce := utf8decode(GetInvocationMetadata.QueryParams.Values['nonce']);
  recv_echostr := utf8decode(GetInvocationMetadata.QueryParams.Values['echostr']);
  temp_str := checktoken('在微信上设置的令牌(Token)', recv_signature, recv_timestamp, recv_nonce, recv_echostr);
  GetInvocationMetadata.ResponseContent := temp_str;
  //  GetInvocationMetadata.ResponseContent := recv_signature+recv_timestamp+recv_nonce+recv_echostr;
  //GetInvocationMetaData.CloseSession := True;
//  Result := System.StrUtils.ReverseString(Value);
end;

四、登录微信公众平台,左侧开发中的基本配置,服务器URL:写第二步的那个地址,设置一个token,其它默认

五、上面都成功的情况下可以开启,开启后设置白名单,写自己服务器的IP就可以。

六、说明:中间过程基本按提示进行就可以。

你可能感兴趣的:(delphi,windows,DELPHI,个人小心得,delphi,项目)