Programação / PHP

Consumindo WebService dos Correios utilizando SOAP/WSDL, XML e CURL

Integração com meio de entrega é essencial para qualquer e-commerce, mas que tal usar o webservice dos correios para aprender a trabalhar com diversos tipos de comunicação?

Por Gustavo Web

Publicado por Gustavo Web
em 29/11/2017 às 17h07

Lista VIP UpInside

Entre para nossa lista VIP e receba vídeo aulas, artigos e tutoriais exclusivos e com prioridade

  QUERO ENTRAR

Aula exclusiva UpInside Play

Acessar aula no Play

Compartilhe:

Salve salve moqueridos, Gustavo Web aqui com mais uma aula para o UpInside Play! Agora vamos ver como fazer com que nossa aplicação se comunique com um webservice utilizando 3 técnicas diferentes.

Antes de começar a por a mão na massa, vou deixar aqui os links de referência que utilizei durante a aula para que você possa estudar a documentação também.

Prepare-se! Se você seguir esse exemplo comigo na aula, no final você terá uma classe pronta para colocar no seu projeto. Já trabalhando com padrão de PSR's, namespace na classe, classe reutilizável com baixo acoplamento e alta coesão, método com responsabilidade clara e definida e atributos privados para garantir a integridade das informações.

Material de Apoio:

Sempre, sempre, sempre utilize a documentação oficial para criar suas integrações. Sempre que alguém desenvolve alguma aplicação onde outros desenvolvedores poderão trabalhar, você contará com a documentação escrita (boa parte das vezes em inglês) ou até mesmo por vídeo aulas. Segue aqui abaixo os links que usei durante a aula para aprender como fazer a integração.

Dentro do nosso repositório do GitHub está a cola que eu usei durante a aula... Assim a gente não precisa ficar digitando tudo :)

Link da página do Correios

Link da documentação Oficial

Link do Artigo do Blog Oficial

Link para o nosso repositório no github (Não esquece de seguir a gente)

Dica:

Se você nunca trabalhou com requisições para endereços externos e quiser ter certeza de que suas requisições funcionam, você pode usar o Postman. O sensei Robson gravou uma outra aula onde ele consumiu a API do Active Campaing e fez o uso da ferramenta... Talvez seja legal você ver como funciona esse recurso que pode te poupar bastante tempo na hora que estiver desenvolvendo e prinicipalmente na hora de fazer testes :)

Se quiser saber mais, só clicar aqui e eu te levo para o Artigo onde o Robson  mostra a ferramenta funcionando!

SOAP, XML e CURL

Como você viu na aula, consumimos os dados dos correios utilizando 3 formas diferente de se comunicar! Tanto o SOAP quanto o XML a documentação é bem descrita e é só seguir o passo a passo que você terá sucesso ao executar as tarefas.

SOAP:

Para trabalhar com essa funcionalidade no seu servidor, é necessário que a sua biblioteca esteja habilitada. Se estiver no localhost você terá que dar uma googlada para encontrar como fazer o processo de instalação de acordo com o seu sistema operacional, se estiver com problemas no seu servidor, entre em contato com o seu host e informe o ocorrido para que possam lhe auxiliar com a solução.

O processo aqui é mais ou menos assim: Cria a comunicação com o SoapClient utilizando a URL do WebService, faz a chamada do método do WS (que deverá estar explícito na documentação), informa os parâmetros para esse método e resgata o callback com as informações.

XML:

No nosso caso, acessamos uma URL informando todos os parâmetros pela URL (portanto estamos utilizando o GET) e chamamos uma função para poder trabalhar com o XML dentro do PHP. Acredite você ou não, mas fazemos isso com duas linhas.

CURL:

Consultamos uma página e informamos um parâmetro através do POST (que é o que a página espera) e resgatamos o HTML dela (e por ter que informar esse parâmetro não podemos usar o file_get_contents). Ao executar a saída nesse HTML é possível ver exatamente o conteúdo que temos na página oficial. Como você pode notar, utilizamos uma biblioteca do PHP para fazer isso,  e pode ser que esse recurso também esteja desativado na sua máquina ou no seu servidor... Se estiver, já sabe o que fazer!

Esse método também é um dos mais chatinhos de se trabalhar, dependendo da integração você precisa fazer algumas parametrizações no HEAD, CHARSET do CURL e/ou informar outras propriedades, mas fique tranquilo, se isso for necessário a documentação estará solicitando.

Processo de Integração:

O processo é praticamente o mesmo quando você vai fazer qualquer tipo de integração, você sempre precisará de determinados parâmetros e receberá outras informações referente a essa troca de dados.

Portanto, quando você for fazer uma integração fique atento a esses parâmetros:

URL:

Endereço da API com que deseja se conectar. Se puder opte sempre pelo https, assim você garante que toda informação que trafega entre os servidores está num ambiente seguro.

Método:

Dependendo do tipo de integração você pode fazer uma chamada diretamente pelo método (como no caso do Soap) ou ainda através de verbalização (no caso do CURL) trabalhando com POST, GET, PUT, DELETE... No caso do XML a gente informa os parâmetros pela URL, portanto o que foi utilizado no exemplo trabalhamos com GET :)

Parâmetros:

São as informações que você está enviando. Para ilustrar melhor, é a nossa variável $params que temos dentro da nossa classe Shipment. Cada tipo de integração tem sua forma de expor os dados.

Callback:

Objeto de retorno da comunicação. Pode ser 1 ou mais objeto informando o status da integração bem como as informações relevantes.

Método Extra:

Se você acompanhou a aula e conseguiu compreender o processo para fazer a integração, agora vou te deixar um desafio! Challange Accept? Vou deixar aqui abaixo um link para uma outra documentação dos correios para fazer a integração com um outro endeço e assim resgatar o último evento de determinada mercadoria despachada pelos correios. Agora eu quero ver :)

Link para a página oficial dos correios com essa funcionalidade

O link para a documentação do método extra

Se você seguir os procedimentos e conseguir executar a tarefa, você chegará a esse resultado:

Como fazer consumo de WebService dos Correios utilizando SOAP/WSDL, XML e CURL

No meu caso eu criei um método rastro dentro da Shipment onde eu informo o código de rastreio que eu quero ter informações e tenho como saída esse resultado. Para invocar esse método ficou assim:

$obj = (object) $ship->rastro('CODIGO_RASTREIO');

Você pode notar que eu converti em objeto também só para ficar mais tranquilo na hora de escrever o código dentro do meu foreach :)

Esse método tem praticamente 4 linhas (vamos assim dizer): Uma para parâmetros, outra de instância do SoapClient, outra consumindo o método do WebService e outra executando o return.

Fique tranquilo o código fonte dela estará dentro do github num arquivo separado e você poderá consultar... Mas faça o seu método sozinho para por em prática! Considere uma lição de casa.

Compartilhe:

Em Programação:

Deixe seu comentário: