shipping7 / correios-java-sdk Goto Github PK
View Code? Open in Web Editor NEWCorreios Java SDK
Home Page: https://shipping7.github.io/correios-java-sdk/
License: MIT License
Correios Java SDK
Home Page: https://shipping7.github.io/correios-java-sdk/
License: MIT License
Manter o padrão de nomes em portugues
Quando a busca é feita por mais de um tracking code, a busca é feita um a um batendo no serviço, e existe um método para bater no Correios com todos os tracking codes de uma vez.
Adicionar ao SDK um método para trazer etiquetas dado um um tipo de serviço do Correios e número de etiquetas que deseja
A ideia é que o SDK possa trabalhar com outros módulos, como:
Hoje o SDK está fazendo uma conversão errada do status de processamento do Objeto.
Obs: remover plugins não utilizados no Gradle
Trazer os dados de estimativa (preço e prazo) e mapear todos os possíveis erros.
Acontece um erro ao fazer gradle clean pois o arquivo está usando autenticação com o Sonatype que ainda não existe
Quando buscar vários objetos, cada um deles pode trazer um erro diferente, então não é correto lançar exceção porque não sabemos se todos estão com erros.
A estrutura do modelo de PLP precisa devolver o status do processamento e a cubagem como valor ao invés de texto.
Mapear todos os Status e Tipos como Enum de acordo com a documentação oficial dos correios.
Quando acontece algum problema na chamada da API de postagem, não conseguimos verificar o erro que aconteceu.
Possibilitar o usuário buscar os eventos passando mais dados.
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.
// 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();
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 seja rodado o comando abaixo sem erros devido ao Javadoc incompleto
$ gradle clean release -Pgradle.useAutomaticVersion=true --info --stacktrace
Adicionar mais informações ao Evento quando o objeto for recebido, ou seja, quando estiver no status BDE 1, que é Objeto entregue ao destinatário por exemplo.
As seguintes informações também devem ser mostradas no objeto:
Permitir que usuário busque os eventos de uma lista de tracking codes
Por estar desatualizado, o calculador parou de funcionar, tanto para preço e prazo, quanto para prazo.
Precisamos que o fechamento da PLP seja feito pelo próprio SDK. Para o fechamento precisamos:
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:
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>
Essa atualização é necessária pois os Correios podem mudar o código do serviço e o SDK pode não acompanhar essa mudança, quebrando o client do SDK.
Remover dependência do javadoc jar
Diferenciar Sandbox e Production via package no primeiro momento
Adicionar o atributo UsuarioInstalacao na classe GerenteDeConta
Criar o converter apropriado
Criar os testes
Fix build.gradle removendo configs para build no Maven Central
Para maior acessibilidade do SDK, migrar para java 1.6
<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>
Melhorar a granularidade a fim de especificar cada erro encontrado. Hoje está retornando absent() ao lançar exception e o cliente não sabe se funcionou ou se não foi encontrado
Mudar de gradle para maven para facilitar o release no Maven Central
O objetivo é permitir que o SDK seja usado por projetos que ainda não estejam com Java 8 e nem Java 7
A Documentação oficial indica como podemos fazer a integração
Generate classes based on SOAP Xml used by Correios
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 e possivelmente no Maven Central em seguida
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.
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.
Builder com metodo:
CorreiosRastreioApi.CorreiosRastreioComIdioma.CorreiosRastreioComTipoDeIdentificador.somenteUltimoEvento()
deve retornar somente a opcao getPacoteTracker()
Obs: A nova forma já foi utilizada na solicitação de Etiquetas
Adiciona BigDecimal como resposta às seguintes informações: valorServicoAvisoDeRecebimento, valorServicoMaoPropria, valorSeguro, valor e valorSemAdicionais.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.