PHP的肥皂头SETENV正确
好我的WSDL服务器期待这是一个电话:PHP的肥皂头SETENV正确
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:esc="http://escoles.webservice.jovtitus.dasc.gencat.net" xmlns:impl="http://impl.escoles.webservice.jovtitus.dasc.gencat.net">
<soapenv:Header/>
<soapenv:Body>
<esc:login>
<esc:in0>
<!--Optional:-->
<impl:password>++</impl:password>
<!--Optional:-->
<impl:user>++</impl:user>
</esc:in0>
</esc:login>
</soapenv:Body>
</soapenv:Envelope>
,但我的PHP SOAP调用等于此:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://escoles.webservice.jovtitus.dasc.gencat.net">
<SOAP-ENV:Body>
<ns1:login>
<ns1:in0>
<password>+++</password>
<user>+++</user>
</ns1:in0>
</ns1:login>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
实际上是一样的,但我发现有一些我的php没有应用的命名空间。为什么? 我有ns1:
它必须是esc:
,没有什么地方必须impl:
任何人都可以帮我吗?
我包括格兰PHP代码我使用:
$login = "+++++++";
$password = "+++++++++";
$enllaç = "http://preproduccio.www14.gencat.cat/jov_titus/AppJava/services/EscolesWebService";
$impl = 'http://impl.escoles.webservice.jovtitus.dasc.gencat.net';
$esc = 'escoles.webservice.jovtitus.dasc.gencat.net';
$aOptions = array("uri"=> $esc, 'location' => $enllaç,'trace'=>1);
class loginRequest {
private $password;
private $user;
public function __construct($password, $user)
{
$this->password = $password;
$this->user = $user;
}
}
$x = new loginRequest($password, $login);
$param = array('in0' => $x);
try {
$client = new SoapClient($enllaç.'?wsdl', $aOptions);
$clau = new SoapVar($param, SOAP_ENC_OBJECT, null, 'http://impl.escoles.webservice.jovtitus.dasc.gencat.net');
$result = $client->login($clau);
echo "REQUEST:\n" .htmlentities($client->__getLastRequest()). "<br /><br />";
} catch (SoapFault $fault) {
trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}
至于NS1:和ESC:而言,是没有问题的。
ns1:和esc:是名称空间的前缀。在根元素中,您为给定的命名空间指定了前缀,稍后在元素中指定了通过指定的前缀属于该命名空间的元素。
例如,在您的服务器预期的根元素调用中,命名空间http://escoles.webservice.jovtitus.dasc.gencat.net被赋予前缀esc。所以元素esc:login被解析为位于该名称空间中。
在PHP生成的调用中,命名空间http://escoles.webservice.jovtitus.dasc.gencat.net被赋予前缀ns1。所以元素ns1:login在相同的命名空间中被解析,这很好。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://escoles.webservice.jovtitus.dasc.gencat.net">
如果你看根元素信封 的xmlns:SOAP-ENV = “http://schemas.xmlsoap.org/soap/envelope/” ---->这行分配SOAP-ENV前缀到http://schemas.xmlsoap.org/soap/envelope/命名空间。
所以SOAP-ENV:Envelope元素解析为http://schemas.xmlsoap.org/soap/envelope/命名空间
在你的PHP调用唯一缺少的是http://impl.escoles.webservice.jovtitus.dasc.gencat.net
你可以给你映射的细节命名空间声明 - 有需要某种映射获取映射到您的PHP SOAP调用中的这个名称空间。比如你使用的是什么PHP SOAP库,以及你使用什么来生成SOAP调用 - 通常你使用一些序列化程序将PHP对象转换为SOAP元素
这就是我如何映射soap调用:$ clau = new SoapVar($ param,SOAP_ENC_OBJECT,null,'http://impl.escoles.webservice.jovtitus.dasc.gencat.net'); $ result = $ client-> login($ clau); – david 2010-11-18 15:42:00
我已编辑上述问题以添加有关我的解决方案的更多信息。我希望它有帮助 – david 2010-11-19 11:14:05