# phalapi-soap **Repository Path**: mirrors_chenall/phalapi-soap ## Basic Information - **Project Name**: phalapi-soap - **Description**: phalapi soap 服务扩展 (PhalApi 2.x) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-08 - **Last Updated**: 2025-12-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## SOAP PhalApi SOAP扩展. 当需要使用SOAP时,需要在配置PHP时,通过```--enable-soap```参数开启SOAP。 ### 安装 在项目下直接运行以下命令即可完成扩展安装。 ``` composer require chenall/phalapi-soap ``` ### 配置 需要将以下扩展配置添加到项目配置文件./Config/SOAP.php。 ``` return array( /** * 扩展类库 - SOAP配置 * @see SoapServer::__construct ( mixed $wsdl [, array $options ] ) */ 'wsdl' => NULL, 'options' => array( 'uri' => 'http://localhost/soap.php', 'port' => NULL, ), ); ``` 其中,wsdl配置对应SoapServer构造函数的第一个参数,options配置则对应第二个参数,其中的uri须与下面的入口文件路径对应。 ### SOAP服务端访问入口 SOAP扩展不需要注册DI服务,但需要单独实现访问入口,参考以下实现。 ``` // $ vim ./Public/soap.php /** * 统一访问入口 */ require_once dirname(__FILE__) . '/init.php'; $di = \PhalApi\DI(); $server = new \PhalApi\SOAP\Lite(); $server->response(); ``` 至此,SOAP的服务端已搭建完毕。接下来,客户端便可通过SOAP进行访问了。 ### SOAP客户端调用 SOAP客户端的使用,需要使用SoapClient类,其使用示例如下所示。 ``` $url = 'http://api.phalapi.net/shop/soap.php'; $params = array('servcie' => 'Welcome.Say'); try { $client = new SoapClient(null, array( 'location' => $url, 'uri' => $url, ) ); $data = $client->__soapCall('response', array(json_encode($params))); //处理返回的数据。。。 var_dump($data); }catch(SoapFault $fault){ echo "Error: ".$fault->faultcode.", string: ".$fault->faultstring; } ``` 注意,客户端传递的接口参数,最后需要JSON编码后再传递。 ### (5) SOAP调试脚本 SOAP扩展提供了一个可以发起SOAP访问的脚本,使用示例如下。 ``` $ ./Library/SOAP/check.php http://api.phalapi.net/shop/soap.php "service=Welcome.Say" array(3) { ["ret"]=> int(200) ["data"]=> string(11) "Hello World" ["msg"]=> string(0) "" } ``` ### (6) 对客户端的影响 当使用SOAP访问接口服务时,服务端可以通过使用SOAP扩展快速搭建Web Services,但对于客户端,如同使用PHPRPC协议一样,也要进行三方面的调整。这里简单说明一下。 + 调用方式的改变 首先是客户端调用方式的改变,需要通过SOAP协议进行访问。 + POST参数传递方式的改变 其次是对POST参数传递的改变。和前面的PHPRPC协议一样,客户端需要把全部的参数JSON编码后再传递。当POST的数据和GET的数据冲突时,以POST为准。 相应地,当需要传递POST参数时,客户需要这样调整: ``` $data = $client->__soapCall('response', array(json_encode($params))); ``` 若无此POST参数,则可以忽略不传。 + 返回结果格式的改变 和PHPRPC协议一样,客户端接收到的是接口服务直接返回的源数据,不再是序列化后返回的字符串。如前面示例中,返回的是数组类型。