itk-dev / serviceplatformen
Installs: 12 994
Dependents: 6
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 2
Open Issues: 1
Requires
- php: ^8.1
- composer-runtime-api: ^2.2
- ext-curl: *
- ext-dom: *
- ext-json: *
- ext-openssl: *
- ext-simplexml: *
- ext-soap: *
- goetas-webservices/xsd2php-runtime: ^0.2.16
- http-interop/http-factory-guzzle: ^1.2
- itk-dev/azure-key-vault-php: ^1.0
- jms/serializer: ^3.18
- php-http/guzzle7-adapter: ^1.0
- symfony/cache: ^5.4 || ^6.0
- symfony/http-client: ^5.4 || ^6.0
- symfony/options-resolver: ^5.4 || ^6.0
- symfony/property-access: ^4.4 || ^5.4 || ^6.0
- symfony/string: ^5.4 || ^6.0
- symfony/uid: ^5.4 || ^6.0
- wsdltophp/packagebase: ^5.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.11
- goetas-webservices/xsd2php: dev-feature-xml-namespace-prefix
- phan/phan: ^5.4
- phpstan/phpstan: ^1.8
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.7
- symfony/console: ^5.4 || ^6.0
- symfony/mime: ^5.4 || ^6.0
- wsdltophp/packagegenerator: ^4.1
README
Library for interacting with services on Serviceplatformen.
Supported services
- CPR replika opslag (SF1520_3.6): https://digitaliseringskataloget.dk/integration/sf1520?version=3.6
- CVR-Online (SF1530_2.4): https://digitaliseringskataloget.dk/integration/sf1530
- Parts of Afsend post (SF1601): https://digitaliseringskataloget.dk/integration/sf1601. See SF1601: Afsend post for details.
Updating resources and classes
We use WsdlToPhp/PackageGenerator to generate PHP classes for talking to SOAP services. To update resources and generated classes, run
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer install # Update WSDL resources. docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest bin/generate resources # Generate PHP classes from WSDL resources. docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest bin/generate classes
Test commands
docker run --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest vendor/bin/serviceplatformen-sf1601-kombipostafsend --help
Use bin/serviceplatformen-sf1601-kombipostafsend
(symlinked to
bin/SF1601/kombipostafsend
) during development of this library. i.e.
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest bin/serviceplatformen-sf1601-kombipostafsend
docker run --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest vendor/bin/serviceplatformen-sf1601-postforespoerg --help
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest bin/serviceplatformen-sf1601-postforespoerg
Getting Started
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See deployment for notes on how to deploy the project on a live system.
Prerequisites
- Git 2.25 or above.
- PHP 7.3 or above.
- Composer 1.9 or above.
Installing
Clone the repository:
git clone https://github.com/itk-dev/serviceplatformen
Install the dependencies:
cd serviceplatformen
composer install
Running the tests
Unit tests:
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer tests/unit
End to end tests:
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer tests/end-to-end
And coding style tests
PHP_CodeSniffer
composer coding-standards-check/phpcs
PHP-CS-Fixer
composer coding-standards-check/php-cs-fixer
Static code analysis
Phan
composer static-code-analysis/phan
Deployment
composer require itk-dev/serviceplatformen
Usage
Certificate stored on local filesystem
<?php require_once 'vendor/autoload.php'; use ItkDev\Serviceplatformen\Certificate\FilesystemCertificateLocator; use ItkDev\Serviceplatformen\Request\InvocationContextRequestGenerator; use ItkDev\Serviceplatformen\Service\PersonBaseDataExtendedService; $certificateLocator = new FilesystemCertificateLocator(__DIR__.'path_to_certificate.pem', 'passphrase if any'); $pathToWsdl = __DIR__.'/resources/person-base-data-extended-service-contract/wsdl/context/PersonBaseDataExtendedService.wsdl'; $options = [ 'local_cert' => $certificateLocator->getAbsolutePathToCertificate(), 'passphrase' => $certificateLocator->getPassphrase(), 'location' => 'https://url.to.service.endpoint' ]; $soapClient = new SoapClient($pathToWsdl, $options); $requestGenerator = new InvocationContextRequestGenerator( 'xxxx', // Service agreement UUID 'xxxx', // User system UUID 'xxxx', // Service UUID 'xxxx' // User UUID ); $service = new PersonBaseDataExtendedService($soapClient, $requestGenerator); $response = $service->personLookup('1234567891'); var_dump($response);
Certificate stored in Azure Key Vault
See Storing certificates in the vault for details on storing a certificate in the Azure Key Vault.
<?php require_once 'vendor/autoload.php'; use ItkDev\AzureKeyVault\Authorisation\VaultToken; use ItkDev\AzureKeyVault\KeyVault\VaultSecret; use ItkDev\Serviceplatformen\Certificate\AzureKeyVaultCertificateLocator; use ItkDev\Serviceplatformen\Request\InvocationContextRequestGenerator; use ItkDev\Serviceplatformen\Service\PersonBaseDataExtendedService; $vaultToken = new VaultToken( $httpClient, // PSR-18 compatible http client $requestFactory // PSR-17 compatible request factory ); $token = $vaultToken->getToken( 'xxxx', // Azure tenant id 'xxxx', // Client id (azure application id) 'xxxx' // Client secret ); $vault = new VaultSecret( $httpClient, // PSR-18 compatible http client $requestFactory, // PSR-17 compatible request factory 'testVault', // Name of vault $token->getAccessToken() ); $certificateLocator = new AzureKeyVaultCertificateLocator( $vault, 'xxxx', // Name of the certificate 'xxxx', // Version of the certificate 'yyyy' // optional passphrase for the certificate ); $pathToWsdl = __DIR__.'/resources/person-base-data-extended-service-contract/wsdl/context/PersonBaseDataExtendedService.wsdl'; $options = [ 'local_cert' => $certificateLocator->getAbsolutePathToCertificate(), 'passphrase' => $certificateLocator->getPassphrase(), 'location' => 'https://url.to.service.endpoint' ]; $soapClient = new SoapClient($pathToWsdl, $options); $requestGenerator = new InvocationContextRequestGenerator( 'xxxx', // Service agreement UUID 'xxxx', // User system UUID 'xxxx', // Service UUID 'xxxx' // User UUID ); $service = new PersonBaseDataExtendedService($soapClient, $requestGenerator); $response = $service->personLookup('1234567891'); var_dump($response);
Contributing
Pull Request Process
Before creating a pull request make sure you have considered the following:
- Updating the README.md with details of changes that are relevant.
- Updating the CHANGELOG.md with new features/changes/bug fixes etc.
You may merge the Pull Request in once you have the sign-off of one other developer, or if you do not have permission to do that, you may request the reviewer to merge it for you.
Coding standards
docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer install docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer coding-standards-apply docker run --interactive --tty --rm --volume ${PWD}:/app itkdev/php8.1-fpm:latest composer coding-standards-check
docker run --rm --volume ${PWD}:/md peterdavehello/markdownlint markdownlint --ignore vendor --ignore LICENSE.md '**/*.md' --fix docker run --rm --volume ${PWD}:/md peterdavehello/markdownlint markdownlint --ignore vendor --ignore LICENSE.md '**/*.md'
Code analysis
docker run --interactive --tty --rm --volume ${PWD}:/app --env COMPOSER_MEMORY_LIMIT=-1 itkdev/php8.1-fpm:latest composer code-analysis
Versioning
We use SemVer for versioning. For the versions available, see the tags on this repository.
License
This project is licensed under the MIT License - see the LICENSE.md file for details