0

0

delphi 实现微信开发

高洛峰

高洛峰

发布时间:2017-02-23 13:46:22

|

2916人浏览过

|

来源于php中文网

原创

大体思路:

1.用户向服务号发消息,(这里可以是个菜单项,也可以是一个关键词,如:注册会员。)

2.kbmmw web server收到消息,生成一个图文消息给微信,在图文消息中做好自己的url,在url中,可以把第一步消息带来的openid写到url的参数表中。

3.用户点这个图文消息

4.web server收到这个图文消息的url,根据这个url,生成一个网页给微信,这里面关键是把openid写到网页中

5.用户填写这个网页,提交(提交的同时也把openid也提交回来了)

6.Ok,现在得到我想要的内容,最需要的openid.即那个用户提交的,就这样被提交回来了。

7.根据6返回的内容,实现业务逻辑。

 

AutoCoder
AutoCoder

真正实现后端和数据库生成的全栈AI开发平台

下载

openid:做为微信用户,当你关注一个服务号时生成的唯一值,从服务号的角度看,这是你的服务号的关注者。如果你想发消息给你的微信用户,只能通过这个openid.


进入开发:

首先,在这里,可以申请一个测试账号用于开发。过程很简单,用你的手机号申请,给你手机发个验证码,就开通了!
然后,还需要一个静态IP及80端口,理论上讲用动态域名也可以。绑定到你这个开发账号上。
接下来,你还要熟悉一下微信的API,了解一些基本概念。
现在,就可以用delphi开发了!

 

先要学习一下接入的资料,在这里,因为原理都在,所以一定要认真阅读,然后,利用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)     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 实现微信开发 相关文章请关注PHP中文网!

相关文章

微信app下载
微信app下载

微信是一款手机通信软件,支持通过手机网络发送语音短信、视频、图片和文字。微信可以单聊及群聊,还能根据地理位置找到附近的人,带给大家全新的移动沟通体验,有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C++ 设计模式与软件架构
C++ 设计模式与软件架构

本专题深入讲解 C++ 中的常见设计模式与架构优化,包括单例模式、工厂模式、观察者模式、策略模式、命令模式等,结合实际案例展示如何在 C++ 项目中应用这些模式提升代码可维护性与扩展性。通过案例分析,帮助开发者掌握 如何运用设计模式构建高质量的软件架构,提升系统的灵活性与可扩展性。

0

2026.01.30

c++ 字符串格式化
c++ 字符串格式化

本专题整合了c++字符串格式化用法、输出技巧、实践等等内容,阅读专题下面的文章了解更多详细内容。

0

2026.01.30

java 字符串格式化
java 字符串格式化

本专题整合了java如何进行字符串格式化相关教程、使用解析、方法详解等等内容。阅读专题下面的文章了解更多详细教程。

0

2026.01.30

python 字符串格式化
python 字符串格式化

本专题整合了python字符串格式化教程、实践、方法、进阶等等相关内容,阅读专题下面的文章了解更多详细操作。

0

2026.01.30

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

19

2026.01.29

java配置环境变量教程合集
java配置环境变量教程合集

本专题整合了java配置环境变量设置、步骤、安装jdk、避免冲突等等相关内容,阅读专题下面的文章了解更多详细操作。

16

2026.01.29

java成品学习网站推荐大全
java成品学习网站推荐大全

本专题整合了java成品网站、在线成品网站源码、源码入口等等相关内容,阅读专题下面的文章了解更多详细推荐内容。

17

2026.01.29

Java字符串处理使用教程合集
Java字符串处理使用教程合集

本专题整合了Java字符串截取、处理、使用、实战等等教程内容,阅读专题下面的文章了解详细操作教程。

2

2026.01.29

Java空对象相关教程合集
Java空对象相关教程合集

本专题整合了Java空对象相关教程,阅读专题下面的文章了解更多详细内容。

6

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Node.js 教程
Node.js 教程

共57课时 | 9.6万人学习

Rust 教程
Rust 教程

共28课时 | 5万人学习

Vue 教程
Vue 教程

共42课时 | 7.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号