关于调用Webservice的认证 ( 积分: 100 )

  • 主题发起人 主题发起人 dgxum
  • 开始时间 开始时间
D

dgxum

Unregistered / Unconfirmed
GUEST, unregistred user!
刚碰到一个问题,一个项目中使用了WEBSERVICE的认证功能
我要写个客户端,调用WEBSERVICE,但使用接口前要认证,
不知道要写哪些代码才行进行认证。
这个WEBSERVICE的URL是:
http://220.194.48.132:8801/services/httpSmsService?wsdl
大哥们导入看看。
 
The page cannot be displayed
 
可能是对方的服务器的问题吧,但是有谁能告诉我要如何认证呢。
对方给我的登录信息就是:
loginname=test
loginpass=123456
要如何才能通过认证啊
 
Post登陆数据到指定的地址,然后根据登陆数据,返回不同的状态,例如
Data := '<?xml version=&quot;1.0&quot; encoding=&quot;gb2312&quot;?>' +
'<nodes>' +
'<username description=&quot;用户名&quot;>' + tsUserName + '</username>' +
'<password description=&quot;密码&quot;>' + tsPWD + '</password>' +
'<mysoft description=&quot;软件类别&quot;>大富翁论坛' + configtmp.sType + '</mysoft>' +
'<myversion description=&quot;软件版本号&quot;>' + configtmp.sVer + '</myversion>' +
'</nodes>';
WEBSERVICE根据你的登陆信息,例如版本名字,版本号等,返回软件的状态以及你的帐号状态
如:
sNowTime: TDateTime; //与服务器同步的时间
sState: string; //连接状态
sErr: string; //返回状态
sAccountstate: string; //帐号激活状态
...................


你的WEBSERVICE可以写成这样
<?xml version=&quot;1.0&quot; encoding=&quot;GB2312&quot; ?>
- <nodes>
<ret description=&quot;成功标志&quot;>成功</ret>
<servertime description=&quot;服务器时间&quot;>2007-4-11 11:40:10</servertime>
<smsid description=&quot;某服务账号&quot;>A6B995A5B086D361</smsid>
<meetid description=&quot;某服务账号&quot;>7293E142C3907</meetid>
<ipid description=&quot;某服务账号&quot;>55E37ACD64FC4816</ipid>
<advlink>http://www.delphibbs.com</advlink>
- <mystate>
<accountstate description=&quot;账号状态&quot;>帐号状态值</accountstate>
<statedescription>帐号描述:大富翁论坛欢迎尔</statedescription>
<meet>状态值</meet>
<sms>状态值</sms>
</mystate>
- <myservices>
<appname>sms</appname>
<mydescription>某浏览服务器</mydescription>
<serverip>192.168.0.3</serverip>
<bakserverip />
<appname>某服务</appname>
<mydescription>某浏览服务器</mydescription>
<serverip>192.168.0.2</serverip>
<bakserverip />
</myservices>
</nodes>


根据返回消息,处理登陆软件的当前状态,是否可用等等,


有点乱,你对付看吧,以前写过类似登陆的,
 
楼上的大哥可能误解了我的意思,
服务端是其它公司做的,我是要做的是客户端,
不知道如何才能登录,如不登录,服务端就会返回
GetRelation Service Should be Authenticated.
 
&quot;&quot;服务端是其它公司做的,我是要做的是客户端&quot;

你既然做的客户端,那更简单了,和他们要接口协议,

你如果只做客户端,那就是按协议格式post数据,根据返回的数据判断状态.
 
大哥,我现在手里有接口协议啊,
但为独认证不会搞
也按照标准导入了WSDL。
调用函数就出现GetRelation Service Should be Authenticated. 信息
对方公司也给了用户名和密码,关键是不知道怎么用这个用户名和密码啊。
他们的用户认证不是在函数中的参数方式提供的。
 
楼上的要接口协议我可以给你
我的邮箱:believetech@163.com
qq:19955091
 
晕,
你只做的客户端,而认证是服务端的工作,你又说服务端是别的公司写的,你还写啥啊?,
你只要在客户端按协议格式post登陆数据即可,
至于密码验证等,那是服务端的事情,
客户端登陆post数据,服务端做验证,然后会把状态和信息返回给你,
如:用户名或密码正确与否,其他服务的状态等.

你既然有协议了,那按我上面4楼写的部分,把登陆信息post给服务端即可,

要弄清楚,认证部分是服务端的工作,客户端只是提交信息,按返回信息状态操作!
 
fkekennan大哥,你下载这个文件看一下就明白我的意思了:
http://202.105.21.244/SMS/wsdl_lt.rar
 
我刚抽时间看了下,觉得有点乱,认证和服务的节点该划分开,

认证的只做认证,有相关服务的,才返回服务节点,

没仔细看你们的认证的webservices,下面是我自己写的登陆提交的部分,可参考:

个人建议你用FPiette的HttpCli1

我实现的方式:
//提交的内容

Data := ' <?xml version=&quot;1.0&quot; encoding=&quot;gb2312&quot;?>' +
'<nodes>' +
'<username description=&quot;用户名&quot;>' + tsUserName + '</username>' +
'<password description=&quot;密码&quot;>' + tsPWD + '</password>' +
'<mysoft description=&quot;软件类别&quot;>软件类别' + configtmp.sType + '</mysoft>' + '<myversion description=&quot;软件当前版本号&quot;>' + configtmp.sVer + '</myversion>' + '</nodes>';

//提交

HttpCli1.Username := 'tt_webservice';
HttpCli1.Password := 'FGtOMilPkunMVCEr';
HttpCli1.SendStream := TMemoryStream.Create;
HttpCli1.SendStream.Write(Data[1], Length(Data));
HttpCli1.SendStream.Seek(0, 0);
HttpCli1.RcvdStream := TMemoryStream.Create;

HttpCli1.URL := http://220.194.48.132:8801/services/httpSmsService?wsdl;
HttpCli1.PostAsync;


//认证返回部分
<?xml version=&quot;1.0&quot; encoding=&quot;GB2312&quot; ?>
- <nodes>
<ret description=&quot;成功标志&quot;>成功</ret>
<servertime description=&quot;服务器时间&quot;>2007-4-11 15:15:52</servertime>
<deposit description=&quot;账户余额&quot;>1000</deposit>
<smsid description=&quot;某某账号&quot;>73C99472C09BAB8CD9</smsid>
<meetid description=&quot;某某账号&quot;>7EC595B186DC65F04F</meetid>
<ipid description=&quot;IP账号&quot;>95AC8AA27D069F14719</ipid>
<advlink>http://www.delphibbs.com/</advlink>
- <mystate>
<accountstate description=&quot;账号状态&quot;>1(1为成功登陆)</accountstate>
<statedescription>中国网通(集团)有限公司版权所有(帐号状态描述)</statedescription>
<meet>1</meet> //某服务状态
<sms>1</sms> //某服务状态
</mystate>
- <myservices>
<appname>sms</appname>
<mydescription>某某服务器</mydescription>
<serverip>192.168.0.3</serverip>
<bakserverip />
<appname>meet</appname>
<mydescription>某某服务器</mydescription>
<serverip>192.168.0.2</serverip>
<bakserverip />
</myservices>
</nodes>

我写的过程基本如此,注意:代理服务器可能要加穿透代理功能,供参考!
 
谢谢fkekennan对我的如此关照,不过大哥您还是误解了我的意思。
我贴出来的下载地址,是我做的客户端。
这个WEBSERVICE是联通短信平台的接口,
我只是需要调用对方的接口,发送短信。
以前做过的系统的用户名和密码是在函数中用参数的形式传递。
但这个WEBSERVICE就不是,不知道要如何传递用户名和密码过去。
麻烦大哥您有空的时候,看一下我源码里的button1.click就行了,
另外那个单元文件是用WSDL import导入的,是根据WEBSERVICE自动生成的,应该不需要太详细去了解的。
如果解决了,如果你想要积分的话。我愿意把积分全部给你。
 
已和对方公司商讨取消之前的认证方式
把用户名和密码用参数传递过去
这样我就能自己搞定了。
多谢,fkekennan,虽然没有帮我解决问题,但还是非常感谢您的热心帮助。
再此感谢。送上100分。
 
后退
顶部