【问题标题】:SOAP Client Request --> Bad RequestSOAP 客户端请求 --> 错误请求
【发布时间】:2013-03-27 19:05:03
【问题描述】:

有人要求我研究使用 SOAP 服务同步数据。我对 SOAP 不太了解,并且收到错误请求错误。

我试图调用的函数是一个测试回显函数:

公共字符串 EchoAuthenticated(字符串文本)

每次调用都会出错。

我已经注释掉了用户名/密码设置,因为我现在不知道用户名和密码,而且我的联系人正在休假 :( 虽然现在我很高兴收到身份验证失败的消息而不是比错误...

如果有人可以在这里指出正确的方向,请...

谢谢,

约翰

 <?php

 $apiUrl         = 'https://exdev.api.propctrl.co.za/v3/Integration.svc?wsdl';
 $options        = array( 'trace' => 1, 'exceptions' => 1,  'soap_version' => SOAP_1_2);

 try
 {
    $client     = new SoapClient($apiUrl, $options);

    //$data       = array(
    //  'Username'          => "test",
    //  'Password'          => "test"
    //);

    //$header = new SoapHeader('https://exdev.api.propctrl.co.za/v3/', 'CredentialsHeader', $data, false);
    //$client->__setSoapHeaders($header);

    var_dump($client->__getFunctions());


    print $client->EchoAuthenticated("Test String");
    var_dump($client->__getLastRequest());

 }
 catch(Exception $e)
 {
    echo $e->getMessage();
 }

 ?>

【问题讨论】:

    标签: soap soap-client bad-request


    【解决方案1】:

    你可以试试这样的:

    ...
    $client     = new SoapClient($apiUrl, $options);
    
    var_dump($client->__getFunctions());
    
    $auth = array("Username" => "John", "Password" => "secret", 
        "IsP24Credentials" => false);
    $header = new SoapHeader("https://www.propctrl.com/", "CredentialsHeader", 
        $auth, FALSE);
    $client->__setSoapHeaders($header);
    
    print $client->EchoAuthenticated(array( 
        "text" => "My text to be echoed."
    ));
    var_dump($client->__getLastRequest());
    ...
    

    这应该会导致这样的请求 SOAP 请求:

    <env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" xmlns:ns1="https://www.propctrl.com/v3" xmlns:ns2="https://www.propctrl.com/">
       <env:Header>
          <ns2:CredentialsHeader>
             <ns2:IsP24Credentials>false</ns2:IsP24Credentials>
             <ns2:Password>secret</ns2:Password>
             <ns2:Username>John</ns2:Username>
          </ns2:CredentialsHeader>
       </env:Header>
       <env:Body>
          <ns1:EchoAuthenticated>
             <ns1:text>My text to be echoed.</ns1:text>
          </ns1:EchoAuthenticated>
       </env:Body>
    </env:Envelope>
    

    作为旁注,您可以查看http://www.soapui.org/。该工具对 Web 服务开发有很大帮助。

    【讨论】:

    • 嗨,Marcellus,感谢您的回复。我没有让它工作,但是我要下载soapui并查看发送的内容......
    猜你喜欢
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多