php实现soapui
PHP 实现 SOAP 调用
SOAP(Simple Object Access Protocol)是一种基于 XML 的协议,用于在 Web 服务之间交换结构化信息。PHP 提供了内置的 SoapClient 类来方便地调用 SOAP 服务。
创建 SoapClient 对象
初始化 SoapClient 需要指定 WSDL(Web Services Description Language)文件的 URL 或路径。WSDL 文件描述了 SOAP 服务的可用操作、参数和返回值。
$wsdl = 'http://example.com/service?wsdl';
$client = new SoapClient($wsdl);
调用 SOAP 方法
SOAP 服务的操作可以通过 SoapClient 对象直接调用。假设服务有一个名为 getUserInfo 的方法:
$params = array('userId' => 123);
$response = $client->getUserInfo($params);
处理 SOAP 请求和响应
SOAP 请求和响应通常是 XML 格式。SoapClient 会自动将 PHP 数组转换为 SOAP 请求的 XML,并将响应的 XML 转换为 PHP 对象或数组。

var_dump($response);
设置 SOAP 选项
SoapClient 构造函数可以接受一个选项数组,用于配置 SOAP 调用的行为。常用的选项包括:
$options = array(
'trace' => 1, // 启用跟踪以便调试
'exceptions' => true, // 抛出 SOAP 异常
'cache_wsdl' => WSDL_CACHE_NONE // 禁用 WSDL 缓存
);
$client = new SoapClient($wsdl, $options);
调试 SOAP 调用
启用 trace 选项后,可以获取 SOAP 请求和响应的原始 XML:
echo "Request:\n" . $client->__getLastRequest() . "\n";
echo "Response:\n" . $client->__getLastResponse() . "\n";
处理 SOAP 错误
SOAP 调用可能会抛出 SoapFault 异常。使用 try-catch 块来捕获和处理这些异常:

try {
$response = $client->getUserInfo($params);
} catch (SoapFault $e) {
echo "SOAP Fault: " . $e->getMessage();
}
使用 SOAP 头部
某些 SOAP 服务需要在请求中添加头部信息。可以通过 SoapHeader 类来创建头部:
$header = new SoapHeader(
'http://example.com/namespace',
'AuthHeader',
array('username' => 'user', 'password' => 'pass')
);
$client->__setSoapHeaders($header);
异步 SOAP 调用
PHP 的 SoapClient 本身不支持异步调用,但可以通过多线程或 cURL 等方式实现异步效果。另一种方法是使用 stream_select 或类似的异步 I/O 机制。
示例代码
以下是一个完整的示例,展示如何调用一个假设的 SOAP 服务:
$wsdl = 'http://example.com/service?wsdl';
$options = array(
'trace' => 1,
'exceptions' => true
);
try {
$client = new SoapClient($wsdl, $options);
$params = array('userId' => 123);
$response = $client->getUserInfo($params);
var_dump($response);
} catch (SoapFault $e) {
echo "SOAP Fault: " . $e->getMessage();
}
注意事项
- 确保 PHP 的 SOAP 扩展已安装并启用。可以通过
phpinfo()或命令行php -m检查。 - WSDL 文件必须可访问,且格式正确。
- 某些 SOAP 服务可能需要复杂的身份验证或加密,需根据具体服务文档调整代码。
- 对于大型或复杂的 SOAP 服务,考虑使用工具如 SOAPUI 先测试服务,再在 PHP 中实现。






