一個 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 被接受,它需要經過測試並被以下機構接受: