首页 文章

PHP SoapClient“Body必须存在于SOAP信封中”错误

提问于
浏览
0

当我尝试使用PHP SoapClient进行此服务时,我遇到了一个非常奇怪的问题http://bws.neteven.com/NWS/2 .

我必须设置身份验证标头 . 请求正文应为空 . 我使用的代码如下:

$client = new SoapClient("http://bws.neteven.com/NWS/2", array("trace" => 1, "exception" => 1));
    $auth = array(//the params are not valid of course
        'Method' => 'TestConnection',
        'Login' => 'login',
        'Seed' => 'seed',
        'Stamp' => 'stamp',
        'Signature' => 'signature'
    );
    $client->__setSoapHeaders(new SoapHeader('auth', 'AuthenticationHeader', $auth));
    $client->__soapCall('TestConnection',array(null));

之后我使用$ client - > __ getLastRequest()来查看请求的最终XML . 但是我可以看到 Headers 和正文参数设置不正确 . $ client - > __ getLastRequest()输出如下的纯文本:

MethodTestConnectionLoginloginSeedseedStampstampSignaturesignature

哪个看起来不像有效的XML . 所以当然我得到SoapFault异常的文字“Body必须存在于SOAP信封中” .

有谁知道为什么 Headers 和正文没有被必需的XML标记包装?

代码中的任何问题?因为我看到了许多使用相同方法的PHP SoapClient使用示例 . 此外,我尝试了一些测试WSDL服务,并在那里有有效的请求和响应 .

这可能是提供WSDL架构的问题吗?

还是我的服务器配置问题?我使用PHP 5.6.3,启用了php_soap扩展 .

希望你们能帮助我 . 任何你的想法将非常感激 .

谢谢 .

1 回答

  • 0

    我找到的代码示例有一个不同的URL ...

    http://bws.neteven.com/NWS/2 vs http://ws.neteven.com/NWS

    $client = new SoapClient("http://ws.neteven.com/NWS", array("trace" => 1, "exception" => 1));
    $auth = array(//the params are not valid of course
        'Method' => 'TestConnection',
        'Login' => 'login',
        'Seed' => 'seed',
        'Stamp' => 'stamp',
        'Signature' => 'signature'
    );
    $client->__setSoapHeaders(new SoapHeader('auth', 'AuthenticationHeader', $auth));
    $client->__soapCall('TestConnection',array(null));
    

    此外,您可以在不使用 __soapCall 的情况下调用此类方法(即使它会执行相同的操作) .

    $result = $client->echo(array("EchoInput" => "ReturnMe"));
    var_dump($result->EchoOutput);
    
    $result = $client->TestConnection();
    var_dump($result->TestConnectionResult);
    

相关问题