
在 PHP 中使用 SOAP 调用 Web 服务接口,通常有两种方式:
- 使用内置的
SoapClient
类(常用于基于 WSDL 的服务) - 使用 cURL 模拟 HTTP 请求(常用于无 WSDL 的服务)
这里是基于 SoapClient
的标准调用方式步骤:
一、确认 Web 服务的 WSDL 地址
WSDL(Web Services Description Language)是 Web 服务的描述文件,类似一个 API 的说明书。你需要获取类似这样的地址:
http://example.com/service?wsdl
二、创建 SoapClient 实例
$wsdl = "http://example.com/service?wsdl";
$client = new SoapClient($wsdl); // 若 WSDL 有问题可加 ['trace'=>1, 'exceptions'=>1]
如果是无 WSDL 的服务(non-WSDL),可以这样:
$options = [
'location' => 'http://example.com/service.php',
'uri' => 'http://example.com/namespace',
];
$client = new SoapClient(null, $options);
三、调用 Web 服务中的方法
$params = ['param1' => 'value1', 'param2' => 'value2'];
$result = $client->__soapCall('methodName', [$params]);
print_r($result);
四、错误处理建议
try {
$client = new SoapClient($wsdl);
$result = $client->__soapCall("methodName", [$params]);
print_r($result);
} catch (SoapFault $fault) {
echo "SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})";
}
五、调试工具(可选)
开启 trace
可帮助你查看发送和接收的 XML:
$client = new SoapClient($wsdl, ['trace' => 1]);
$response = $client->__soapCall("methodName", [$params]);
echo "Request :\n" . $client->__getLastRequest();
echo "Response:\n" . $client->__getLastResponse();
小贴士:
- 若服务要求认证,可设置
login
和password
。 - 如果报错
could not connect to host
,请确认 URL 正确、防火墙未屏蔽。 - 某些 Web 服务对
SOAPAction
头要求严格,可以设置 HTTP 头来自定义。
如果你能提供具体的 WebService WSDL 或方法名,我可以帮你生成一份完整的调用示例。你想对接哪个接口呢?