PHP Web Service验证才能用,如何做?百度了半小时,都是一些白痴文章 本帖最后由 MoreQuestion 于 2013-05-13 07:35:48 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 $strdbServerModStatusIp ="10.XXX.XX.XX";//URL$serviceURL = "http://" . $strdbServerModStatusIp . ":56789";$soap = new nusoap_client($serviceURL . "?WSDL");$parameters=array("a"=>aaa,"b"=>bbb);$str=$soap->call("DDPServiceProc", $parameters); //方法名&参数 if (!$err = $soap->getError()) { echo " return :", $str;} else { echo " false :", $err;} 我用的是NUSOAP 你如果用的是PHP自带的soap类 就把方法名替换下就行了 我要的是验证。WebService已经是全部人可以了。但我要认证。 给你一个简单的例子(我喜欢用gbk字符集,所以代码中有字符编码处理)服务端 soap_s.phpfunction auth($s){ if($s != 'kyzy'){ throw new SoapFault('auth', "$s ".iconv('gbk', 'utf-8', '您无权访问')); } return $s;}function say($s){ return 'Hi'.$s;}$server = new SoapServer(null, array('uri' => ''));$server->addFunction('say');$server->addFunction('auth');$server->handle();客户端 saop_c.php$client = new SoapClient(null, array('uri' => '', 'location' => 'http://localhost/soap/soap_s.php', 'trace' => true, 'encoding'=>'GBK'));$data = 'kyzy';$header = new SoapHeader('http://localhost', 'auth', $data, false, SOAP_ACTOR_NEXT);$client->__setSoapHeaders(array($header));try { echo $client->say('www');} catch (Exception $e) { echo $e->getMessage();}通常 SoapHeader 验证方法不会出现在 WSDL 中,所以验证方法名和验证数据需要双方私下约定每次 soap 方法的执行,验证都会自动执行 多谢版主,现在有一个问题。.NET调用它就麻烦了…… 我给的测试代码是为了帮助你理解 SoapHeader 的工作流程的至于 .NET 中如何使用 SoapHeader,那就要到 .NET 版面问了但 SoapHeader 的原理都是一样的 PHP下试了,可以发送验证。多谢版主。 版主大人,$server = new SoapServer(null, array('uri' => '')); 你这句不用指定信息的?WSDL文件?请问你这种方式是怎么说呢? WSDL 是给客户端看的,有没有都可以。但有了就要受他约束有 wsdl 的服务端基本是这个样子 $server = new SoapServer( "http://localhost/soap/passport.wsdl" ,array( 'encoding'=>'utf-8', 'soap_version' => SOAP_1_2, 'uri' => 'Passport', 'style' => SOAP_RPC, 'use' => SOAP_LITERAL) ); php 没有 WSDL 书写工具,手工写起来很麻烦的 没有WSDL的情况下,调用的客户是直接用$obj->Hander()这个文件? Hander 是什么?已经说过了,WSDL 有没有都无所谓服务器可以通过 WSDL(一个周知的说明文件) 通知客户,它提供了哪些服务,如何调用及返回的是什么如果客户已经知道了,那么 WSDL 就形同须设了 有不少 soap 开发工具可以通过 WSDL 自动生成客户端程序 受教了。例如,我有一个类class A{function AA(){}}我建立SOAPServer的时候,参数如何写?调用的时候呢? 这样写SOAPServer,其他语言无法调,只能在PHP调用。 如果没有WSDL,例如NET调用根本不知道你返回什么类型。 二维数组排序这个要怎么做? IC框架下的php网站 在部署的时候需要修改哪些? centOS下,已经设置了include_path, require_once失败 关于session,cookie 为什么我的论坛的验证码显示不出来 大家平时开发的php环境是什么? 求一正则表达式 如何用php将文件传到另外一台服务器上? 在读出浏览端的网卡物理地址? php 服务中调用java jar 包,怎样实现 PHP如何实现对GZIP(*.gz)文件的解压? 如何获取基于PhpWind的论坛的数据接口~~
$strdbServerModStatusIp ="10.XXX.XX.XX";//URL
$serviceURL = "http://" . $strdbServerModStatusIp . ":56789";
$soap = new nusoap_client($serviceURL . "?WSDL");
$parameters=array("a"=>aaa,"b"=>bbb);
$str=$soap->call("DDPServiceProc", $parameters); //方法名&参数
if (!$err = $soap->getError()) {
echo " return :", $str;
} else {
echo " false :", $err;
}
服务端 soap_s.phpfunction auth($s){
if($s != 'kyzy'){
throw new SoapFault('auth', "$s ".iconv('gbk', 'utf-8', '您无权访问'));
}
return $s;
}function say($s){
return 'Hi'.$s;
}$server = new SoapServer(null, array('uri' => ''));
$server->addFunction('say');
$server->addFunction('auth');
$server->handle();客户端 saop_c.php$client = new SoapClient(null, array('uri' => '', 'location' => 'http://localhost/soap/soap_s.php', 'trace' => true, 'encoding'=>'GBK'));
$data = 'kyzy';
$header = new SoapHeader('http://localhost', 'auth', $data, false, SOAP_ACTOR_NEXT);
$client->__setSoapHeaders(array($header));
try {
echo $client->say('www');
} catch (Exception $e) {
echo $e->getMessage();
}通常 SoapHeader 验证方法不会出现在 WSDL 中,所以验证方法名和验证数据需要双方私下约定
每次 soap 方法的执行,验证都会自动执行
多谢版主,现在有一个问题。.NET调用它就麻烦了……
至于 .NET 中如何使用 SoapHeader,那就要到 .NET 版面问了
但 SoapHeader 的原理都是一样的
PHP下试了,可以发送验证。多谢版主。
版主大人,$server = new SoapServer(null, array('uri' => '')); 你这句不用指定信息的?WSDL文件?请问你这种方式是怎么说呢?
有 wsdl 的服务端基本是这个样子
$server = new SoapServer(
"http://localhost/soap/passport.wsdl"
,array(
'encoding'=>'utf-8',
'soap_version' => SOAP_1_2,
'uri' => 'Passport',
'style' => SOAP_RPC,
'use' => SOAP_LITERAL)
);
php 没有 WSDL 书写工具,手工写起来很麻烦的
没有WSDL的情况下,调用的客户是直接用$obj->Hander()这个文件?
服务器可以通过 WSDL(一个周知的说明文件) 通知客户,它提供了哪些服务,如何调用及返回的是什么如果客户已经知道了,那么 WSDL 就形同须设了
受教了。例如,我有一个类
class A
{
function AA()
{}
}我建立SOAPServer的时候,参数如何写?
调用的时候呢?
这样写SOAPServer,其他语言无法调,只能在PHP调用。
如果没有WSDL,例如NET调用根本不知道你返回什么类型。