重庆小潘seo博客

当前位置:首页 > 重庆网络营销 > 小潘杂谈 >

小潘杂谈

delphi 实现微信开发接入微信公众号平台

时间:2020-09-07 09:30:08 作者:重庆seo小潘 来源:
先要学习一下接入的资料,在http://mp.weixin.qq.com/wiki/home/index.html,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号。http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login fun

先要学习一下接入的资料,在http://mp.weixin.qq.com/wiki/home/index.html,因为原理都在,所以一定要认真阅读,然后,利用Delphi实现一个对应函数,然后申请微信公众平台接口测试帐号。http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

function CheckSignature(const signature, timestamp, nonce, token: string): boolean;var

strs: TStringList;tmpStr: string;beginstrs := TStringList.Create;trystrs.Add(token);strs.Add(timestamp);strs.Add(nonce);strs.Sort;tmpStr := strs[0] + strs[1] + strs[2];tmpStr := SHA1(tmpStr);if tmpStr = signature thenResult := TrueelseResult := False;finallyFreeAndNil(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;varFuncName: string;qv: TkbmMWHttpQueryValues;//处理Get请求传递来的参数.beginif Length(Args) < 1 thenkbmMWRaiseException(KBMMW_ERR_SERVICE_HTTP_URLMISSING, 'Missing URL.')elsebeginFuncName := UpperCase(copy(Args[0], 2, Length(Args[0]) - 1));if FuncName.Equals('WECHAT.HTML') thenbegin// 转微信接口qv := TkbmMWHttpQueryValues.Create;qv.AsString := Args[2];//取得get请求传递来的参数.try// 验证接入if qv.ValueByName['echostr'] <> '' then//如果echostr不为空,表明是验证请求beginResult := '';if dmwx.CheckSignature(qv.ValueByName['id'], qv.ValueByName['signature'],qv.ValueByName['timestamp'], qv.ValueByName['nonce']) thenResult := qv.ValueByName['echostr'];//如果验证成功,返回echostr,告知微信服务器验证成功.end;SetResponseMimeType('text/HTML');SetResponsecharset('utf-8');finallyFreeAndnil(qv);end;exit;//结束本次对Get的响应.end;....略去下面的实现在实际的项目,我是这样实现的,将微信的接口代码,实现在一个单元wechatImpl中,再实现一个DataModule,对wechatImpl的方法进一步封装,封装的时候,来实现对数据库的操作。还是以验证为例,来看一下DataModule中是如何实现的?function tdmwx.CheckSignature(id, signature, timestamp, nonce: string): Boolean;beginresult:=False;if not qWXFWH.Active thenqWXFWH.Open;if qWXFWH.Locate('fid', VarArrayOf([id]), []) then//查询服务号表,是否存在对应的id记录beginif wechatImpl.CheckSignature(signature, timestamp, nonce, qWXFWH.FieldByName('FToken').AsString)//存在,则取在表中定义的token值,去调用验证函数.thenResult := 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=1token=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中文网!