Вот так общаюсь с яндексом по xml:
$acc = $this->get_auth_token_by_id($reklama_account_id);
$dom = new domDocument("1.0", "utf-8"); // Создаём XML-документ версии 1.0 с кодировкой utf-8
$root = $dom->createElement("ReportDefinition");
$root->setAttribute('xmlns','http://api.direct.yandex.com/v5/reports');
$dom->appendChild($root);
$SelectionCriteria = $dom->createElement("SelectionCriteria");
//Установка даты
$DateFrom = $dom->createElement("DateFrom", $data['date_nach']);
$DateTo = $dom->createElement("DateTo", $data['date_konech']);
$SelectionCriteria->appendChild($DateFrom);
$SelectionCriteria->appendChild($DateTo);
$root->appendChild($SelectionCriteria);
//Установка полей, которые нам нужны
$FieldNames = $dom->createElement("FieldNames", "Impressions");
$root->appendChild($FieldNames);
$FieldNames = $dom->createElement("FieldNames", "Clicks");
$root->appendChild($FieldNames);
$FieldNames = $dom->createElement("FieldNames", "Ctr");
$root->appendChild($FieldNames);
$FieldNames = $dom->createElement("FieldNames", "Cost");
$root->appendChild($FieldNames);
//Имя отчёта (должно быть уникальным)
$ReportName = $dom->createElement("ReportName", $report_name);
$root->appendChild($ReportName);
//Тип отчёта
$ReportType = $dom->createElement("ReportType", 'ACCOUNT_PERFORMANCE_REPORT');
$root->appendChild($ReportType);
$DateRangeType = $dom->createElement("DateRangeType", "CUSTOM_DATE"); //У нас своё время
$root->appendChild($DateRangeType);
//Формат запроса отчёта
$Format = $dom->createElement("Format", "TSV");
$root->appendChild($Format);
//Включаем НДС
$IncludeVAT = $dom->createElement("IncludeVAT", "YES");
$root->appendChild($IncludeVAT);
$IncludeDiscount = $dom->createElement("IncludeDiscount", "NO");
$root->appendChild($IncludeDiscount);
$data_string = (string)$dom->saveXML();
$ch = curl_init('https://api.direct.yandex.com/v5/reports');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer '.$acc['app_token'],
'Accept-Language: ru',
'returnMoneyInMicros: false',
'skipReportHeader: true',
'skipReportSummary: true'
));
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_HEADER, true);
$result = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$header = substr($result, 0, $header_size);
$body = substr($result, $header_size);
В $data_string записывается xml строка и через curl отправляется
В переменную $body записывается ответ