【问题标题】:PHP SoapClient - how to get request to server and responsePHP SoapClient - 如何获取对服务器的请求和响应
【发布时间】:2015-06-20 03:17:08
【问题描述】:

我尝试在 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

有什么方法可以查看这个脚本到底发送到服务器的内容以及响应是什么?

【问题讨论】:

标签: php soap-client ws-security


【解决方案1】:

问题是 $soapclient->__setUsernameToken('username', 'password') 函数需要 '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(): Invalid SOAP header...

您需要确定密码类型并将其作为您的第三个参数传递给 setUsernameToken() 函数。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 1970-01-01
  • 2016-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多