一个 PHP SDK,用于验证澳大利亚商业号码 (ABN) 并使用澳大利亚商业登记 Web 服务 API 进行验证。验证和验证之间的区别可以概述如下:
为了使用 API(仅用于验证),您需要注册一个帐户以接收用作 API 密钥的 GUID。注册后,您可以使用官方演示来使用 API(请注意,此 SDK 使用 JSON 服务而不是 XML)。
SDK 利用 Symfony Serializer 和 Symfony Validator 来反序列化和验证从 ABR API 返回的数据,以提供有效的 AbnResponse 和 NamesResponse 模型。这意味着,如果您收到来自 SDK 的响应,则保证该响应是有效的。
来自 ABR 的无效响应分为三类,并进行例外处理:
AbrConnectionException
:无法连接到 ABR,或者 ABR 返回意外响应InvalidAbnException
:ABN 无效(即验证失败)AbnNotFoundException
:ABN 有效,但未分配给企业(即验证失败) $ composer require hyraiq/abnlookup
在services.yaml
中,您需要将 ABR GUID 传递给AbnClient
并使用AbnClientInterface
注册AbnClient
:
HyraAbnLookupAbnClientInterface : ' @HyraAbnLookupAbnClient '
HyraAbnLookupAbnClient :
arguments :
$abnLookupGuid : " %env(ABN_LOOKUP_GUID)% "
然后,您可以将AbnClientInterface
直接注入控制器/服务中。
class VerifyAbnController extends AbtractController
{
public function __construct (
private AbnClientInterface $ abnClient ,
) {
}
// ...
}
如果您不使用 Symfony,则需要自己实例化 ABN 客户端,该客户端可以在您的服务容器中注册或直接使用。我们在Dependencies
类中提供了一些帮助器,以便用最少的选项创建 Symfony 序列化器和验证器。
use Hyra AbnLookup Dependencies ;
use Hyra AbnLookup AbnClient ;
$ abrGuid = ' <insert your ABR GUID here> '
// Whichever http client you choose
$ httpClient = new HttpClient ();
$ denormalizer = Dependencies :: serializer ();
$ validator = Dependencies :: validator ();
$ abnClient = new AbnClient ( $ denormalizer , $ validator , $ httpClient , $ abrGuid );
配置AbnClient
后,您可以查找单独的 ABN。请注意,这将在调用 API 之前验证 ABN,以防止不必要的 API 请求。
$ abn = ' 12620650553 ' ;
try {
$ abnResponse = $ abnClient -> lookupAbn ( $ abn );
} catch ( AbrConnectionException $ e ) {
die ( $ e -> getMessage ())
} catch ( InvalidAbnException ) {
die ( ' Invalid ABN ' );
} catch ( AbnNotFoundException ) {
die ( ' ABN not found ' );
}
echo $ abnResponse -> abn ; // 12620650553
echo $ abnResponse -> entityName ; // Blenktech PTY LTD
echo $ abnResponse -> status ; // Active
您还可以按名称搜索 ABR,以接收与搜索词匹配的注册企业列表:
$ namesResponse = $ abnClient -> lookupName ( ' Hyra iQ ' );
echo sprintf ( ' Received %d results ' , count ( $ namesResponse -> names ));
foreach ( $ namesResponse -> names as $ name ) {
echo sprintf ( ' %s: %s ' , $ name -> abn , $ name -> name );
}
在自动化测试中,您可以将AbnClient
替换为StubAbnClient
以模拟来自 ABR 的响应。您还可以在测试期间使用AbnFaker
来获取有效和无效的 ABN。
use Hyra AbnLookup Stubs AbnFaker ;
use Hyra AbnLookup Stubs StubAbnClient ;
$ stubClient = new StubAbnClient ();
$ stubClient -> lookupAbn ( AbnFaker :: invalidAbn ()); // InvalidAbnException - Note, the stub still uses the validator
$ stubClient -> lookupAbn ( AbnFaker :: validAbn ()); // LogicException - You need to tell the stub how to respond to specific queries
$ abn = AbnFaker :: validAbn ();
$ stubClient -> addNotFoundAbns ( $ abn );
$ stubClient -> lookupAbn ( $ abn ); // AbnNotFoundException
$ abn = AbnFaker :: validAbn ();
$ mockResponse = new AbnResponse ();
$ response -> abn = $ abn ;
$ response -> abnStatus = ' active ' ;
$ response -> abnStatusEffectiveFrom = new DateTimeImmutable ( ' 2 years ago ' );
$ response -> entityTypeCode = ' PRV ' ;
$ response -> entityTypeName = ' Australian Private Company ' ;
$ stubClient -> addMockResponse ( $ mockResponse );
$ abnResponse = $ stubClient -> lookupAbn ( $ abn ); // $abnResponse === $mockResponse
欢迎所有贡献!您需要安装 docker 才能在本地运行测试和 CI 进程。这些还将针对您的拉取请求运行,并将任何失败添加为文件视图中的 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 被接受,它需要经过测试并被以下机构接受: