PHP SoapClient - 如何获取服务器和响应的请求

时间:2015-06-20 03:17:08

标签: php soap-client ws-security

我尝试在PHP中创建用于与WS-Security(第一次)通信的脚本:

require ('WSSoapClient.php');
$soapclient = new WSSoapClient('https://katastr.cuzk.cz/trial/dokumentace/ws22/wsdp/vyhledat_v22.wsdl');
$soapclient->__setUsernameToken('username', 'password');
$params = array('katastrUzemiKod'=>693936, 'kmenoveCislo'=>1385);
$response = $soapclient->__soapCall('najdiParcelu', $params);
var_dump($response);

这个脚本失败了:

  

PHP致命错误:未捕获的SoapFault异常:[wsse:InvalidSecurity]   验证安全策略消息时出错错误代码:1000 in   /home/jura/bin/WSSoapClient.php:75

有什么方法可以看,这个脚本究竟发送到服务器的是什么以及响应是什么?

1 个答案:

答案 0 :(得分:1)

问题是$ soapclient-> __ setUsernameToken('用户名'密码')功能正在期待' PasswordDigest'或者' PasswordText'。

这在WSSoapClient类中处理得很糟糕。如果缺少passwordType参数,它应该抛出异常。它试图做的是:

// $this->generateWSSecurityHeader() returns an empty string if 3rd parameter missing.

$this->__setSoapHeaders($this->generateWSSecurityHeader());

如果PHP像我一样处于严格模式,你会得到这些警告:

PHP警告:SoapClient :: __ setSoapHeaders():无效的SOAP标头......

警告:SoapClient :: __ setSoapHeaders():无效的SOAP标头......

您需要找出密码类型并将其作为setUsernameToken()函数中的第3个参数传递。