GithubHelp home page GithubHelp logo

tchaguitos / correios-rest Goto Github PK

View Code? Open in Web Editor NEW
49.0 49.0 6.0 11.05 MB

Uma alternativa simples e fácil para utilizar os serviços dos Correios

License: MIT License

JavaScript 100.00%
express json nodejs rest-api

correios-rest's Introduction

webdeveloper, coffee addicted, creator hipster

Trabalho com desenvolvimento web há pouco mais de 6 anos e, nesse tempo, trabalhei em diversos projetos utilizando Django, FastAPI, Flask, NodeJS, VueJS, React native e outras tecnologias da web. Minhas ferramentas e tecnologias favoritas são:

  • Python, FastAPI, Django framework
  • PostgreSQL, MongoDB
  • NodeJS, ExpressJS
  • Javascript, VueJS
  • React Native

Links de projetos pessoais

Playlists que ouço no dia a dia

correios-rest's People

Contributors

tchaguitos 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  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

correios-rest's Issues

Dúvidas

Este código esta funcionando em PHP 5, 5.6, 7.0, 7.1 ou até mesmo em 7.2 ?
São muitas dúvidas e nada pessoal... (Já deixo claro)
Este código esta nas normativas novas dos correios (2017) e que pelo visto já existe novas normativas em (2018)...
Bom, este não é o único que visualizamos que aparentemente esta tudo correto.
Mas, tenho que ser este USUÁRIO questionador, já que estamos enfrentando tantos problemas seja eles em PHP, AJAX ou qualquer impulso anterior á 2017.
E assim vem as dúvidas...

Gostaria de saber se podemos implementar este código em outras ferramentas e até mesmo em outas plataformas...

Espero que tenhamos uma resposta satisfatória e um UPGRADE. (O que neste notamos que o upgrade é notavel).

S.O = Centos7 - Plesk
Php = 5.6 / 7.0

Alteração do endpoint no read.me

Em primeiro lugar: excelente trabalho, muito obrigado pelo código já estou usando na minha aplicação.
Agora sugiro uma pequena correção no read.me, pois, na explicação pede-se para acessar o endpoint 'v1/price' e atualmente o seu projeto está funcionando no endpoint 'v1/calc-preco/'. No mais o código está muito bom e super legível.

Implementar endpoint para cálculo de prazo de entrega com data especificada

Documentação

O endpoint deverá receber os parâmetros necessários, no formato JSON, através de um POST e devolver, no corpo da requisição, a resposta do webservice dos Correios.

Qual o script de funcionamento do endpoint?

O endpoint deverá:

  1. Receber os parâmetros
  2. Construir um objeto com base nos parâmetros passados
  3. Realizar a chama ao webservice dos Correios
  4. Devolver um JSON

Explicando melhor cada etapa

Receber os parâmetros:

Parâmetros exigidos pelo webservice dos Correios:

  • nCdServico (string) - obrigatório :
    Representa a modalidade do frete (PAC, Sedex ou outro).

    -- 40010 = SEDEX Varejo
    -- 40045 = SEDEX a Cobrar Varejo
    -- 40215 = SEDEX 10 Varejo
    -- 40290 = SEDEX Hoje Varejo
    -- 41106 = PAC Varejo

    Ex: "40010"

  • sCepOrigem (string) - obrigatório:
    CEP de origem da encomenda. Deve ser enviado sem o hífen.

    Ex: "37410000"

  • sCepDestino (string) - obrigatório:
    CEP de destino também sem o hífen.

    Ex: "37410000"

  • sDtCalculo (string):
    Representa a data que o webservice deve utilizar para fazer o cálculo (nos outros métodos, ele utiliza a data atual, nesse você pode especificar a data)

    Ex: "14/03/2018"

Construir um objeto com base nos parâmetros passados:

Construa um objeto passando as variáveis provenientes do corpo da requisição (as variáveis enviadas no corpo da requisição podem ser acessadas utilizando "req.body.nomeDaVariavel")

Realizar a chamada ao webservice dos Correios:

  • Qual o método?:
    O método utilizado será o POST.

  • Qual o jeito mais fácil?:
    Importe o método "makeRequest" e o utilize passando a URL a ser requisitada, o método a ser utilizado (POST) e o objeto construído na segunda etapa (o método já vai fazer o resto e retornar o JSON resultante da requisição).

const response = await makeRequest('http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrazoData', 'POST', obj);
PS: não se esqueça de deixar explícito que o nosso controller é uma função assíncrona.

  • Qual a URL do webservice?:
    A URL que deverá receber a requisição é a seguinte:

url: 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrazoData'

Devolver um JSON:

Basta passar o valor da variável "response", da etapa anteior, chamar o objeto "res" do Express e utilizar o método "json" passando "response".

res.json(response);

Adaptar função para parsear respostas diferentes

Por que?

O webservice responde num padrão diferente quando precisamos fazer buscas relacionadas a objetos. O XML retornado contém algumas outras chaves como "Objetos" e "cObjeto" (estas não devem estar no JSON de retorno).

A parte que precisa ser adaptada é a seguinte:

18 - JSON.stringify(response.cResultado.Servicos[0].cServico[0])

Implementar endpoint para cálculo de preço de entrega com data especificada

Documentação

O endpoint deverá receber os parâmetros necessários, no formato JSON, através de um POST e devolver, no corpo da requisição, a resposta do webservice dos Correios.

Qual o script de funcionamento do endpoint?

O endpoint deverá:

  1. Receber os parâmetros
  2. Construir um objeto com base nos parâmetros passados
  3. Realizar a chama ao webservice dos Correios
  4. Devolver um JSON

Explicando melhor cada etapa

Receber os parâmetros:

Parâmetros exigidos pelo webservice dos Correios:

  • nCdEmpresa (string) - não obrigatório:
    O código administrativo da empresa junto aos Correios.

  • sDsSenha (string) - não obrigatório:
    Senha para acesso ao serviço.

  • nCdServico (string) - obrigatório :
    Representa a modalidade do frete (PAC, Sedex ou outro).

    -- 40010 = SEDEX Varejo
    -- 40045 = SEDEX a Cobrar Varejo
    -- 40215 = SEDEX 10 Varejo
    -- 40290 = SEDEX Hoje Varejo
    -- 41106 = PAC Varejo

    Ex: "40010"

  • sCepOrigem (string) - obrigatório:
    CEP de origem da encomenda. Deve ser enviado sem o hífen.

    Ex: "37410000"

  • sCepDestino (string) - obrigatório:
    CEP de destino também sem o hífen.

    Ex: "37410000"

  • nVlPeso (string) - obrigatório:
    Peso da encomenda com a embalagem. Deve ser um número inteiro no formato string.

    Ex: "1"

  • nCdFormato (number) - obrigatório:
    Formato da encomenda com embalagem

    1 = Formato caixa/pacote
    2 = Formato rolo/prisma
    3 = Envelope

    Ex: "1"

  • nVlComprimento (decimal):
    Comprimento da encomenda com embalagem em centímetros.

    Ex: "20.3"

  • nVlAltura (decimal):
    Altura da encomenda com embalagem em centímetros.

    Ex: "8.5"

  • nVlLargura (decimal):
    Largura da encomenda com embalagem em centímetros.

    Ex: "5.5"

  • nVlDiametro (decimal):
    Diâmetro da encomenda com embalagem em centímetros.

    Ex: "2.5"

  • sCdMaoPropria (string) - não obrigatório:
    Indica se a encomenda será entregue com o serviço adicional "mão própria".
    -- S = Sim
    -- N = Não (valor padrão)

    Ex: "S"

  • nVlValorDeclarado (decimal) - obrigatório:
    Indica se a encomenda será entregue com o serviço adicional valor declarado. Neste campo deve ser apresentado o valor declarado em reais.

    Ex: "150.50"

  • sCdAvisoRecebimento (string) - não obrigatório:
    Indica se a encomenda será entregue com o serviço adicional de aviso de recebimento. Caso escolhido, os Correios avisam o remetente quando o objeto é entregue.
    -- S = Sim
    -- N = Não (valor padrão)

    Ex: "S"

  • sDtCalculo (string):
    Representa a data que o webservice deve utilizar para fazer o cálculo (nos outros métodos, ele utiliza a data atual, nesse você pode especificar a data)

    Ex: "14/03/2018"

Construir um objeto com base nos parâmetros passados:

Construa um objeto passando as variáveis provenientes do corpo da requisição (as variáveis enviadas no corpo da requisição podem ser acessadas utilizando "req.body.nomeDaVariavel")

Realizar a chamada ao webservice dos Correios:

  • Qual o método?:
    O método utilizado será o POST.

  • Qual o jeito mais fácil?:
    Importe o método "makeRequest" e o utilize passando a URL a ser requisitada, o método a ser utilizado (POST) e o objeto construído na segunda etapa (o método já vai fazer o resto e retornar o JSON resultante da requisição).

const response = await makeRequest('http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoData', 'POST', obj);
PS: não se esqueça de deixar explícito que o nosso controller é uma função assíncrona.

  • Qual a URL do webservice?:
    A URL que deverá receber a requisição é a seguinte:

url: 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrecoData'

Devolver um JSON:

Basta passar o valor da variável "response", da etapa anteior, chamar o objeto "res" do Express e utilizar o método "json" passando "response".

res.json(response);

Implementar endpoint para cálculo de prazo de entrega da encomenda

Documentação

O endpoint deverá receber os parâmetros necessários, no formato JSON, através de um POST e devolver, no corpo da requisição, a resposta do webservice dos Correios.

Qual o script de funcionamento do endpoint?

O endpoint deverá:

  1. Receber os parâmetros
  2. Construir um objeto com base nos parâmetros passados
  3. Realizar a chama ao webservice dos Correios
  4. Parsear a resposta
  5. Devolver um JSON

Explicando melhor cada etapa

Receber os parâmetros:

Parâmetros exigidos pelo webservice dos Correios:

  • nCdServico: representa a modalidade do frete (PAC, Sedex ou outro).
  • sCepOrigem: representa o CEP de origem da encomenda.
  • sCepDestino: representa o CEP do destinatário.

Construir um objeto com base nos parâmetros passados:

Construa o objeto passando as variáveis provenientes do corpo da requisição (as variáveis enviadas
através do POST podem ser acessadas utilizando "req.body.nomeDaVariavel")

(A ideia é desenvolver uma função pra montar esse objeto com base nos parâmetros passados, mas
ainda não foi iniciado).

Realizar a chama ao webservice dos Correios:

  • Qual o método?:
    O método utilizado será o POST.

method: 'POST',

  • Como deverá ser o corpo da requisição?:
    Atualmente, o "form-urlencoded" está sendo utilizado para "montar" a requisição, mas ele não será
    utilizado mais. No lugar disso, você deverá utilizar a função "mountSeachParams", passando o objeto
    montado no passo anterior como argumento. A função retornará uma "querystring" que deve ser
    passada como corpo da requisição.

body: mountSeachParams(obj),

  • Qual a URL do webservice?:
    A URL que deverá receber a requisição é a seguinte:

url: 'http://ws.correios.com.br/calculador/CalcPrecoPrazo.asmx/CalcPrazo'

Parsear a resposta:

O serviço dos Correios "conversa" em XML, por isso, precisamos fazer um parse do que nos é
enviado. A função "parseResponse" é responsável por isso. Ela deverá receber um XML e devolver um
JSON.
Como nossas requisições são Promises, você pode utilizar a função no primeiro "then", passando
como argumento a resposta. Algo como:

.then(response => parseResponse(response))

Devolver um JSON:

Basta, no segundo "then" da requisição ao webservice, chamar o objeto "res" do Express e utilizar o
método "json" passando a resposta.

.then(response => res.json(response))

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.