Coder Social home page Coder Social logo

shipping7 / correios-java-sdk Goto Github PK

View Code? Open in Web Editor NEW
33.0 13.0 16.0 609 KB

Correios Java SDK

Home Page: https://shipping7.github.io/correios-java-sdk/

License: MIT License

Java 100.00%
correios correios-rastreio wsdl sdk correios-sdk webservice correios-api correios-sro correios-cep correios-frete

correios-java-sdk's People

Contributors

alexandregama avatar douglascampos avatar elo7-developer avatar ericdallo avatar gabriellimagomes avatar lucasnakano avatar mariofts avatar waffle-iron avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

correios-java-sdk's Issues

Permitir que a solicitação de etiquetas seja feita pelo SDK

  • Permitir que o usuário do SDK solicite somente 1 etiqueta
  • Permitir que o usuário do SDK solicite N etiquetas
  • Permitir que o usuário do sdk consiga retornar o prefixo da etiqueta
  • Permitir que o usuário do sdk consiga retornar o sufixo da etiqueta
  • Permitir que o usuário do sdk consiga retornar o número da etiqueta
  • Permitir que o usuário do sdk consiga retornar a etiqueta completa, já com o dígito verificador

Retornar os eventos de um pacote a partir do seu Tracking Code

Objetivo

Retornar os eventos de um pacote a partir do seu Tracking Code. Esta issue é extremamente básica e somente irá cobrir a forma mais simples de retornar a lista de eventos de um pacote.

To Do

  • Retornar a lista de eventos de um pacote a partir do seu Tracking Code
  • Converter os objetos dos correios em objetos próprios para o Tracking
  • Converter os eventos dos correios em objetos próprios para o Tracking
  • Converter o destino enviado pelos correios em objetos próprios para o Tracking
  • Permitir que o usuário passe as credenciais necessárias para o uso da API

Observações

  • Não fazer o tratamento do campo tipo enviado para os correios via API
  • Não fazer o tratamento do campo resultado enviado para os correios via API
  • Não fazer o tratamento do campo lingua enviado para os correios via API
  • Não fazer o tratamento do campo objetos enviado para os correios via API

Busca de detalhes no Rastreio está considerando chamadas anteriores

// código SDK
if (codigosDeRastreio != null && !codigosDeRastreio.isEmpty()) {
	return new SoapCorreiosServicoRastreioApi(credentials, new Rastro().getServicePort(), converter).buscaDetalhesRastreio(codigosDeRastreio, idioma, resultado, LISTA_DE_OBJETOS);
} else if (StringUtils.isNotEmpty(codigoDeRastreio)) {
	return new SoapCorreiosServicoRastreioApi(credentials, new Rastro().getServicePort(), converter).buscaDetalhesRastreio(codigoDeRastreio, idioma, resultado, LISTA_DE_OBJETOS);
}

Como codigosDeRastreio e codigoDeRastreio são atributos da Classe CorreiosRastreioAPI, se ela for construída uma única vez para todas as chamadas, então uma chamada anterior poderia impactar na próxima chamada como nesse caso:

//Caso de uso
DetalhesRastreio detalhesRastreio = correiosApi.buscaPacotesRastreadosPelaListaDeTrackings(Arrays.asList("PO885187892BR","PN210491273BR","DU698173525BR")).comRetornoEmPortugues().somenteUltimoEvento().getDetalhesRastreio();

DetalhesRastreio detalhesRastreio2 = correiosApi.buscaPacoteRastreadoUsandoOCodigo("PN210491273BR").comRetornoEmPortugues().somenteUltimoEvento().getDetalhesRastreio();

Retorno de ObjetoRastreio mesmo aplicando filtro de busca

Ao executar uma busca de ObjetroRastreio filtrando, mesmo assim trás o objeto, exemplo:

Optional<ObjetoRastreio> objetoRastreio = correiosRastreioApi.buscaRastreio()
				.peloCodigoDeRastreio(trackingCode)
				.comRetornoEmPortugues()
				.somenteComUltimoEvento()
				.getDetalhesRastreio()
				.getObjetosRastreio()
				.stream()
				.findAny();

Se o trackingCode existir mesmo sem ultimo evento o retorno não é empty()

Permitir que uma PLP seja fechada pelo SDK

Objetivo

Precisamos que o fechamento da PLP seja feito pelo próprio SDK. Para o fechamento precisamos:

  • Criar o XML que o Correios recebe para o Fechamento da PLP
  • Id da PLP do Cliente
  • Faixa de Etiquetas para a PLP

Técnico

O seguinte payload precisa ser enviado para os Correios para o Fechamento de uma PLP

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cli="http://cliente.bean.master.sigep.bsb.correios.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <cli:fechaPlp>
         <!--Optional:-->
         <xml>?</xml>
         <!--Optional:-->
         <idPlpCliente>?</idPlpCliente>
         <!--Optional:-->
         <cartaoPostagem>?</cartaoPostagem>
         <!--Optional:-->
         <faixaEtiquetas>?</faixaEtiquetas>
         <!--Optional:-->
         <usuario>?</usuario>
         <!--Optional:-->
         <senha>?</senha>
      </cli:fechaPlp>
   </soapenv:Body>
</soapenv:Envelope>

Como você pode notar, o Correios recebe o parâmetro xml no corpo do Payload. Esse XML precisa seguir o XSD enviado pelos próprios Correios conforme você pode ver abaixo:

correios_plp.txt

Um exemplo poderia ser:

<?xml version="1.0" encoding="UTF-8"?>
<correioslog>
   <tipo_arquivo>Postagem</tipo_arquivo>
   <versao_arquivo>2.3</versao_arquivo>
   <plp>
      <id_plp />
      <valor_global />
      <mcu_unidade_postagem />
      <nome_unidade_postagem />
      <cartao_postagem>123456789</cartao_postagem>
   </plp>
   <remetente>
      <numero_contrato>123654789</numero_contrato>
      <numero_diretoria>1</numero_diretoria>
      <codigo_administrativo>12365478</codigo_administrativo>
      <nome_remetente><![CDATA[Empresa Ltda]]></nome_remetente>
      <logradouro_remetente><![CDATA[Rua do Remetente]]></logradouro_remetente>
      <numero_remetente>2370</numero_remetente>
      <complemento_remetente><![CDATA[sala 1205,12 andar]]></complemento_remetente>
      <bairro_remetente><![CDATA[Bairro do Remetente]]></bairro_remetente>
      <cep_remetente><![CDATA[70002900]]></cep_remetente>
      <cidade_remetente><![CDATA[Brasilia]]></cidade_remetente>
      <uf_remetente>PR</uf_remetente>
      <telefone_remetente />
      <fax_remetente />
      <email_remetente><![CDATA[[email protected]]]></email_remetente>
   </remetente>
   <forma_pagamento />
   <objeto_postal>
      <numero_etiqueta>PH185560916BR</numero_etiqueta>
      <codigo_objeto_cliente />
      <codigo_servico_postagem>40096</codigo_servico_postagem>
      <cubagem>3,80</cubagem>
      <peso>200</peso>
      <rt1 />
      <rt2 />
      <destinatario>
         <nome_destinatario><![CDATA[Nome Destinatatio]]></nome_destinatario>
         <telefone_destinatario />
         <celular_destinatario />
         <email_destinatario><![CDATA[[email protected]]]></email_destinatario>
         <logradouro_destinatario><![CDATA[Rua do Comprador]]></logradouro_destinatario>
         <complemento_destinatario><![CDATA[Qd: 102 A Lt: 04]]></complemento_destinatario>
         <numero_end_destinatario>1065</numero_end_destinatario>
      </destinatario>
      <nacional>
         <bairro_destinatario><![CDATA[Bairro do Destinatario]]></bairro_destinatario>
         <cidade_destinatario><![CDATA[Goiania]]></cidade_destinatario>
         <uf_destinatario>GO</uf_destinatario>
         <cep_destinatario><![CDATA[70002900]]></cep_destinatario>
         <codigo_usuario_postal />
         <centro_custo_cliente />
         <numero_nota_fiscal />
         <serie_nota_fiscal />
         <valor_nota_fiscal />
         <natureza_nota_fiscal />
         <descricao_objeto />
         <valor_a_cobrar />
      </nacional>
      <servico_adicional>
         <codigo_servico_adicional>025</codigo_servico_adicional>
         <codigo_servico_adicional>019</codigo_servico_adicional>
         <valor_declarado>17</valor_declarado>
      </servico_adicional>
      <dimensao_objeto>
         <tipo_objeto>2</tipo_objeto>
         <dimensao_altura>20</dimensao_altura>
         <dimensao_largura>30.0</dimensao_largura>
         <dimensao_comprimento>38.0</dimensao_comprimento>
         <dimensao_diametro>0</dimensao_diametro>
      </dimensao_objeto>
      <data_postagem_sara />
      <status_processamento>0</status_processamento>
      <numero_comprovante_postagem />
      <valor_cobrado />
   </objeto_postal>
</correioslog>

Permitir retornar os dados do XML de uma PLP a partir do seu id

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cli="http://cliente.bean.master.sigep.bsb.correios.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <cli:solicitaXmlPlp>
         <!--Optional:-->
         <idPlpMaster>67488374</idPlpMaster>
         <!--Optional:-->
         <usuario>seu usuario</usuario>
         <!--Optional:-->
         <senha>sua senha</senha>
      </cli:solicitaXmlPlp>
   </soapenv:Body>
</soapenv:Envelope>

Gerar as classes de Stub baseadas no WSDL dos Correios

Goal

Generate classes based on SOAP Xml used by Correios

Documentation

WSDL document used to track some package based on its code

SOAP Contract:

<definitions xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsp="http://www.w3.org/ns/ws-policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:tns="http://resource.webservice.correios.com.br/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" name="rastro" targetNamespace="http://resource.webservice.correios.com.br/">
<types>
<xsd:schema>
<xsd:import namespace="http://resource.webservice.correios.com.br/" schemaLocation="Rastro_schema1.xsd"/>
</xsd:schema>
</types>
<message name="buscaEventosLista">
<part name="parameters" element="tns:buscaEventosLista"></part>
</message>
<message name="buscaEventos">
<part name="parameters" element="tns:buscaEventos"></part>
</message>
<message name="ListaEntregaExterna">
<part name="parameters" element="tns:ListaEntregaExterna"></part>
</message>
<message name="buscaEventosListaResponse">
<part name="parameters" element="tns:buscaEventosListaResponse"></part>
</message>
<message name="UnidadesSRO">
<part name="parameters" element="tns:UnidadesSRO"></part>
</message>
<message name="ListaEntregaExternaResponse">
<part name="parameters" element="tns:ListaEntregaExternaResponse"></part>
</message>
<message name="buscaEventosResponse">
<part name="parameters" element="tns:buscaEventosResponse"></part>
</message>
<message name="RastroJson">
<part name="parameters" element="tns:RastroJson"></part>
</message>
<message name="UnidadesSROResponse">
<part name="parameters" element="tns:UnidadesSROResponse"></part>
</message>
<message name="RastroJsonResponse">
<part name="parameters" element="tns:RastroJsonResponse"></part>
</message>
<portType name="Service">
<operation name="buscaEventos">
<input message="tns:buscaEventos" wsam:Action="buscaEventos"></input>
<output message="tns:buscaEventosResponse" wsam:Action="http://resource.webservice.correios.com.br/Service/buscaEventosResponse"></output>
</operation>
<operation name="buscaEventosLista">
<input message="tns:buscaEventosLista" wsam:Action="buscaEventosLista"></input>
<output message="tns:buscaEventosListaResponse" wsam:Action="http://resource.webservice.correios.com.br/Service/buscaEventosListaResponse"></output>
</operation>
<operation name="RastroJson">
<input message="tns:RastroJson" wsam:Action="RastroJson"></input>
<output message="tns:RastroJsonResponse" wsam:Action="http://resource.webservice.correios.com.br/Service/RastroJsonResponse"></output>
</operation>
<operation name="ListaEntregaExterna">
<input message="tns:ListaEntregaExterna" wsam:Action="ListaEntregaExterna"></input>
<output message="tns:ListaEntregaExternaResponse" wsam:Action="http://resource.webservice.correios.com.br/Service/ListaEntregaExternaResponse"></output>
</operation>
<operation name="UnidadesSRO">
<input message="tns:UnidadesSRO" wsam:Action="UnidadesSRO"></input>
<output message="tns:UnidadesSROResponse" wsam:Action="http://resource.webservice.correios.com.br/Service/UnidadesSROResponse"></output>
</operation>
</portType>
<binding name="ServicePortBinding" type="tns:Service">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="buscaEventos">
<soap:operation soapAction="buscaEventos"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="buscaEventosLista">
<soap:operation soapAction="buscaEventosLista"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="RastroJson">
<soap:operation soapAction="RastroJson"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="ListaEntregaExterna">
<soap:operation soapAction="ListaEntregaExterna"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="UnidadesSRO">
<soap:operation soapAction="UnidadesSRO"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="rastro">
<port name="ServicePort" binding="tns:ServicePortBinding">
<soap:address location="http://webservice.correios.com.br:80/service/rastro"/>
</port>
</service>
</definitions>

Configurar build.gradle para permitir deploy no Sonatype

Goal

Configurar build.gradle para permitir deploy no Sonatype e possivelmente no Maven Central em seguida

To Do

  • Criar conta no Jira
  • Pedir credenciais para o Sonatype através de ticket
  • Modificar o build.gradle para permitir a geração do pom.xml necessário para o release

Permitir que seja feita uma Busca por Cliente

To Do

A busca por cliente nos correios leva em consideração o seguinte XML SOAP

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:cli="http://cliente.bean.master.sigep.bsb.correios.com.br/">
   <soapenv:Header/>
   <soapenv:Body>
      <cli:buscaCliente>
         <!--Optional:-->
         <idContrato>?</idContrato>
         <!--Optional:-->
         <idCartaoPostagem>?</idCartaoPostagem>
         <!--Optional:-->
         <usuario>?</usuario>
         <!--Optional:-->
         <senha>?</senha>
      </cli:buscaCliente>
   </soapenv:Body>
</soapenv:Envelope>

O SDK deve permitir que seja feita uma busca pelo cliente levando em consideração os parâmetros acima.

Documentação da página oficial

A documentação na página oficial do SDK sugere o exemplo:

CorreiosCredentials credentials = new CorreiosCredentials("username", "password");

Porém o correto seria:

CorreiosCredenciais credenciais = new CorreiosCredenciais("username", "password");

Estou usando a versão 0.0.28-BETA.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.