glook/dadata-php-sdk 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

glook/dadata-php-sdk

Composer 安装命令:

composer require glook/dadata-php-sdk

包简介

Typed PHP SDK for Dadata API generated from OpenAPI schemas.

README 文档

README

Typed PHP SDK for Dadata API generated from OpenAPI schemas.

The package exposes two generated clients:

  • Glook\Dadata\Generated\Suggestions\Client for Suggestions API.
  • Glook\Dadata\Generated\Clear\Client for Cleaner API.

For normal usage, create clients through the package factories instead of wiring HTTP clients and authentication plugins by hand.

Installation

composer require glook/dadata-php-sdk

Requirements:

  • PHP 7.4 or newer
  • ext-json
  • A PSR-18 HTTP client available through php-http/discovery

If your application does not already provide a PSR-18 client, install one explicitly:

composer require symfony/http-client

Authentication

Dadata requires an API token and a secret key.

The factories add both generated authentication plugins automatically:

new AuthenticationRegistry([
    new DadataAuthorizationAuthentication('Token '.$token),
    new DadataSecretAuthentication($secret),
])

You only need to pass raw credentials:

use Glook\Dadata\DadataClientFactory;

$token = 'Replace with Dadata API key';
$secret = 'Replace with Dadata secret key';

$suggestions = DadataClientFactory::createSuggestionsClient($token, $secret);
$clear = DadataClientFactory::createClearClient($token, $secret);

HTTP Plugins

Factories accept an optional list of extra Http\Client\Common\Plugin instances. Authentication is always registered first, then your plugins are appended.

use Glook\Dadata\DadataClientFactory;
use Http\Client\Common\Plugin\HeaderDefaultsPlugin;
use Http\Client\Common\Plugin\RetryPlugin;

$client = DadataClientFactory::createSuggestionsClient($token, $secret, [
    new RetryPlugin(['retries' => 2]),
    new HeaderDefaultsPlugin([
        'User-Agent' => 'my-application/1.0',
    ]),
]);

This is the recommended extension point for retries, logging, caching, tracing, rate limiting, custom headers, and framework-specific integrations.

Fetch Modes

Generated methods return typed model objects by default:

$response = $client->suggestAddress($request);

To get the raw PSR-7 response instead, pass Client::FETCH_RESPONSE:

use Glook\Dadata\Generated\Suggestions\Client;

$response = $client->suggestAddress($request, Client::FETCH_RESPONSE);

Suggestions API

Create a Suggestions client:

use Glook\Dadata\DadataClientFactory;

$client = DadataClientFactory::createSuggestionsClient($token, $secret);

Suggest Address

use Glook\Dadata\Generated\Suggestions\Model\SuggestAddressRequest;

$request = (new SuggestAddressRequest())
    ->setQuery('самара метал')
    ->setCount(5);

$response = $client->suggestAddress($request);

foreach ($response->getSuggestions() ?? [] as $suggestion) {
    echo $suggestion->getValue().PHP_EOL;
}

Suggest Address in English

use Glook\Dadata\Generated\Suggestions\Model\SuggestAddressRequest;

$request = (new SuggestAddressRequest())
    ->setQuery('samara metal')
    ->setCount(5)
    ->setLanguage('en');

$response = $client->suggestAddress($request);

Find Address by FIAS or KLADR ID

use Glook\Dadata\Generated\Suggestions\Model\FindAddressByIdRequest;

$request = (new FindAddressByIdRequest())
    ->setQuery('9120b43f-2fae-4838-a144-85e43c2bfb29')
    ->setCount(1);

$response = $client->findByIdAddress($request);

Reverse Geocode Address

use Glook\Dadata\Generated\Suggestions\Model\GeoLocateAddressRequest;

$request = (new GeoLocateAddressRequest())
    ->setLat(55.878)
    ->setLon(37.653)
    ->setRadiusMeters(1000)
    ->setCount(5);

$response = $client->geoLocateAddress($request);

Find Company by INN

use Glook\Dadata\Generated\Suggestions\Model\FindPartyByIdRequest;

$request = (new FindPartyByIdRequest())
    ->setQuery('7707083893')
    ->setCount(5);

$response = $client->findByIdParty($request);

Find by INN and KPP:

$request = (new FindPartyByIdRequest())
    ->setQuery('7707083893')
    ->setKpp('540602001')
    ->setCount(1);

$response = $client->findByIdParty($request);

Suggest Company

use Glook\Dadata\Generated\Suggestions\Model\SuggestPartyRequest;

$request = (new SuggestPartyRequest())
    ->setQuery('сбер')
    ->setCount(5);

$response = $client->suggestParty($request);

Suggest Bank

use Glook\Dadata\Generated\Suggestions\Model\SuggestBankRequest;

$request = (new SuggestBankRequest())
    ->setQuery('ти')
    ->setCount(5);

$response = $client->suggestBank($request);

Suggest Email

use Glook\Dadata\Generated\Suggestions\Model\SuggestRequest;

$request = (new SuggestRequest())
    ->setQuery('maria@')
    ->setCount(5);

$response = $client->suggestEmail($request);

Suggestions Methods

Method Dadata area
suggestAddress(SuggestAddressRequest $request) Address suggestions
suggestParty(SuggestPartyRequest $request) Company suggestions
suggestBank(SuggestBankRequest $request) Bank suggestions
suggestEmail(SuggestRequest $request) Email suggestions
suggestFio(SuggestFioRequest $request) Personal name suggestions
suggestFias(SuggestFiasRequest $request) FIAS suggestions
suggestOutward(string $name, SuggestOutwardRequest $request) Generic suggest endpoint
findByIdAddress(FindAddressByIdRequest $request) Find address by ID
findByIdParty(FindPartyByIdRequest $request) Find company by INN/OGRN
findByIdBank(FindBankByIdRequest $request) Find bank by BIC, SWIFT, INN, or registration number
findByIdFias(FindFiasByIdRequest $request) Find address strictly by FIAS
findByIdDelivery(SuggestRequest $request) Delivery city IDs
findByEmailCompany(SuggestRequest $request) Find company by email
findAffiliatedParty(FindAffiliatedPartyRequest $request) Find affiliated companies
geoLocateAddress(GeoLocateAddressRequest $request) Reverse geocode address
geoLocateOutward(string $name, GeoLocateOutwardRequest $request) Generic geolocate endpoint
ipLocateAddress(IpLocateAddressRequest $request) GeoIP address lookup
findByIdOutward(string $name, SuggestRequest $request) Generic find-by-id endpoint

Cleaner API

Create a Cleaner client:

use Glook\Dadata\DadataClientFactory;

$client = DadataClientFactory::createClearClient($token, $secret);

Clean Address

Cleaner methods accept arrays of strings and return arrays of typed result models.

$addresses = $client->cleanAddress([
    'мск сухонская 11 89',
]);

foreach ($addresses ?? [] as $address) {
    echo $address->getResult().PHP_EOL;
    echo $address->getPostalCode().PHP_EOL;
}

Clean Name

$names = $client->cleanName([
    'Срегей владимерович иванов',
]);

foreach ($names ?? [] as $name) {
    echo $name->getResult().PHP_EOL;
}

Clean Phone

$phones = $client->cleanPhone([
    '9168-233-454',
]);

foreach ($phones ?? [] as $phone) {
    echo $phone->getPhone().PHP_EOL;
}

Clean Email

$emails = $client->cleanEmail([
    'serega@yandex/ru',
]);

foreach ($emails ?? [] as $email) {
    echo $email->getEmail().PHP_EOL;
}

Clean Composite Record

Use cleanRecord() when one input row contains multiple fields.

use Glook\Dadata\Generated\Clear\Model\RecordString;

$request = (new RecordString())
    ->setStructure(['NAME', 'PHONE', 'EMAIL'])
    ->setData([
        ['Срегей владимерович иванов', '9168-233-454', 'serega@yandex/ru'],
    ]);

$response = $client->cleanRecord($request);

Cleaner Methods

Method Dadata area
cleanAddress(array $values) Address cleansing and geocoding
cleanName(array $values) Personal name cleansing
cleanPhone(array $values) Phone cleansing
cleanEmail(array $values) Email cleansing
cleanBirthdate(array $values) Birthdate cleansing
cleanPassport(array $values) Passport cleansing
cleanVehicle(array $values) Vehicle cleansing
cleanAsIs(array $values) Return values without cleansing
cleanRecord(RecordString $request) Composite record cleansing

Error Handling

Generated methods throw UnexpectedStatusCodeException when Dadata returns an unexpected HTTP status code.

use Glook\Dadata\Generated\Suggestions\Exception\UnexpectedStatusCodeException;

try {
    $response = $client->suggestAddress($request);
} catch (UnexpectedStatusCodeException $exception) {
    $statusCode = $exception->getCode();
}

For Cleaner API imports, use Glook\Dadata\Generated\Clear\Exception\UnexpectedStatusCodeException.

Project Structure

src/
  DadataClientFactory.php
generated/
  clear/
  suggestions/
schemas/
  clear.yml
  suggestions.yml
config/
  clear-config.php
  suggestions-config.php
  • src/ contains hand-written public entry points.
  • generated/ contains JanePHP-generated SDK code and is committed to the package.
  • schemas/ contains OpenAPI schemas used for generation.
  • config/ contains JanePHP generator configuration.

Development

Install dependencies:

composer install

Run checks:

composer check

Run unit tests:

composer test

Regenerate clients from schemas:

composer generate:all

Generate only one client:

composer generate:suggestions
composer generate:clear

After generation, review generated code and commit it together with schema/config changes.

License

MIT

统计信息

  • 总下载量: 7
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 4
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-05-18

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固