doukefu1361 2014-05-20 10:34
浏览 111
已采纳

无法使Soap / Wsdl工作 - 服务器响应说user / pass为空

I have no experience using SOAP/WSDL services before, so the problem might be obvious, but the code (posted below) all result in:

Server was unable to process request. ---> Empty user name and password not allowed. Authentication failed

As far as i understand, it recognises that I invoked the Login method, but it didn't receive my login data.

This is from the API:

Login

Request:

UserName [String]

Password [String]

Response:

SessionId [String] (Description: Session id to use with further API calls)

I see in many SOAP examples that SoapHeader is used for authentication, but it requires a NAMESPACE, and I have no idea what that would be (API doesn't mention any namespace).

My code:

$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);

From 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>
  • 写回答

2条回答 默认 最新

  • doujiku1028 2014-05-20 11:18
    关注

    According to the WSDL, your input parameter is called userName not UserName (lowercase u). Also password is all lowercase. So change to:

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

    When retrieving the result, the service returns a response object containing the result. So you would need to do:

    $response = $client->Login($loginParameters);
    $session = $response->LoginResult;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证
  • ¥15 复杂网络,变滞后传递熵,FDA
  • ¥20 csv格式数据集预处理及模型选择