• Модуль: seo
  • Путь к файлу: ~/bitrix/modules/seo/lib/analytics/services/accountyandex.php
  • Класс: BitrixSeoAnalyticsServicesAccountYandex
  • Вызов: AccountYandex::getExpenses
public function getExpenses($accountId = null, Date $dateFrom = null, Date $dateTo = null)
{
	// https://tech.yandex.ru/direct/doc/reports/example-docpage/
	$result = new ResponseYandex();
	$expenses = new Expenses();

	// preload currency cause we can lost it if request after report
	$this->getCurrency();
	$result->setData(['expenses' => $expenses]);

	$dateFrom = $dateFrom ?: new Date();
	$dateTo = $dateTo ?: new Date();

	$options = [
		'params' => [
			'SelectionCriteria' => [
				'DateFrom' => $dateFrom->format('Y-m-d'),
				'DateTo' => $dateTo->format('Y-m-d'),
			],
			'FieldNames' => [
				'Impressions', 'Clicks', 'Conversions', 'Cost',
				'AvgCpc',
				//'AvgCpm'
			],
			'ReportType' => 'ACCOUNT_PERFORMANCE_REPORT',
			'DateRangeType' => 'CUSTOM_DATE',
			'ReportName' => 'Account Report',
			'Format' => 'TSV',
			'IncludeVAT' => 'YES',
			'IncludeDiscount' => 'YES',
		],
	];

	$profile = $this->getProfile();
	if(empty($profile['NAME']))
	{
		return $result->addError(new Error("Can not find user name."));
	}

	$client = $this->getClient();
	$client->setHeader('Client-Login', $profile['NAME']);
	$client->setHeader('returnMoneyInMicros', 'false');
	$client->setHeader('skipReportHeader', 'true');
	//$client->setHeader('processingMode', 'online');
	$response = $client->post(
		$this->getYandexServerAdress() . 'reports',
		Json::encode($options)
	);

	if($client->getStatus() != 200)
	{
		return $result->addError($this->getReportErrorByHttpStatus($client->getStatus()));
	}
	if($response)
	{
		$expenses->add($this->parseReportData($response));
	}
	else
	{
		return $result->addError(new Error('Empty report data'));
	}

	return $result;
}