Página Inicial > Ruby > correios-sro-xml - Gem para rastreamento de objetos dos Correios

correios-sro-xml - Gem para rastreamento de objetos dos Correios

O Sistema de Rastreamento de Objetos dos Correios (SRO) possibilita o acompanhamento dos objetos postados sob registro, incluindo portanto todas as encomendas SEDEX, e-SEDEX e PAC.

Os Correios disponibilizam um Web Service para consultar o progresso na entrega das mercadorias. O SRO XML permite a consulta de até 50 encomendas simultaneamente.

A gem correios-sro-xml utiliza o SRO XML dos Correios facilitando o uso desse recurso em aplicações Ruby.

Para usar o SRO XML em ambiente de produção, é necessário solicitar dados de acesso (usuário e senha) junto aos Correios, conforme descrito no blog dos Correios.

Para o ambiente de desenvolvimento, você pode usar os seguintes dados:

  • Usuário: ECT
  • Senha: SRO

Instalando

Gemfile:
gem 'correios-sro-xml'

Instalação direta:
$ gem install correios-sro-xml

Usando

require 'correios-sro-xml'

sro = Correios::SRO::Tracker.new(:user => "ECT", :password => "SRO")

Rastreamento de um objeto:

object = sro.get("SI047624825BR")
object.number                   # => "SI047624825BR"
object.events.first.date        # => "26/12/2011"
object.events.first.hour        # => "15:22"
object.events.first.place       # => "AC CENTRAL DE SAO PAULO"
object.events.first.description # => "Entregue"

Rastreamento de vários objetos:

objects = sro.get("SI047624825BR", "SX104110463BR")

objects["SI047624825BR"].number                   # => "SI047624825BR"
objects["SI047624825BR"].events.first.date        # => "26/12/2011"
objects["SI047624825BR"].events.first.hour        # => "15:22"
objects["SI047624825BR"].events.first.place       # => "AC CENTRAL DE SAO PAULO"
objects["SI047624825BR"].events.first.description # => "Entregue"

objects["SX104110463BR"].number                   # => "SX104110463BR"
objects["SX104110463BR"].events.first.date        # => "08/12/2011"
objects["SX104110463BR"].events.first.hour        # => "09:30"
objects["SX104110463BR"].events.first.place       # => "CEE JUNDIAI"
objects["SX104110463BR"].events.first.description # => "Entregue"
Modo de resultado (result mode)

Um objeto pode ter um ou mais eventos. Por padrão, o modo de resultado do rastreador irá retornar o último evento do objeto.

sro.result_mode # => :last

object = sro.get("SI047624825BR")
object.events.size # => 1

Você pode configurar para o retorno ser todos os eventos do objeto.

sro.result_mode = :all

object = sro.get("SI047624825BR")
object.events.size # => 5
Tipo de consulta (query type)

Existem duas maneiras para consultar objetos no rastreador:

Lista de objetos

Onde todos os números de objetos serão consultados (o padrão).

sro.query_type # => :list

objects = sro.get("PB996681660BR", "PB996681700BR")
objects.keys # => ["PB996681660BR", "PB996681700BR"]
Intervalo de objetos

No qual você fornece primeiro e último números de objetos de um intervalo.

sro.query_type = :range

objects = sro.get("PB996681660BR", "PB996681700BR")
objects.keys # => ["PB996681660BR", "PB996681673BR", "PB996681687BR", "PB996681695BR", "PB996681700BR"]

Configurações

Timeout

Por padrão, o tempo de espera de resposta (timeout) para uma requisição ao SRO XML é de 5 segundos. Após isso, se o SRO XML não responder, uma exceção do tipo Timeout::Error será lançada.

Você pode configurar esse tempo de espera usando o módulo Correios::SRO.

Correios::SRO.configure do |config|
  config.request_timeout = 3  # Configura o tempo de espera para 3 segundos
end
Log

Por padrão, cada chamada ao SRO XML é logada em STDOUT, com nível de log :info, usando a gem LogMe.

Exemplo de log:

I, [2012-08-17T00:55:10.531780 #22692]  INFO -- : Correios-SRO-XML Request:
POST http://websro.correios.com.br/sro_bin/sroii_xml.eventos
Usuario=ECT&Senha=SRO&Tipo=L&Resultado=U&Objetos=PB996681660BR

I, [2012-08-17T00:55:10.750308 #22692]  INFO -- : Correios-SRO-XML Response:
HTTP/1.1 200 OK
<?xml version="1.0" encoding="iso-8859-1" ?>
<sroxml>
   <versao>1.0</versao>
   <qtd>1</qtd>
   <TipoPesquisa>Lista de Objetos</TipoPesquisa>
   <TipoResultado>Último evento</TipoResultado>
     <objeto>
       <numero>PB996681660BR</numero>
       <evento>
          <tipo>BDE</tipo>
          <status>01</status>
          <data>05/07/2012</data>
          <hora>21:11</hora>
          <descricao>Entregue</descricao>
          <recebedor>                         </recebedor>
          <documento>                         </documento>
          <comentario>                         </comentario>
          <local>CDD VILA ANDRADE</local>
          <codigo>05724970</codigo>
          <cidade>SAO PAULO</cidade>
          <uf>SP</uf>
          <sto>72824000</sto>
      </evento>
     </objeto>
</sroxml>

Se você configurar o nível de log como :debug, serão logados também todos os cabeçalhos HTTP da requisição e da resposta:

D, [2012-08-17T00:58:56.226742 #22692] DEBUG -- : Correios-SRO-XML Request:
POST http://websro.correios.com.br/sro_bin/sroii_xml.eventos
accept: */*
user-agent: Ruby
content-type: application/x-www-form-urlencoded
Usuario=ECT&Senha=SRO&Tipo=L&Resultado=U&Objetos=PB996681660BR

D, [2012-08-17T00:58:56.495131 #22692] DEBUG -- : Correios-SRO-XML Response:
HTTP/1.1 200 OK
date: Fri, 17 Aug 2012 03:58:56 GMT
server: Oracle-Application-Server-10g/10.1.2.0.2 Oracle-HTTP-Server
content-length: 855
content-type: text/html; charset=ISO-8859-1
x-cache: MISS from 127.0.0.1
connection: close
<?xml version="1.0" encoding="iso-8859-1" ?>
<sroxml>
   <versao>1.0</versao>
   <qtd>1</qtd>
   <TipoPesquisa>Lista de Objetos</TipoPesquisa>
   <TipoResultado>?ltimo evento</TipoResultado>
     <objeto>
       <numero>PB996681660BR</numero>
       <evento>
          <tipo>BDE</tipo>
          <status>01</status>
          <data>05/07/2012</data>
          <hora>21:11</hora>
          <descricao>Entregue</descricao>
          <recebedor>                         </recebedor>
          <documento>                         </documento>
          <comentario>                         </comentario>
          <local>CDD VILA ANDRADE</local>
          <codigo>05724970</codigo>
          <cidade>SAO PAULO</cidade>
          <uf>SP</uf>
          <sto>72824000</sto>
      </evento>
     </objeto>
</sroxml>

Para desabilitar o log, mudar o nível do log ou configurar um outro mecanismo de log, use o módulo Correios::SRO.

Correios::SRO.configure do |config|
  config.log_enabled = false   # Desabilita o log
  config.log_level = :debug    # Altera o nível do log
  config.logger = Rails.logger # Usa o logger do Rails
end
Exemplo de configuração
Correios::SRO.configure do |config|
  config.log_level = :debug
  config.logger = Rails.logger
  config.request_timeout = 3
end
Código no Github

https://github.com/prodis/correios-sro-xml

Gem no RubyGems.org

https://rubygems.org/gems/correios-sro-xml


Ruby , , , ,

  1. 6, janeiro, 2013 em 17:12 | #1

    Segue um exemplo sobre como testar o web service dos correios usando a ferramenta SoapUi

    http://regifelix.com/2013/01/06/testes-de-web-services-com-a-ferramenta-soapui/

  2. claudio umberto siqueira
    16, janeiro, 2014 em 10:52 | #2

    Preciso saber em que se refere o código de registrado sob Nº JF195625255 br ,e, JF 195626241br

  3. 7, junho, 2014 em 02:00 | #3

    Todos os meus objetos retornam apenas o último evento.
    Como eu posso obter todos os eventos (postagem, encaminhamento, saiu para entrega, entregue, etc).

  4. 27, junho, 2014 em 07:18 | #4

    @Diego
    Você precisa colocar o “result_mode” para :all. Dá uma olhada na seção “Modo de resultado (result mode)” desse post que tem um exemplo de como fazer.

  1. Nenhum trackback ainda.