rishatss
@rishatss
Simple Developer ^)

Как отослать XML запрос с авторизацией использую Guzzle?

Добрый день.
Пытаюсь организовать запрос используя Guzzle. Но не совсем пойму как мне отправить XML запрос и получить ответ.

<?php
$composer = __DIR__ . '/../vendor/autoload.php';
if(!file_exists($composer))
{
    throw new \Exception('Composer not found in: ' . $composer);
}
require_once $composer;

$client = new GuzzleHttp\Client();


$request = $client->createRequest('GET', '10.128.128.8', [
    'auth' => [
        'login',
        'password'
    ]
]);
$request->setPort(5007);

......


Сейчас имею вот такой вот набросок. Также мне предоставили пример XML запроса. Следовательно как мне его вставить и получить ответ?
Спасибо за любую помощь :)
  • Вопрос задан
  • 294 просмотра
Решения вопроса 1
Recosh
@Recosh
Программист студент
Вот так общаюсь с яндексом по 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 записывается ответ
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы