hyraiq / uk-companies-house-lookup
使用英国公司注册处网络服务API对英国商业编号进行验证和验证
Requires
- php: >=8.1
- ext-json: *
- phpdocumentor/reflection-docblock: ^5.3
- phpstan/phpdoc-parser: ^1.2
- symfony/cache: ^5.0 | ^6.0
- symfony/http-client: ^5.0 | ^6.0
- symfony/property-access: ^5.0 | ^6.0
- symfony/property-info: ^5.0 | ^6.0
- symfony/serializer: ^5.0 | ^6.0
- symfony/validator: ^5.0 | ^6.0
Requires (Dev)
- ext-zip: *
- fakerphp/faker: 1.14.1
- friendsofphp/php-cs-fixer: ^3.3
- mheap/phpunit-github-actions-printer: ^1.5
- pepakriz/phpstan-exception-rules: ^0.12.0
- phpmd/phpmd: ^2.11
- phpstan/phpstan: ^1.2
- phpstan/phpstan-phpunit: ^1.0
- phpstan/phpstan-strict-rules: ^1.1
- phpunit/phpunit: ^9.5
- staabm/annotate-pull-request-from-checkstyle: ^1.7
- symfony/flex: ^2.0
- vimeo/psalm: ^4.14
README
PHP SDK,用于验证英国公司注册编号(CRN)并使用英国公司注册处公共数据API进行验证。验证和验证之间的区别可以概括如下:
- 验证使用正则表达式检查给定的编号是否为有效的CRN。这 不会 联系API以确保给定的CRN分配给了企业
- 验证通过公司注册处的API获取与CRN注册的信息。它会告诉您CRN是否确实属于企业。
为了使用API(仅用于验证),您需要 注册账户 以获取API密钥。
类型安全
SDK利用Symfony Serializer和Symfony Validator来反序列化和验证从API返回的数据,以提供有效的CompanyResponse模型。这意味着如果您从SDK收到响应,则可以保证它是有效的。
API的无效响应分为三类,使用异常处理
ConnectionException.php
:无法连接到API或API返回了意外的响应NumberInvalidException.php
:CRN无效(即验证失败)NumberNotFoundException.php
:CRN有效,但它未分配给企业(即验证失败)
使用方法
安装
$ composer require hyraiq/uk-companies-house-lookup
与Symfony配置
在services.yaml
中,您需要将您的ABR API密钥传递给ApiClient
并将ApiClient
注册到ApiClientInterface
Hyra\UkCompaniesHouseLookup\ApiClientInterface: '@Hyra\UkCompaniesHouseLookup\ApiClient' Hyra\UkCompaniesHouseLookup\ApiClient: arguments: $apiKey: "%env(UK_COMPANIES_HOUSE_API_KEY)%"
然后您可以直接将ApiClientInterface
注入到您的控制器/服务中。
class VerifyController extends AbtractController { public function __construct( private ApiClientInterface $apiClient, ) { } // ... }
在Symfony之外配置
如果您不使用Symfony,您需要自己实例化API客户端,它可以在服务容器中注册或直接使用。我们在Dependencies
类中提供了一些辅助函数,以便使用最少选项创建Symfony Serializer和Validator。
use Hyra\UkCompaniesHouseLookup\Dependencies; use Hyra\UkCompaniesHouseLookup\ApiClient; $apiKey = '<insert your API key here>' // Whichever http client you choose $httpClient = new HttpClient(); $denormalizer = Dependencies::serializer(); $validator = Dependencies::validator(); $apiClient = new ApiClient($denormalizer, $validator, $httpClient, $apiKey);
查找商业编号
一旦您已配置了您的ApiClient
,您就可以查找单个CRN。请注意,这将在调用API之前验证CRN,以防止不必要的API请求。
$number = '04264132'; try { $response = $apiClient->lookupNumber($number); } catch (ConnectionException $e) { die($e->getMessage()) } catch (NumberInvalidException) { die('Invalid business number'); } catch (NumberNotFoundException) { die('Business number not found'); } echo $response->companyNumber; // 04264132 echo $response->companyName; // BENTLEY CARS LIMITED echo $response->status; // active
测试
在自动化测试中,您可以将ApiClient
替换为StubApiClient
以模拟API的响应。还有BusinessNumberFaker
,您可以在测试期间使用它来获取有效的和无效的CRN。
use Hyra\UkCompaniesHouseLookup\Stubs\BusinessNumberFaker; use Hyra\UkCompaniesHouseLookup\Stubs\StubApiClient; $stubClient = new StubApiClient(); $stubClient->lookupNumber(BusinessNumberFaker::invalidBusinessNumber()); // NumberInvalidException - Note, the stub still uses the validator $stubClient->lookupNumber(BusinessNumberFaker::validBusinessNumber()); // LogicException - You need to tell the stub how to respond to specific queries $businessNumber = BusinessNumberFaker::validBusinessNumber(); $stubClient->addNotFoundBusinessNumbers($businessNumber); $stubClient->lookupNumber($businessNumber); // NumberNotFoundException $businessNumber = BusinessNumberFaker::validBusinessNumber(); $mockResponse = MockCompanyResponse::valid(); $mockResponse->businessNumber = $businessNumber; $stubClient->addMockResponse($mockResponse); $response = $stubClient->lookupNumber($businessNumber); // $response === $mockResponse
贡献
欢迎所有贡献!为了在本地运行测试和CI过程,您需要安装docker。这些也会与您的拉取请求一起运行,任何失败都会作为GitHub注释添加到文件视图中。
# First build the required docker container $ docker compose build # Then you can install composer dependencies $ docker compose run php ./composer.phar install # Now you can run tests and other tools $ docker compose run php make (fix|psalm|phpstan|phpunit)
为了使您的PR被接受,它需要通过测试并接受