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 merge函数占用内存过大
  • ¥15 Revit2020下载问题
  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 单片机无法进入HAL_TIM_PWM_PulseFinishedCallback回调函数
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.