在 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 或方法名,我可以帮你生成一份完整的调用示例。你想对接哪个接口呢?