无法获得Soap/Wsdl工作-服务器响应显示user/pass为空


Can't get Soap/Wsdl working - server response says user/pass empty

我以前没有使用SOAP/WSDL服务的经验,所以问题可能很明显,但是下面发布的代码都导致:

服务器无法处理请求。-->不允许空用户名和密码。身份验证失败

据我所知,它知道我调用了Login方法,但它没有收到我的登录数据。

来自API:

登录

要求:

用户名(字符串)

密码[String]

反应:

SessionId [String](描述:用于进一步API调用的会话id)

我在许多SOAP示例中看到SoapHeader用于身份验证,但它需要一个名称空间,我不知道那将是什么(API没有提到任何名称空间)。

我代码:

$username    = "blabla";
$password    = "bloblo";
$wsdl         = "https://bla.bla/bla.asmx?wsdl";
$client     = new SoapClient($wsdl, array("trace" => 1, "exception" => 0));
$loginParameters = array("UserName" => $username, "Password" => $password);
//$session = $client->Login->SessionId;
//$session = $client->__soapCall("Login", $loginParameters);
$session = $client->Login($loginParameters);
从WSDL:

<s:schema elementFormDefault="qualified" targetNamespace="http://xxxx/external/api/">
<s:element name="Login">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="userName" type="s:string"/>
<s:element minOccurs="0" maxOccurs="1" name="password" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>
<s:element name="LoginResponse">
<s:complexType>
<s:sequence>
<s:element minOccurs="0" maxOccurs="1" name="LoginResult" type="s:string"/>
</s:sequence>
</s:complexType>
</s:element>

根据WSDL,您的输入参数称为userName而不是UserName(小写u),并且password都是小写的。所以改成:

$loginParameters = array("userName" => $username, "password" => $password);

在检索结果时,服务返回一个包含结果的响应对象。所以你需要这样做:

$response = $client->Login($loginParameters);
$session = $response->LoginResult;

这个参考可能对头设置很有用,这个答案可能会给您更多关于soap名称空间的提示。