php soap client example without wsdl

如果你需要在 PHP 中创建 SOAP 客户端而不使用 WSDL 文件,可以使用 PHP 的 SoapClient 类,手动指定 SOAP 操作和消息格式。

以下是一个简单的示例代码,展示如何使用 PHP 的 SoapClient 类来发送一个 SOAP 请求:

// 创建 SOAP 客户端
$client = new SoapClient(null, array(
    'location' => "http://example.com/soap-server.php",
    'uri' => "http://example.com/soap-server.php",
    'soap_version' => SOAP_1_2,
// 构造 SOAP 请求消息
$request = "<soapenv:Envelope xmlns:soapenv='http://schemas.xmlsoap.org/soap/envelope/' xmlns:exam='http://example.com/'>
   <soapenv:Header/>
   <soapenv:Body>
      <exam:HelloWorld>
         <name>John Doe</name>
      </exam:HelloWorld>
   </soapenv:Body>
</soapenv:Envelope>";
// 发送 SOAP 请求并获取响应
$response = $client->__doRequest($request, "http://example.com/soap-server.php", "http://example.com/HelloWorld", SOAP_1_2);
// 解析 SOAP 响应消息
$xml = simplexml_load_string($response);
$result = $xml->xpath('//m:HelloWorldResult')[0]->__toString();
// 输出 SOAP 响应结果
echo $result;

在这个示例代码中,我们首先创建了一个 SoapClient 对象,并手动指定了 SOAP 服务的位置(location)、命名空间 URI(uri)和 SOAP 版本(soap_version)。然后,我们手动构造了一个 SOAP 请求消息,包括 SOAP 操作和消息体。最后,我们使用 SoapClient 对象的 __doRequest() 方法发送 SOAP 请求,并获取响应。我们使用 simplexml_load_string() 函数解析 SOAP 响应消息,并提取出 HelloWorldResult 元素的值,作为最终的 SOAP 响应结果。

需要注意的是,使用手动构造的 SOAP 请求消息需要非常小心,因为任何一个小错误都可能导致 SOAP 请求失败或返回无效的响应。在实际开发中,建议仍然使用 WSDL 文件自动生成 SOAP 客户端代码,以确保正确性和稳定性。

  •