raigu / x-road-client
用于使用PSR-18库发送X-Road请求的PHP库
v1.0.0
2023-05-28 08:11 UTC
Requires
- php: ^8.0
- ext-curl: *
- ext-dom: *
- nyholm/psr7: ^1.2
- psr/http-client: ^1.0
- psr/http-message: ^1.0
- raigu/x-road-soap-envelope-builder: ^2.0
Requires (Dev)
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2024-08-28 11:03:44 UTC
README
用于消费X-Road服务的PHP库。
它将服务级别请求和响应暴露给最终应用程序,并隐藏低级逻辑(SOAP、HTTP)。
HTTP通信使用兼容PSR-18的客户机,该客户机必须单独安装。如果需要,这种方法提供了对HTTP层的完全控制。
兼容性
PHP ^8.0
(对于PHP ^7.2使用版本0.1.0)
安装
composer install raigu/x-road-client
使用
<?php $service = \Raigu\XRoad\Service::create( 'EE/COM/00000000/SubSys/Service/v0', // service name 'EE/COM/00000000/SubSys', // client name \Raigu\XRoad\SecurityServer::create( 'https://security-server.client.com', // client's security server new Client // Any PSR-18 compatible client. ) ); $response = $service->request(<<<EOD <prod:testService xmlns:prod="http://test.x-road.fi/producer"> <request> <responseBodySize>5</responseBodySize> </request> </prod:testService> EOD ); echo $response; // will output the service provider's response extracted from SOAP envelope
文档
服务请求
服务请求可以根据WSDL使用像Anayze WSDL或SoapUI这样的工具来制作。参见视频了解如何创建一个。
可以从X-Road目录下载WSDL。使用服务名称进行查找。
错误处理
如果
- 收到状态码不是2xx的响应
- 收到SOAP错误。
- 其他通信问题
HTTP通信
如果您有一个不是PSR-18兼容但可以处理PSR-7请求和响应的客户机,则可以编写一个适配器。例如,如果您已经安装了Guzzle包并希望重用它,则可以创建一个像这样的适配器
class GuzzleAdapter implements \Psr\Http\Client\ClientInterface { /** * @var \GuzzleHttp\Client */ private $client; public function sendRequest(\Psr\Http\Message\RequestInterface $request): \Psr\Http\Message\ResponseInterface { return $this->client->send($request); } public function __construct() { $this->client = new \GuzzleHttp\Client(); } }
演示
检查此库的一种方法是在Docker中设置本地X-Road测试服务器并发出测试请求。
本地安装库。
$ git clone git@github.com:raigu/x-road-client.git
$ cd x-road-client
$ composer install
在Docker容器中运行X-Road测试服务器
$ docker run --rm -p 8080:8080 petkivim/x-road-test-service:v0.0.3
安装PSR-18客户端。在当前示例中,我们将使用
$ composer require php-http/curl-client
在项目的根目录下创建一个名为request.php
的文件
<?php require_once 'vendor/autoload.php'; $service = \Raigu\XRoad\Service::create( $name = 'NIIS-TEST/GOV/0245437-2/TestService/testService/v1', $client = 'NIIS-TEST/GOV/123456-7/testClient', \Raigu\XRoad\SecurityServer::create( 'http://localhost:8080/test-service-0.0.3/Endpoint', // Win users: use your ip. Execute "docker-machine ip" new Http\Client\Curl\Client ) ); $response = $service->request(<<<EOD <prod:testService xmlns:prod="http://test.x-road.fi/producer"> <request> <responseBodySize>5</responseBodySize> <responseAttachmentSize>0</responseAttachmentSize> </request> </prod:testService> EOD ); echo $response; // will output the service provider's response extracted from SOAP envelope
执行脚本
$ php request.php
您应该看到输出
<ts1:request xmlns:ts1="http://test.x-road.fi/producer"> <ts1:responseBodySize>5</ts1:responseBodySize> <ts1:responseAttachmentSize>0</ts1:responseAttachmentSize> </ts1:request>
请参阅我的博客文章以获取有关手动测试X-Road服务的更多信息。
许可证
根据MIT许可