hyraiq/uk-companies-house-lookup

使用英国公司注册处网络服务API对英国商业编号进行验证和验证

v1.3.0 2023-05-25 01:01 UTC

This package is auto-updated.

Last update: 2024-09-25 05:13:37 UTC


README

PHP SDK,用于验证英国公司注册编号(CRN)并使用英国公司注册处公共数据API进行验证。验证和验证之间的区别可以概括如下:

  • 验证使用正则表达式检查给定的编号是否为有效的CRN。这 不会 联系API以确保给定的CRN分配给了企业
  • 验证通过公司注册处的API获取与CRN注册的信息。它会告诉您CRN是否确实属于企业。

为了使用API(仅用于验证),您需要 注册账户 以获取API密钥。

类型安全

SDK利用Symfony SerializerSymfony 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被接受,它需要通过测试并接受