php实现soapui
PHP 实现 SOAP 请求
SOAPUI 是一个用于测试 SOAP 和 REST Web 服务的工具。在 PHP 中,可以通过内置的 SoapClient 类实现类似 SOAPUI 的功能,发送 SOAP 请求并处理响应。
使用 SoapClient 发送 SOAP 请求
确保 PHP 已启用 SOAP 扩展。可以通过 phpinfo() 检查或安装:
sudo apt-get install php-soap # Debian/Ubuntu
sudo yum install php-soap # CentOS/RHEL
创建 SoapClient 实例并调用 SOAP 方法:
$wsdl = "http://example.com/soap/service?wsdl";
$options = [
'trace' => 1, // 启用请求/响应跟踪
'exceptions' => true, // 抛出 SOAP 异常
'cache_wsdl' => WSDL_CACHE_NONE // 禁用 WSDL 缓存
];
try {
$client = new SoapClient($wsdl, $options);
$params = [
'param1' => 'value1',
'param2' => 'value2'
];
$response = $client->__soapCall('methodName', [$params]);
print_r($response);
} catch (SoapFault $e) {
echo "SOAP Error: " . $e->getMessage();
}
调试 SOAP 请求
启用 trace 选项后,可以获取原始请求和响应数据:
echo "Request:\n" . $client->__getLastRequest() . "\n";
echo "Response:\n" . $client->__getLastResponse() . "\n";
处理 SOAP 头部
如果需要添加 SOAP 头部信息:
$headerBody = new SoapVar(
['username' => 'user', 'password' => 'pass'],
SOAP_ENC_OBJECT
);
$header = new SoapHeader('namespace', 'AuthHeader', $headerBody);
$client->__setSoapHeaders($header);
不使用 WSDL 的 SOAP 请求
当没有 WSDL 时,可以手动指定端点和方法:
$location = "http://example.com/soap/service";
$uri = "http://example.com/soap/namespace";
$client = new SoapClient(null, [
'location' => $location,
'uri' => $uri,
'trace' => 1
]);
$response = $client->__soapCall('methodName', $params);
常见问题解决
-
证书验证问题:禁用 SSL 验证(仅限测试环境)
$options['stream_context'] = stream_context_create([ 'ssl' => [ 'verify_peer' => false, 'verify_peer_name' => false ] ]); -
命名空间问题:确保 SOAP 请求中的命名空间与服务器一致

$params = new SoapVar($params, SOAP_ENC_OBJECT, null, null, 'elementName', 'namespace');
通过以上方法,可以在 PHP 中实现类似 SOAPUI 的功能,完成 SOAP Web 服务的调用和测试。






