[转载红鱼儿]delphi 实现微信开发(2)接入微信公众号平台

简介: 先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号。 function CheckSignature(const signature, timestamp, nonce, token: string): bo...

先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号
function CheckSignature(const signature, timestamp, nonce, token: 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 = signature then
      Result := True
    else
      Result := False;
  finally
    FreeAndNil(strs);
  end;
end;
函数的返回结果为真时,表示接入成功!该函数,参考 csdn朋友上传的范例,表示感谢。在这个范例中,提供了SHA1函数的单元,所以,你要下载回来。

准备完这个函数,接下来,如何使用这个函数呢?
因为微信服务器是向接入的web服务器发送Get请求,所以,我们要在自己实现的kbmMW web server的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) < 1 then
    kbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'Missing URL.')
  else
  begin
    FuncName := UpperCase(copy(Args[0], 2, Length(Args[0]) - 1));
    if FuncName.Equals('WECHAT.HTML') then
    begin
      // 转微信接口
      qv := TkbmMWHttpQueryValues.Create;
      qv.AsString := Args[2];//取得get请求传递来的参数.
      try
        // 验证接入
        if qv.ValueByName['echostr'] <> '' then //如果echostr不为空,表明是验证请求
        begin
          Result := '';
          if dmwx. CheckSignature(qv.ValueByName['id'], qv.ValueByName['signature'],
            qv.ValueByName['timestamp'], qv.ValueByName['nonce']) then
            Result := qv.ValueByName['echostr']; //如果验证成功,返回echostr,告知微信服务器验证成功.
        end;
        SetResponseMimeType('text/HTML');
        SetResponsecharset('utf-8');
      finally
        FreeAndnil(qv);
      end;
      exit;//结束本次对Get的响应.
    end;
....略去下面的实现

在实际的项目,我是这样实现的,将微信的接口代码,实现在一个单元wechatImpl中,再实现一个DataModule,对wechatImpl的方法进一步封装,封装的时候,来实现对数据库的操作。

还是以验证为例,来看一下DataModule中是如何实现的?

function tdmwx.CheckSignature(id, signature, timestamp, nonce: string): Boolean;
begin
  result:=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)//存在,则取在表中定义的token值,去调用验证函数.
    then
      Result := true;
  end;
end;
其中,qWXFWH是一个kbmMWuniDACQuery对象,用以保存微信服务号的一张表,表结构如下:
CREATE TABLE WX_FWH (
    FID INTEGER,//一个服务号的id,达到管理多个服务号的目的。
    FTOKEN VarChar(32),//每个服务号的token值
    FAPPID VarChar(16),
    FAPPSECRET varchar(16),
    FACCESSTOKEN VARCHAR (512),
    FEXPIRESIN INTEGER,
    FGETDATE DATETIME);
在注册服务器时,要先在这个表中增加注册信息,比如:id=1,token=kbmmwtoken1
对应的注册内容为:
url=www.test.cc/wechat.html?id=1
token=kbmmwtoken1
这样,当微信服务器发送验证请求时,会把id当作参数一并传递过来,datamodule的CheckSignature方法,会根据id的值,取得数据表中定义token值,然后再调用微信接口的验证方法。

总结一下上面的内容,为了实现微信接入,我将实现的代码分为三层:
1.在kbmmw web server的get方法中调用数据库层的验证函数
2.在数据库层实现验证函数,从取表中取得预先定义的微信号的相关信息,如id,token,再调用具体的微信接口
3.实现具体的微信接口,供数据库层调用。

计划等微信接口的实现全部完成后共享给朋友们,无奈近期时间紧,杂事多,还需要一段时间。就先把实现完成的思路先放上来分享。

对接入web server的url地址验证是做微信服务的第一步,所以,上面相关的内容一定要理解,才可继续进行下去。
实际上是这样:
关注你服务号的微信用户,向你的服务号发送消息,微信平台,会往你验证的url进行转发,这就相当于你微信服务号的微信用户,向你的Web server发送消息。你开发的Web server的目的,就是响应这些消息,与你的微信服务号关注者进行互动!
目录
相关文章
|
6月前
|
小程序 Java 关系型数据库
基于Java微信小程序智能招聘平台设计和实现(源码+LW+调试文档+讲解等)
基于Java微信小程序智能招聘平台设计和实现(源码+LW+调试文档+讲解等)
|
1月前
|
安全 API 开发者
微信开发者工具里面没有企业微信模式
企业微信与普通微信在应用场景和开发体系上存在本质区别,主要体现在身份认证、功能丰富性和开放能力等方面。企业微信开发需使用特定的API和工具,本文介绍了企业微信开发的基本步骤、特点及开发进度安排,帮助开发者更好地理解和应用企业微信的开发环境。
|
6月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的校园资讯平台微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的校园资讯平台微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
4月前
|
小程序 开发者
第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号
这篇文章介绍了微信小程序的初始化过程,包括如何注册微信小程序账号、下载微信小程序开发者平台,并指导了新建小程序的详细步骤。
第一个微信小程序的初始化过程、小程序微信开发平台的下载、如何注册一个微信小程序的账号
|
4月前
|
前端开发 JavaScript API
微信公众号项目,实现微信支付(具体流程和参数)
微信公众号项目,实现微信支付(具体流程和参数)
|
5月前
|
安全 API Windows
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
支付系统13------支付系统的资料在技术库里的在线支付当中,怎样获取微信平台证书那?怎样获取微信平台证书那?第一步打开我们的微信支付平台的文档中心
|
6月前
|
小程序 前端开发 Java
数学辅导平台|基于微信小程序实现数学辅导平台
数学辅导平台|基于微信小程序实现数学辅导平台
|
6月前
|
小程序 前端开发 安全
微信小程序|大学生党务学习平台的设计与实现
微信小程序|大学生党务学习平台的设计与实现
|
5月前
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的童装购买平台微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的童装购买平台微信小程序的详细设计和实现(源码+lw+部署文档+讲解等)
|
5月前
|
API
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商
支付系统----微信支付24--APlv3介绍,首先我们要引入支付参数,包含商户号,APPID、API秘钥,数字证书,用代码加载到应用程序当中,之后加载商户私钥,商户需要用私钥进行验签,微信平台接收商

热门文章

最新文章