先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用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的目的,就是响应这些消息,与你的微信服务号关注者进行互动!

[转载红鱼儿]delphi 实现微信开发(2)接入微信公众号平台的更多相关文章

  1. Vue集成微信开发趟坑:公众号以及JSSDK相关

    首先,类库方面,Vue中引入JSSDK的话,请引入weixin-js-sdk,而不是weixin-jsapi,原因在于weixin-jsapi不是最新版:还要注意JS接口安全域名,不需要http前缀, ...

  2. [转载红鱼儿]delphi 实现微信开发(1)

    大体思路: 1.用户向服务号发消息,(这里可以是个菜单项,也可以是一个关键词,如:注册会员.) 2.kbmmw web server收到消息,生成一个图文消息给微信,在图文消息中做好自己的url,在u ...

  3. [转载红鱼儿]Delphi实现微信开发(3)如何使用multipart/form-data格式上传文件

    开始前,先看下要实现的微信接口,上传多媒体文件,这个接口是用Form表单形式上传的文件.对我来说,对http的Form表单一知半解,还好,查到这个资料,如果你也和我一样,必须看看这篇文章. 在xali ...

  4. [转载红鱼儿]Delphi XE7 update1进步太大了

    写以下的文字是怀着无比兴奋的心情写的,急于同朋友们分享XE7的进步! 1.更新的bug列表并不全 通过bug修正列表及发布的消息,可以看到up1修正了很多bug,正如我所说,有些bug并没有写到发布的 ...

  5. C#开发微信门户及应用(27)-公众号模板消息管理

    通过模板消息接口,公众号能向关注其账号的用户发送预设模板的消息.模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等.不支持广告等营销类消 ...

  6. C#开发微信门户及应用(26)-公众号微信素材管理

    微信公众号最新修改了素材的管理模式,提供了两类素材的管理:临时素材和永久素材的管理,原先的素材管理就是临时素材管理,永久素材可以永久保留在微信服务器上,微信素材可以在上传后,进行图片文件或者图文消息的 ...

  7. 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

    原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建 ...

  8. 微信公众号平台接口开发:基础支持,获取access_token

    新建Asp.net MVC 4.0项目 WeChatSubscript是项目UI层 WeChatTools是封装操作访问公众号接口的一些方法类库 获取AccssToken 我们要的得到AccessTo ...

  9. 微信公众号平台接口开发:基础支持,获取微信服务器IP地址

    官方说明 目前看不出来这个接口有哪些具体运用,但是既然有这个接口,那我们就试试能不能用 访问接口 修改WeCharBase.cs,新增以下2个方法 public static string Serve ...

随机推荐

  1. 8. myeclipse10 svn插件安装

    1.在myeclipse安装目录下找到dropins文件夹,并在下面创建svn文件夹 2. 解压site-1.8.22.zip 3. 4. 5. 6.

  2. spring securiry Xml 配置 登陆

    参考:https://blog.csdn.net/yin380697242/article/details/51893397 https://blog.csdn.net/lee353086/artic ...

  3. input文本框 放上图片img 通过padding relative和absolute 的实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. python 2 类与对象

    1.类与对象的概念 类即类别.种类,是面向对象设计最重要的概念,从一小节我们得知对象是特征与技能的结合体,而类则是一系列对象相似的特征与技能的结合体. 那么问题来了,先有的一个个具体存在的对象(比如一 ...

  5. $.ajax的重写

    //2018-07-05 项目使用 var _ajax=$.ajax; //重写jquery的ajax方法 $.ajax=function(opt){ //备份opt中error和success方法 ...

  6. python, Django 的安装

    yum install zlib yum install zlib-devel yum install openssl-devel 否则导致安装setuptools出错,还需要重新编译python 如 ...

  7. 系统批量运维管理器pexpect的使用

    # pip install pexpect 或 # easy_install pexpect 1 #!/usr/bin/env python 2 import pexpect 3 child = pe ...

  8. nginx-----惹不起的端口修改

    1,查看端口是否被占用 打开CMD,输入输入netstat -aon | findstr :80 出现: TCP    0.0.0.0:80             0.0.0.0:0        ...

  9. 抽象类(abstract class)

    package com.bjsxt.oop.abstractClass; //抽象类 public abstract class Animal { //因为父类的方法总是被重写 那就没写的必要了 但是 ...

  10. 大型运输行业实战_day03_1_基于intellij idea的非maven spring+springMVC+mybatis搭建

    1.搭建标准web项目结构 搭建完成后的项目结构如图 1.创建普通web项目(略) 2.在lib中添加jar包 3.在resources中添加spring-config.xml主配置文件 <?x ...