2016-09-05 3 views
2

Я делаю вызов API NameCheap, и они возвращают ответ XML.Laravel GuzzleHTTP XML-ответ на JSON

При попытке вывести это, я получаю ответ NULL.

Попадание одного и того же API, но с расширением Google Расширение POSTMAN. Я получаю результаты, которые мне нужны, я что-то не так с ответом?

public function testCheck($domains){ 

     $client = new Client(); 

     $res = $client->request('GET', 'https://api.namecheap.com/xml.response?ApiUser=(username)&ApiKey=(apikey)&UserName(username)&ClientIp=(ip)&Command=namecheap.domains.check&DomainList=' . $domains); 

     $data = json_decode($res->getBody()); 

     dd($data); 

    } 

я вернусь

null 
+0

Просьба поделиться другим кодом. Маршруты и точка, где вызывается этот API, могут помочь. –

+0

Это простой маршрут, передающий домен функции, которая есть все –

+0

Я не знаю, какую библиотеку вы используете для выполнения запроса. Но вы уверены, что это синхронный звонок? Он может быть асинхронным, поэтому вам придется дождаться его завершения до использования -> getBody()? –

ответ

3

Это то, что я использую, чтобы сделать это ...

Пуск с запросом, например:

$client = new Client; 
$results = $client->request('GET', $this->namecheap_sandbox_url, [ 
    'query' => [ 
     'ApiUser' => $this->ApiUser, 
     'ApiKey' => $this->SandboxApiKey, 
     'UserName' => $this->UserName, 
     'Command' => $this->CheckCommand, 
     'ClientIp' => $this->ClientIp, 
     'DomainList' => $this->DomainList 
    ] 
]); 

$xml = simplexml_load_string($results->getBody(),'SimpleXMLElement',LIBXML_NOCDATA); 

Тогда преобразуйте ваш ответ, например:

// json 
$json = json_encode($xml); 

// array 
$array = json_decode($json, true); 

// array - dot notation 
$array_dot = array_dot($array); 

// collection 
$collection = collect($array); 
0

Вы говорите, что они возвращают XML, но вы пытаетесь разобрать его, как JSON, который получит нуль.

Сохраните тело в переменной и dd(), чтобы вместо отправки его json_decode() подтвердить, что это XML и что вы получаете ответ.

После этого рассмотреть вопрос об использовании XML-парсер, как SimpleXML http://php.net/manual/en/book.simplexml.php

0

Попробуйте

$res = $client->request('GET', 'https://api.namecheap.com/xml.response?ApiUser=(username)&ApiKey=(apikey)&UserName(username)&ClientIp=(ip)&Command=namecheap.domains.check&DomainList=' . $domains)->send()->json(); 
Смежные вопросы