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条)

报告相同问题?

悬赏问题

  • ¥50 永磁型步进电机PID算法
  • ¥15 sqlite 附加(attach database)加密数据库时,返回26是什么原因呢?
  • ¥88 找成都本地经验丰富懂小程序开发的技术大咖
  • ¥15 如何处理复杂数据表格的除法运算
  • ¥15 如何用stc8h1k08的片子做485数据透传的功能?(关键词-串口)
  • ¥15 有兄弟姐妹会用word插图功能制作类似citespace的图片吗?
  • ¥200 uniapp长期运行卡死问题解决
  • ¥15 latex怎么处理论文引理引用参考文献
  • ¥15 请教:如何用postman调用本地虚拟机区块链接上的合约?
  • ¥15 为什么使用javacv转封装rtsp为rtmp时出现如下问题:[h264 @ 000000004faf7500]no frame?