webmasterskaya / php-kladr-api
Requires
- php: ^8.0
- nyholm/psr7: ^1.8
- psr-discovery/http-client-implementations: ^1.0
- psr/http-client: ~1
- symfony/options-resolver: ^7.0
Requires (Dev)
- guzzlehttp/guzzle: ^7.8
This package is auto-updated.
Last update: 2024-12-12 12:13:39 UTC
README
PHP API для интеграции с сервисом "ФИАС в облаке". Данный SDK поможет быстрее внедрить в ваш проект инструменты взаимодействия с актуальной база всех почтовых адресов России.
ФИАС в облаке — актуальная база всех почтовых адресов России. Легко интегрируется с вашим сайтом, помогает устранить ошибки при написании адресов и делает этот процесс быстрым и удобным.
Подходит для интернет-магазинов, почтовых и курьерских служб, микрофинансирования и сайтов, где клиенту требуется указать адрес.
Перед началом работы
- Требуется PHP 8.0 или выше.
- Требуется наличие реализации PSR-18 (HTTP Client).
В SDK применяется спецификация PSR-18 (HTTP-client). Это значит, что в вашем проекте должны быть зарегистрированы классы, реализующие эту спецификацию (например, Guzzle).
Для автоматического обнаружения зависимостей используются пакеты psr-discovery. Подробнее, об автоматическом обнаружении зависимостей
Установка
Установка осуществляется с помощью пакетного менеджера Composer
composer require webmasterskaya/php-kladr-api
Инициализация
Для начала работы, создайте экземпляр клиента:
$client = new \Webmasterskaya\Kladr\Client(string $token, array $config => []);
Список параметров:
token
- токен доступа. Опционально. Получить токен доступа, можно здесь. При использовании клиента без токена, подключение будет осуществляться по бесплатному тарифу.config
- массив с параметрами клиента. Опциональное. По-умолчанию - пустой массив. Допустимые поля:url
- определяет, по какому адресу библиотека будет пытаться подключиться к API
Поиск по всем доступным полям адреса
Для выполнения полнотекстового поиска по всем доступным полям адреса, обратитесь к методу queryString
:
$result = $client->queryString(string $query, array $config = [], int $limit = 10, int $offset = 0);
Метод вернёт массив со списком объектов, содержащих поисковую фразу. Подробнее смотрите в разделе "Ответ сервиса"
Note Если в $query передать слово "Новгород", то в ответе будут возвращены адреса у которых это слово встречается в названии Региона, Населённого пункта и Улицы
Список параметров:
query
- строка запроса (что хотите найти?)config
- массив с параметрами запроса. Опциональное. По-умолчанию - пустой массив. Допустимые поля:withParent
- если установить этот параметр равным 1 илиtrue
, то в ответ будут включены родительские объекты (для района это регион, для населённого пункта - район и регион и т.п.)regionId
,districtId
,cityId
- идентификатор региона, района и населённого пункта, соответственно. Применяется для ограничения поиска внутри конкретного объекта.
limit
- количество результатов в ответе. Опциональное. По-умолчанию - 10. Чтобы вернуть весь список, без ограничения, установитеlimit
равным нулюoffset
- смещение результатов (для организации постраничной навигации). Опциональное. По-умолчанию - 0
Поиск только по указанному полю адреса
Для выполнения поиска только по указанному полю адреса (например, только в названиях городов), обратитесь к методу queryField
:
$result = $client->queryString(string $query, array $config = [], int $limit = 10, int $offset = 0);
Метод вернёт массив со списком объектов, содержащих поисковую фразу, в указанном поле. Подробнее смотрите в разделе "Ответ сервиса"
Список параметров:
query
- строка запроса (что хотите найти?)config
- массив с параметрами запроса. Обязательное. Допустимые поля:withParent
- если установить этот параметр равным 1 илиtrue
, то в ответ будут включены родительские объекты (для района это регион, для населённого пункта - район и регион и т.п.)regionId
,districtId
,cityId
,streetId
,buildingId
- идентификатор региона, района, населённого пункта, улицы и строения, соответственно. Применяется для ограничения поиска внутри конкретного объекта.contentType
- тип объекта (поле), по которому производится поиск. Обязательное. Допустимые типы объектовzip
- почтовый индекс. Работает только при contentType = building.
typeCode
- тип населённого пункта. Указывает, какие типы населённых пунктов будут участвовать в поиске. Допустимые типы населённых пунктов. Поддерживается битовая комбинация (например, для получения списка только сёл и деревень, передайтеCode::VILLAGE | Code::RURAL
)
limit
- количество результатов в ответе. Опциональное. По-умолчанию - 10. Чтобы вернуть весь список, без ограничения, установитеlimit
равным нулюoffset
- смещение результатов (для организации постраничной навигации). Опциональное. По-умолчанию - 0
Допустимые типы объектов
Все доступные типы перечисленны в класе Webmasterskaya\Kladr\Type\Content
Допустимые типы населённых пунктов
Все доступные типы перечисленны в класе Webmasterskaya\Kladr\Type\Code
Ответ сервиса
Пример ответа, без родительских объектов
[ "searchContext" => // Массив с параметрами запроса [ "oneString" => "1", "query" => "Новгород" ], "result" => [ // Результаты поиска [ "id" => "5200000100000", // КЛАДР Код объекта "name" => "Нижний Новгород", // Название объекта "zip" => null, // Почтовый индекс "type" => "Город", // Тип объекта "typeShort" => "г", // Короткая запись типа объекта "okato" => "22401000000", // Код ОКАТО "contentType" => "city", // Тип объекта, в соответсвии с типами объектов, описанными в классе \Webmasterskaya\Kladr\Type\Content "fullName" => "Нижегородская Область, Город Нижний Новгород", // Полный адрес объекта "guid" => "555e7d61-d9a7-4ba6-9770-6caa8198c483", // ФИАС Код объекта "ifnsfl" => "", // Код ФНС для физических лиц "ifnsul" => "", // Код ФНС для юридических лиц "oktmo" => "22701000001", // Код ОКТМО "parentGuid" => "88cd27e2-6a8a-4421-9718-719a28a0a088", // ФИАС Код родительского объекта "cadnum" => "" // ??? ] ] ];
Пример ответа, с перечнем родительских объектов
[ "searchContext"=> [ // Массив с параметрами запроса "contentType"=> "city", "query"=> "Новом", "withParent"=> "1", "limit"=> 1 ], "result"=> [ // Результаты поиска [ "id"=> "6201200200000", // КЛАДР Код объекта "name"=> "Новомичуринск", // Название объекта "zip"=> 391160, // Почтовый индекс "type"=> "Город", // Тип объекта "typeShort"=> "г", // Короткая запись типа объекта "okato"=> "61225514000", // Код ОКАТО "contentType"=> "city", // Тип объекта, в соответсвии с типами объектов, описанными в классе \Webmasterskaya\Kladr\Type\Content "guid"=> "dc0c31cd-e03e-4fc3-a714-1c9f4b61cc7e", // Полный адрес объекта "ifnsfl"=> "6219", // Код ФНС для физических лиц "ifnsul"=> "6219", // Код ФНС для юридических лиц "oktmo"=> "61625114001", // Код ОКТМО "parentGuid"=> "0b2f6225-49e6-49d0-ab5b-625b9fb94554", // ФИАС Код родительского объекта "cadnum"=> "", // ??? "parents"=> [ // Массив родительских объектов, отсортированный от более крупного, к более мелкому (Регион->Район->Нас.пункт->Улица) [ "id"=> "6200000000000", "name"=> "Рязанская", "zip"=> 390000, "type"=> "Область", "typeShort"=> "обл", "okato"=> "61000000000", "contentType"=> "region", "guid"=> "963073ee-4dfc-48bd-9a70-d2dfc6bd1f31", "ifnsfl"=> "6200", "ifnsul"=> "6200", "oktmo"=> "61000000", "parentGuid"=> "", "cadnum"=> "" ], [ "id"=> "6201200000000", "name"=> "Пронский", "zip"=> 391159, "type"=> "Район", "typeShort"=> "р-н", "okato"=> "61225000000", "contentType"=> "district", "guid"=> "0b2f6225-49e6-49d0-ab5b-625b9fb94554", "ifnsfl"=> "6219", "ifnsul"=> "6219", "oktmo"=> "", "parentGuid"=> "963073ee-4dfc-48bd-9a70-d2dfc6bd1f31", "cadnum"=> "" ] ] ] ] ]
Автоматическое обнаружение зависимостей
Ознакомиться со списком автоматически обнаруживаемых библиотек можно по ссылкам ниже:
Если в списке автоматического обнаружения нет библиотеки, используемой на вашем проекте, то её нужно зарегистрировать самостоятельно. Подробнее, о ручной регистрации зависимостей
Ручная регистрация зависимостей
Пример регистрации HttpClient в Bitrix
\PsrDiscovery\Implementations\Psr18\Clients::add( \PsrDiscovery\Entities\CandidateEntity::create( 'bitrix/main', '~23', static function (string $class = '\Bitrix\Main\Web\HttpClient') { return new $class; } ) );
Пример регистрации HttpClient в Joomla
\PsrDiscovery\Implementations\Psr18\Clients::add( \PsrDiscovery\Entities\CandidateEntity::create( 'joomla/http', '~3', static function (string $class = '\Joomla\Http\Http') { return new $class; } ) );