Trabalhando com um objeto stdClass obtido através de um Web Service

Hoje tive um desafio. Precisava trabalhar com um conteúdo XML obtido à partir de um Web Service. O problema era que o conteúdo XML estava dentro de um objeto stdClass. Veja o que eu obtinha com um var_dump:

object(stdClass)#2 (1) {
["ConsultarProdutosResult"]=>
object(stdClass)#3 (1) {
["any"]=>
string(1458324) "10001POLTRONA"
}
}

Sim, um objeto dentro de outro objeto. Por algum motivo não consegui trabalhar com o método do mesmo. Embora o comando var_export me informasse que o método do objeto se chamava __set_state, ao utiliza-lo, aparecia um erro dizendo que o método era indefinido. O que eu fiz? Forcei os 2 objetos para array e obtive sucesso:

try {
$opt = array('encoding' => 'utf8');
$cliente = new SoapClient('http://exemplo.com.br/wsExemplo.asmx?wsdl', $opt);

$produtos = $cliente->ConsultaProdutos();
$produtos = (array) $produtos;
$produtos = (array) $produtos['ConsultaProdutosResult'];
$produtos = $produtos['any'];

echo $produtos;
} catch (SoapFault $e) {
echo $e->getMessage();
}
silvio

Sobre Silvio Tenfen Junior

Experiência desde 2011 em Desenvolvimento Web e Sistemas. Desenvolvimento de Sites Estáticos e Auto-gerenciáveis com PHP Puro, ASP, CodeIgniter, CakePHP, Symfony, Zend, Joomla, WordPress, WooCommerce e React. Desenvolvimento de Web Services. Montagem de Lojas Virtuais Magento e WooCommerce com integração de estoque de produtos e pedidos. Integração com Pagamentos. Backup, Configuração e Manutenção de Servidores Linux (Amazon Web Services e DigitalOcean). Migração de Serviços de Hospedagem (Sites e E-mails). Atendimento ao Cliente para E-mails, Sites e Sistemas.

1 comentário em “Trabalhando com um objeto stdClass obtido através de um Web Service

  1. claudio marques da silva

    Cara, você salvou o meu dia , muiot obrigado pelo exemplo , para mim funcionou perfeitamente.

    Obrigado , por ter compoartilhado , o meu exemplo foi este e deu certo :

    $pedido = $client->PedidoGrava($parametros);
    $pedido = (array)$pedido;
    $pedido = (array)$pedido[‘PedidoGravaResult’];
    $pedido = $pedido[‘string’];

    echo $pedido;

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> 

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.