如何用delphi实现短信同步接口


我讲移动的短信同步接口用delphi实现
首先来说说什么是同步接口,就是移动的短信,如果有一个手机定制了公司某个栏目上,移动会通过一个www.的地址,post过来一个xml的文档
移动的IVR,或联通的 都要求有这样的接口,用于处理用户的定制以即取消请求。
而我们所实现的就是做一个WWW的服务器,接收这个XML文档,然后分析,对自己的数据做更新,然后回复一个XML文档
大家不要一看到WWW就想到IIS,或TOMCAT一类的,其实delphi也可以做WWW服务器
在delphi6.0中有一个控件叫indyhttpserver
大家可以在控件栏中找到它。
你把这个东东一放到你的窗体上,然后设置它的bindings属性
这样一个WWW服务器就出来了,剩下的就是做一些交互操作。如果客户端POST过来一个XML文档,我们要怎么获得这个文档呢,答案就在这个事件中。在这个事件中就是对用户的请求做出反应的一个事件。我的处理代码如下,然后我一行一行来讲解 


 Tel, ActionID, mdn, transactionid, Re: WideString;


begin


  if ((RequestInfo.Command = 'POST')) then begin


    Re := RequestInfo.UnparsedParams;


    Memo1.Lines.Add(RequestInfo.UnparsedParams);

 


    transactionid := MyGet(copy(Re, Pos('<TransactionID', Re) + 14, 100));


    Tel := MyGet(copy(Re, Pos('<MSISDN>', Re) + 8, 100));


    ActionID := MyGet(copy(Re, Pos('<ActionID>', Re) + 10, 100));

 


  if(ActionID = '2') then begin


    if ((MyGet(copy(Re, Pos('<SPServiceID>', Re) + 13, 100)) = '-0605700') ) then


      ADOCommand1.commandText := 'Insert into Indata (did,cid,context,slrq) values ('''


        + Tel + '''' + ',''' + MyGet(copy(Re, Pos('<SPServiceID>', Re) + 14, 100)) + ''''


        + ',''' + 'QZQX' + '''' + ',''' + DateTimeToStr(Now())+''')'


    else


      ADOCommand1.commandText := 'Insert into Indata (did,cid,context,slrq) values ('''


        + Tel + '''' + ',''' + MyGet(copy(Re, Pos('<SPServiceID>', Re) + 14, 100)) + ''''


          + ',''' + 'QZQX' + '''' + ',''' + DateTimeToStr(Now())+''')';


    Memo1.Lines.Add(ADOCommand1.commandText);

 


  end;

 


  if(ActionID = '1') then begin


    if ((MyGet(copy(Re, Pos('<SPServiceID>', Re) + 13, 100)) = '-0605700') ) then


      ADOCommand1.commandText := 'Insert into Indata (did,cid,context,slrq) values ('''


        + Tel + '''' + ',''' + MyGet(copy(Re, Pos('<SPServiceID>', Re) + 14, 100)) + ''''


        + ',''' + 'QZ' + '''' + ',''' + DateTimeToStr(Now())+''')'


    else


      ADOCommand1.commandText := 'Insert into Indata (did,cid,context,slrq) values ('''


        + Tel + '''' + ',''' + MyGet(copy(Re, Pos('<SPServiceID>', Re) + 14, 100)) + ''''


          + ',''' + 'GL' + '''' + ',''' + DateTimeToStr(Now())+''')';


    Memo1.Lines.Add(ADOCommand1.commandText);

 


  end;

 

 


    ADOCommand1.Execute;

 

 


    mdn := '<?xml version="1.0" encoding="utf-8"?>'


      + '<SOAP-ENV:Envelope'


      + ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"'


      + ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"'


      + ' xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"'


      + ' xmlns:SOAP-ENC="'">http://schemas.xmlsoap.org/soap/encoding/">'


      + '<SOAP-ENV:Header>'


      + '<TransactionID'


      + transactionid;


    mdn := Mdn + '</TransactionID>'


      + '</SOAP-ENV:Header>'


      + '<SOAP-ENV:Body>'


      + '<SyncOrderRelationResp xmlns=' + '"'">http://www.monternet.com/dsmp/schemas/">'


      + '<MsgType>SyncOrderRelationResp</MsgType>'


      + '<Version>1.5.0</Version>'


      + '<hRet>0</hRet>'


      + '</SyncOrderRelationResp>'


      + '</SOAP-ENV:Body>'


      + '</SOAP-ENV:Envelope>';

 

 


ResponseInfo.ContentText := MDn;

 

 


大家把窗口最大化来看 


 if ((RequestInfo.Command = 'POST')) then begin


首先看这行,这行是看用户的请求是不是POST请求


如果是get请求则不予理睬


Re := RequestInfo.UnparsedParams;

 


而这一行就是关键了,这行就是取出用户POST过来的XML文档


在这里,对我们而言它只是一个字符串,大家在下面就可以参照移动的相关协议对自己的数据库做相关处理


ResponseInfo.ContentText := MDn;而这句,就是将要回复的信息回复给客户端


如果大家只想做一个简单的服务器那么就只需要加上一行。


ResponseInfo.ContentText := "hell word!!";


然后设置一下你的idhttpserver.bindings


为你自己的IP加端口,如192.168.1.1:80


然后把idhttpserver的active设为true


然后运行,然后打开你的IE输入192.168.1.1


你就会看到hello word了。呵呵!


这里避开了对XML的解析。因为移动的XML比较简单。不需要XML解析器基本就能搞定


在这里,如果大家想让自己的程序加上WWW的功能,在这里不失为一个好方法,比较实用,

---------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------
成都-兔烧(368242315) 10:22:20


怎么加上?


种瓜的(40140203) 10:23:03


放上那个控件啊,然后在 里面加上你想要显示给客户的内容就成了


种瓜的(40140203) 10:23:13


比如工资表的输出啊。呵呵!


种瓜的(40140203) 10:24:12


这个可不用装IIS一类的东东。方便


成都-兔烧(368242315) 10:24:30


是不是要判断客户端的请求?比如GET某个文件?然后把这个文件发送到客户端?


种瓜的(40140203) 10:24:36


对啊


成都-兔烧(368242315) 10:24:44


怎么发送呢


种瓜的(40140203) 10:24:52


ResponseInfo.ContentText


种瓜的(40140203) 10:25:10


ResponseInfo.ContentStream

 


种瓜的(40140203) 10:25:28


在那个事件里面设置这两个属性就可以了


种瓜的(40140203) 10:25:42


就是返回给客户的内容 


成都-兔烧(368242315) 10:25:42


contenttext是发送文件?


ContentStream 是发送数据流? 


种瓜的(40140203) 10:25:46



成都-兔烧(368242315) 10:26:07


。。。。。。有什么不同?


种瓜的(40140203) 10:26:09


你可以先将数据库变成html然后发给客户就成了


杭州-Tommy(109292963) 10:26:26


把数据库变成html?


种瓜的(40140203) 10:26:33


一个是流,一个是字符而已


北京-不赖猴(35927925) 10:28:27


是把数据库动态生成HTML文档.

 


种瓜的(40140203) 10:27:26


看你自己怎么处理了,有很多工具啥,可以把数据导出成HTML,然后以文本的形式打开

 

 


成都-兔烧(368242315) 10:27:28


那这里可以用ContentText?


种瓜的(40140203) 10:28:06

 


ContentText:=HTML文件的内容


种瓜的(40140203) 10:28:23


客户端就会看到这张表了


成都-兔烧(368242315) 10:28:39


如果有图片呢?


杭州-Tommy(109292963) 10:28:49


支持二进制吗?


种瓜的(40140203) 10:29:04


不用二进制,文本的HTML就成


广州-星若清(405409236) 10:29:17


种瓜,问下,文件内容大小有何限制没有?


北京-不赖猴(35927925) 10:31:04


这里跟什么样式没关系,网页是什么,显示就是什么....网页的处理有其他资料.


种瓜的(40140203) 10:29:44


如果超过string的大小 ,你就用流啥。


北京-不赖猴(35927925) 10:31:41


其实你们问的问题都是跟那个控件有关系.性能都依靠那个控件.


种瓜的(40140203) 10:30:16


对。


种瓜的(40140203) 10:32:14


在delphi目录下有一个例子,完整的描述了这个控件的用法,大家可以打开来看


种瓜的(40140203) 10:32:45


在indy/httpserver目录下面  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值