meng-tian / soap-http-binding
一个将 SOAP 消息绑定到 PSR-7 HTTP 消息的 PHP 库。
0.4.1
2022-11-21 21:54 UTC
Requires
- php: >=7.1.0
- meng-tian/php-soap-interpreter: ~2.0
- psr/http-factory: ~1.0
Requires (Dev)
- laminas/laminas-diactoros: ^2.0
- phpunit/phpunit: ~7.0|~9.3
This package is not auto-updated.
Last update: 2024-09-24 06:53:36 UTC
README
此库将 SOAP 1.1
和 SOAP 1.2
消息绑定到 PSR-7 HTTP 消息。
需求
PHP 7.1
安装
composer require meng-tian/soap-http-binding
用法
HttpBinding::request
将 SOAP 请求消息嵌入到 PSR-7 HTTP 请求中。
use Meng\Soap\HttpBinding\HttpBinding; use Meng\Soap\HttpBinding\RequestBuilder; use Meng\Soap\Interpreter; use Laminas\Diactoros\RequestFactory; use Laminas\Diactoros\StreamFactory; $interpreter = new Interpreter('http://www.webservicex.net/airport.asmx?WSDL'); $streamFactory = new StreamFactory(); $requestFactory = new RequestFactory(); $builder = new RequestBuilder($streamFactory, $requestFactory); $httpBinding = new HttpBinding($interpreter, $builder, $streamFactory); $request = $httpBinding->request('GetAirportInformationByCountry', [['country' => 'United Kingdom']]); echo \Laminas\Diactoros\Request\Serializer::toString($request);
输出
POST /airport.asmx HTTP/1.1
Content-Length: 322
SOAPAction: http://www.webserviceX.NET/GetAirportInformationByCountry
Content-Type: text/xml; charset="utf-8"
Host: www.webservicex.net
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://www.webserviceX.NET"><SOAP-ENV:Body><ns1:GetAirportInformationByCountry><ns1:country>United Kingdom</ns1:country></ns1:GetAirportInformationByCountry></SOAP-ENV:Body></SOAP-ENV:Envelope>
HttpBinding::response
从 PSR-7 HTTP 响应中检索 SOAP 响应消息。
use Meng\Soap\HttpBinding\HttpBinding; use Meng\Soap\HttpBinding\RequestBuilder; use Meng\Soap\Interpreter; use Laminas\Diactoros\Response; use Laminas\Diactoros\Stream; use Laminas\Diactoros\RequestFactory; use Laminas\Diactoros\StreamFactory; $response = <<<EOD <?xml version="1.0" encoding="utf-8"?> <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetAirportInformationByCountryResponse xmlns="http://www.webserviceX.NET"> <GetAirportInformationByCountryResult>some result</GetAirportInformationByCountryResult> </GetAirportInformationByCountryResponse> </soap:Body> </soap:Envelope> EOD; $stream = new Stream('php://memory', 'r+'); $stream->write($response); $stream->rewind(); $response = new Response($stream, 200, ['Content-Type' => 'text/xml; charset=utf-8']); $interpreter = new Interpreter('http://www.webservicex.net/airport.asmx?WSDL'); $streamFactory = new StreamFactory(); $requestFactory = new RequestFactory(); $builder = new RequestBuilder($streamFactory, $requestFactory); $httpBinding = new HttpBinding($interpreter, $builder, $streamFactory); $response = $httpBinding->response($response, 'GetAirportInformationByCountry'); print_r($response);
输出
stdClass Object
(
[GetAirportInformationByCountryResult] => some result
)
此库还支持通过 RequestBuilder
类使用 SOAP 1.2
HTTP GET 绑定。
use Meng\Soap\HttpBinding\RequestBuilder; use Laminas\Diactoros\RequestFactory; use Laminas\Diactoros\StreamFactory; $streamFactory = new StreamFactory(); $requestFactory = new RequestFactory(); $builder = new RequestBuilder($streamFactory, $requestFactory); $request = $builder->isSOAP12() ->setEndpoint('http://www.endpoint.com') ->setHttpMethod('GET') ->getSoapHttpRequest(); echo \Laminas\Diactoros\Request\Serializer::toString($request);
输出
GET / HTTP/1.1
Accept: application/soap+xml
Host: www.endpoint.com
许可
此库在 MIT 许可下发布。