SOAPClient不会在方法调用上附加参数

时间:2016-06-30 18:42:28

标签: php web-services soap

我正在尝试使用PHP通过Web服务连接到另一家公司。根据Web服务的响应,连接成功。此过程中没有用户验证或密码。

该方法的验证也是成功的,基于print_r($ client-> __ getFunctions())和print_r($ client-> __ getTypes())的结果,我可以看到这两种情况的信息。 / p>

当参数传递给方法时出现问题,请求没有XML体中的参数:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://tempuri.org/">
<SOAP-ENV:Body>
  <ns1:GetToken/>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

我做了不同类型的调用,结果相同:

$response = $client->__soapCall('GetToken', array('parameters' => $params));

$response = $client->GetToken(array('parameters' => $params));

$response = $client->__soapCall('GetToken', array($params));

$response = $client->GetToken(array($params));

每次尝试都是来自Web服务的相同响应,因为该方法未将参数附加到请求

[GetTokenResult] => stdClass Object
        (
            [Token] => 
            [Url] => 
            [StatusCode] => 400
            [StatusDescription] => Value cannot be null.
        )

这是我的代码:

Try{
  $wsdlLocation = 'http://webservice.com/Agent.svc?wsdl'; 
  $client = new SoapClient($wsdlLocation,array('location' => $wsdlLocation,
                          'trace' => true,
                      'exceptions' => true
               )
            );

$params = array(
        'Key' => '123456',
        'ReturnUrl' => 'http://Anyweb.com',
        'Name' => 'John Doe',
        'Office' => 'NorhWest',
        'Business' => 'PL',
        'Email' => 'my@email.com',
        );

$response = $client->__soapCall('GetToken', array('parameters' => $params));

print_r($response);

echo "REQUEST:\n" . $client->__getLastRequest() . "\n";



} 
catch (SoapFault $fault) {
  trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}

另外,我使用XMLspy测试了Web服务。使用相同的值和参数从此工具发送请求。本案的回应是成功的。所以问题不在于另一家公司的服务。

知道如何解决这个问题。感谢。

1 个答案:

答案 0 :(得分:0)

好吧,过了一段时间我找到了答案。 soap服务正在等待一个名为&#39; request&#39;而不是&#39;参数&#39;。这解决了所有问题。

$response = $client->__soapCall('GetToken', array('request' => $params));

我希望这能为其他人节省时间。