我正在尝试使用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服务。使用相同的值和参数从此工具发送请求。本案的回应是成功的。所以问题不在于另一家公司的服务。
知道如何解决这个问题。感谢。
答案 0 :(得分:0)
好吧,过了一段时间我找到了答案。 soap服务正在等待一个名为&#39; request&#39;而不是&#39;参数&#39;。这解决了所有问题。
$response = $client->__soapCall('GetToken', array('request' => $params));
我希望这能为其他人节省时间。