2015-08-26 8 views
2

Я хочу проверить ответы на основе xml с сервера, вот пример формата ответа.guzzle 6.0 call to undefined method GuzzleHttp Psr7 Response :: xml()

<response> 
    <code>success</code> 
</response> 

Мой существующий код,

использование GuzzleHttp \ Client;

$client = new Client(); 
$response = $client->post('http://example.com/verify', [ 
    'form_params' => [ 
     'transID' => 1234, 
     'orderID' => 6789, 
     'token' => '0X45FJH79GD3332' 
    ] 
]); 

$xml = $response->xml(); 

dd($xml); 

Однако, когда я сделать запрос на ошибку сервера происходит, как показано ниже.

Призыв к неопределенному методу GuzzleHttp \ pSR7 \ Response :: XML()

ответ

3

Я считаю, что документация устарела (для версии 5.3 на самом деле, я полагаю, вы используете 6. *)

Говорят, Отправка запроса вернет объект Guzzle \ Http \ Message \ Response. В этой версии Guzzle вы получаете GuzzleHttp \ Psr7 \ Response вместо этого, который не реализует метод xml().

Вы можете пойти и проверить старую версию на https://github.com/guzzle/guzzle/blob/5.3/src/Message/Response.php и использовать этот метод в качестве примера для кода:

public function xml(array $config = []) 
    { 
     $disableEntities = libxml_disable_entity_loader(true); 
     $internalErrors = libxml_use_internal_errors(true); 
     try { 
      // Allow XML to be retrieved even if there is no response body 
      $xml = new \SimpleXMLElement(
       (string) $this->getBody() ?: '<root />', 
       isset($config['libxml_options']) ? $config['libxml_options'] : LIBXML_NONET, 
       false, 
       isset($config['ns']) ? $config['ns'] : '', 
       isset($config['ns_is_prefix']) ? $config['ns_is_prefix'] : false 
      ); 
      libxml_disable_entity_loader($disableEntities); 
      libxml_use_internal_errors($internalErrors); 
     } catch (\Exception $e) { 
      libxml_disable_entity_loader($disableEntities); 
      libxml_use_internal_errors($internalErrors); 
      throw new XmlParseException(
       'Unable to parse response body into XML: ' . $e->getMessage(), 
       $this, 
       $e, 
       (libxml_get_last_error()) ?: null 
      ); 
     } 
     return $xml; 
    }