2016-09-05 14 views
2

私はNameCheapのAPIを呼び出しており、XML応答を返します。Laravel GuzzleHTTP JSONへのXMLの応答

これを出力しようとすると、応答がNULLになります。

Google拡張機能POSTMANを使用して同じAPIを使用しても、私は後に結果を得ますが、回答に間違っていますか?

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

ドメインを関数に渡す単純なget routeです –

+0

リクエストを行うためにどのライブラリを使用しているのかわかりません。しかし、あなたはそれが同期呼び出しであることを確信していますか?それは非同期かもしれないので、あなたが - > getBody()を使う前にそれが完了するのを待たなければなりませんか? –

答えて

0

取得あなたは、彼らがXMLを返すと言っていますが、nullを取得しますJSON、としてそれを解析しようとしています。

ボディを変数に保存し、json_decode()に送信するのではなく、XMLであることを確認して応答を得ていることを確認してください。その後

は、これは私がちょうどそれを行うために使用しているものです。この

$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(); 
0

をXMLパーサーを使用して検討し、

$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);