Install the package:
composer require biplane/yandex-direct
Configure credentials (replace placeholders):
use Biplane\YandexDirect\ConfigBuilder;
$config = ConfigBuilder::create()
->setAccessToken('YOUR_ACCESS_TOKEN')
->setClientLogin('YOUR_CLIENT_LOGIN')
->setLocale('ru') // or 'en'
->getConfig();
First API call (e.g., fetch campaigns):
use Biplane\YandexDirect\ApiServiceFactory;
use Biplane\YandexDirect\Api\V5\Campaigns;
$factory = new ApiServiceFactory();
$service = $factory->createService($config, Campaigns::class);
$response = $service->get(Contract\GetCampaignsRequest::create());
Changes service for batch updates.Service Initialization:
$factory = ApiServiceFactoryBuilder::create()
->setLogger(new PsrLogger($psrLogger)) // Optional: PSR-3 logging
->getFactory();
Request Construction (Builder Pattern):
$request = Contract\GetAdsRequest::create()
->setSelectionCriteria(
Contract\AdsSelectionCriteria::create()
->setCampaignIds([123, 456])
->setStates([Contract\StateEnum::ON])
)
->setFieldNames([Contract\AdFieldEnum::ID, Contract\AdFieldEnum::STATUS]);
Execute & Process:
$response = $service->get($request);
foreach ($response->getAds() as $ad) {
$ad->getStatus(); // Access fields via getters
}
Dependency Injection: Register the factory in Laravel’s service container:
$app->bind(ApiServiceFactory::class, function ($app) {
return ApiServiceFactoryBuilder::create()
->setLogger($app->make(PsrLogger::class))
->getFactory();
});
Report Handling (Async):
$reportService = $reportFactory->createService($config);
$report = $reportService->getReady(
Reports\ReportRequestBuilder::create()
->setReportDefinition(
Reports\ReportDefinition::create()
->setReportType(Reports\ReportTypeEnum::CAMPAIGN_PERFORMANCE_REPORT)
)
->getReportRequest()
);
$report->saveToFile(storage_path('reports/demo.tsv'));
Error Handling:
try {
$response = $service->get($request);
} catch (Biplane\YandexDirect\Exception\ApiException $e) {
Log::error('Yandex Direct API Error: ' . $e->getMessage());
}
| Task | Pattern | Example |
|---|---|---|
| Filtering | SelectionCriteria |
setCampaignIds(), setStates() |
| Field Selection | Enums (AdFieldEnum, etc.) |
setFieldNames([AdFieldEnum::ID]) |
| Bulk Updates | Changes Service |
Changes::apply() with ChangeOperation objects |
| Reporting | ReportRequestBuilder |
Chain methods like returnMoneyInMicros(false) |
| Logging | SoapLogger Interface |
Inject PsrLogger for PSR-3 compliance |
SOAP-Specific Issues:
phpinfo()).$factory = ApiServiceFactoryBuilder::create()
->setSoapOptions(['connection_timeout' => 30])
->getFactory();
getUnits() may return null (e.g., no balance data).Report Service Quirks:
guzzlehttp/guzzle). Install via:
composer require guzzlehttp/guzzle
getReady() blocks until the report is ready (no custom interval control).Deprecations:
ConfigBuilder::setSoapOptions() is deprecated (use ApiServiceFactoryBuilder instead).ReportRequest state-modifying methods removed (use ReportRequestBuilder).Enable Logging:
$factory = ApiServiceFactoryBuilder::create()
->setLogger(new PsrLogger(new Monolog\Logger('yandex_direct', [new Monolog\Handler\StreamHandler(storage_path('logs/yandex.log'))])))
->getFactory();
DEBUG (success) or ERROR (failure) levels.Validate SOAP Responses:
SoapFault handling:
try {
$response = $service->get($request);
} catch (SoapFault $fault) {
Log::error('SOAP Fault: ' . $fault->getMessage());
}
Field Enums:
Contract\AdFieldEnum::ID (not strings) to avoid typos. Autocomplete helps:
// IDE will suggest available fields
Contract\AdFieldEnum::
Custom SOAP Options:
$factory = ApiServiceFactoryBuilder::create()
->setSoapOptions([
'trace' => 1, // Enable SOAP tracing
'exceptions' => true,
])
->getFactory();
Override HTTP Client for Reports:
use Http\Client\Common\Plugin\HeaderHandlerPlugin;
use Http\Client\Common\PluginClient;
$httpClient = new PluginClient(
new GuzzleClient(),
[new HeaderHandlerPlugin('User-Agent', 'MyApp/1.0')]
);
$reportFactory = new ReportServiceFactory($httpClient);
Batch Processing:
Changes service for bulk operations:
$changes = Contract\ChangeOperation::create()
->setCreate([
Contract\AdCreate::create()
->setCampaignId(123)
->setText('Promo text')
]);
$service->apply($changes);
Testing:
ApiServiceFactory to return stubbed responses:
$mockFactory = Mockery::mock(ApiServiceFactory::class);
$mockFactory->shouldReceive('createService')
->andReturn(new MockAdsService([/* stubbed data */]));
setFieldNames([AdFieldEnum::ID])).$cacheKey = 'yandex_campaigns_' . $clientLogin;
return Cache::remember($cacheKey, now()->addHours(1), function () use ($service) {
return $service->get(Contract\GetCampaignsRequest::create());
});
How can I help you explore Laravel packages today?