当前位置:首页 > PHP

php实现soap

2026-02-14 12:34:59PHP

PHP 实现 SOAP 的方法

创建 SOAP 客户端

通过 SoapClient 类可以快速创建一个 SOAP 客户端,用于调用远程 SOAP 服务。以下是一个基本示例:

$wsdl = "http://example.com/soap/service?wsdl";
$options = [
    'trace' => 1, // 启用调试跟踪
    'exceptions' => true, // 抛出异常
];

try {
    $client = new SoapClient($wsdl, $options);
    $result = $client->someMethod($params); // 调用远程方法
    print_r($result);
} catch (SoapFault $e) {
    echo "SOAP 错误: " . $e->getMessage();
}

调用 SOAP 方法

在创建客户端后,可以直接调用 WSDL 中定义的方法。方法名和参数需与服务端保持一致。

$params = [
    'param1' => 'value1',
    'param2' => 'value2',
];
$response = $client->__soapCall('methodName', [$params]);

调试 SOAP 请求和响应

启用 trace 选项后,可以通过以下方法获取请求和响应的原始数据:

echo "请求数据:\n" . $client->__getLastRequest() . "\n";
echo "响应数据:\n" . $client->__getLastResponse() . "\n";

创建 SOAP 服务端

使用 SoapServer 类可以创建一个 SOAP 服务端。以下是一个简单的服务端实现:

// 定义服务端类
class MySoapService {
    public function hello($name) {
        return "Hello, " . $name;
    }
}

// 创建 SOAP 服务端
$wsdl = "service.wsdl"; // WSDL 文件路径
$server = new SoapServer($wsdl);
$server->setClass('MySoapService');
$server->handle(); // 处理请求

生成 WSDL 文件

服务端需要提供 WSDL 文件描述服务。可以使用工具或手动编写 WSDL。以下是手动编写的简单示例:

<definitions name="MySoapService"
    targetNamespace="urn:MySoapService"
    xmlns:tns="urn:MySoapService"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns="http://schemas.xmlsoap.org/wsdl/">

    <message name="helloRequest">
        <part name="name" type="xsd:string"/>
    </message>
    <message name="helloResponse">
        <part name="greeting" type="xsd:string"/>
    </message>

    <portType name="MySoapServicePort">
        <operation name="hello">
            <input message="tns:helloRequest"/>
            <output message="tns:helloResponse"/>
        </operation>
    </portType>

    <binding name="MySoapServiceBinding" type="tns:MySoapServicePort">
        <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="hello">
            <soap:operation soapAction="urn:MySoapService#hello"/>
            <input>
                <soap:body use="encoded" namespace="urn:MySoapService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </input>
            <output>
                <soap:body use="encoded" namespace="urn:MySoapService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </output>
        </operation>
    </binding>

    <service name="MySoapService">
        <port name="MySoapServicePort" binding="tns:MySoapServiceBinding">
            <soap:address location="http://example.com/soap/server.php"/>
        </port>
    </service>
</definitions>

处理 SOAP 头信息

如果需要处理 SOAP 头信息,可以通过以下方式:

php实现soap

// 客户端添加头信息
$header = new SoapHeader('namespace', 'headerName', 'headerValue');
$client->__setSoapHeaders($header);

// 服务端读取头信息
$headers = $server->getSoapHeaders();

注意事项

  • 确保 PHP 已启用 SOAP 扩展(extension=soapphp.ini 中)。
  • 对于复杂数据类型,需在 WSDL 中正确定义 XML Schema。
  • 使用 HTTPS 协议确保通信安全。
  • 考虑使用缓存机制(如 WSDL_CACHE_DISK)提升性能。

标签: phpsoap
分享给朋友:

相关文章

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php实现https

php实现https

PHP 实现 HTTPS 请求 在 PHP 中实现 HTTPS 请求,可以通过多种方式完成,包括使用内置函数、cURL 扩展或第三方库。以下是几种常见的方法: 使用 file_get_content…

php实现伪静态

php实现伪静态

PHP 实现伪静态的方法 伪静态(URL Rewrite)是一种将动态URL转换为看似静态URL的技术,提升SEO友好性和用户体验。以下是几种常见的实现方式: 使用 Apache 的 mod_rew…

php实现重定向

php实现重定向

使用header函数进行重定向 在PHP中,header()函数是实现重定向的常用方法。通过发送HTTP头信息Location,浏览器会自动跳转到指定URL。需确保在调用header()前没有输出任何…

php实现评论功能

php实现评论功能

数据库设计 创建评论表(示例结构): CREATE TABLE `comments` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id`…