PHP SoapClient "Body must be present in a SOAP envelope" 错误
PHP SoapClient "Body must be present in a SOAP envelope" error
我在尝试使用 PHP SoapClient 时遇到了非常奇怪的问题 http://bws.neteven.com/NWS/2。
我必须设置身份验证 header。请求 body 应该为空。我使用的代码如下:
$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 是什么。但是我可以看到 header 和 body 参数设置不正确。
$client->__getLastRequest() 输出这样的纯文本:
MethodTestConnectionLoginloginSeedseedStampstampSignaturesignature
这看起来不像是有效的 XML。所以我当然会得到文本 "Body must be present in a SOAP envelope".
的 SoapFault 异常
有谁body知道为什么 header 和 body 没有被必需的 XML 标签包裹?
代码有问题吗?因为我看到很多 PHP SoapClient 使用相同方法的示例。此外,我尝试了一些测试 WSDL 服务,并且那里有有效的请求和响应。
会不会是提供的 WSDL 模式的问题?
还是我的服务器配置有问题?我使用 PHP 5.6.3,php_soap 扩展已启用。
希望大家能帮帮我。如果您有任何想法,我们将不胜感激。
谢谢。
我找到的代码示例有一个不同的 URL...
http://bws.neteven.com/NWS/2
对比 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);
我在尝试使用 PHP SoapClient 时遇到了非常奇怪的问题 http://bws.neteven.com/NWS/2。
我必须设置身份验证 header。请求 body 应该为空。我使用的代码如下:
$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 是什么。但是我可以看到 header 和 body 参数设置不正确。 $client->__getLastRequest() 输出这样的纯文本:
MethodTestConnectionLoginloginSeedseedStampstampSignaturesignature
这看起来不像是有效的 XML。所以我当然会得到文本 "Body must be present in a SOAP envelope".
的 SoapFault 异常有谁body知道为什么 header 和 body 没有被必需的 XML 标签包裹?
代码有问题吗?因为我看到很多 PHP SoapClient 使用相同方法的示例。此外,我尝试了一些测试 WSDL 服务,并且那里有有效的请求和响应。
会不会是提供的 WSDL 模式的问题?
还是我的服务器配置有问题?我使用 PHP 5.6.3,php_soap 扩展已启用。
希望大家能帮帮我。如果您有任何想法,我们将不胜感激。
谢谢。
我找到的代码示例有一个不同的 URL...
http://bws.neteven.com/NWS/2
对比 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);