Skip to content

Commit

Permalink
Correios SroRastro
Browse files Browse the repository at this point in the history
  • Loading branch information
HerbertNatal committed Jul 23, 2024
1 parent f65dd00 commit ec39c0c
Show file tree
Hide file tree
Showing 5 changed files with 234 additions and 5 deletions.
6 changes: 4 additions & 2 deletions methods.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ func (c *Client) execute(method string, path string, params interface{}, headers
// mount endpoint
var endpoint = c.GetEndpoint() + path

spew.Dump(endpoint)
fmt.Println(endpoint)

// check for params
if params != nil {
Expand Down Expand Up @@ -109,6 +109,8 @@ func (c *Client) execute(method string, path string, params interface{}, headers
}
}

fmt.Println(endpoint + "?" + request.URL.RawQuery)

response, err := http.DefaultClient.Do(request)
if err != nil {
return err
Expand All @@ -122,7 +124,7 @@ func (c *Client) execute(method string, path string, params interface{}, headers
return err
}

spew.Dump(string(data))
fmt.Println(string(data))

// init error message
erm := &ErrorMessage{}
Expand Down
197 changes: 197 additions & 0 deletions sro_rastro.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
package ebct

import (
"errors"
"time"
)

const sroRastro = "srorastro/" + Version + "objetos"

type TimeStrRastro struct {
time.Time
}

// UnmarshalJSON decodifica o JSON para o tipo TimeStr
func (t *TimeStrRastro) UnmarshalJSON(data []byte) error {
str := string(data)
if str == "null" || str == "" {
*t = TimeStrRastro{time.Time{}}
return nil
}
parsedTime, err := time.Parse(`"2006-01-02T15:04:05"`, str)
if err != nil {
return err
}
*t = TimeStrRastro{parsedTime}
return nil
}

// MarshalJSON codifica o tipo TimeStr para JSON
func (t TimeStrRastro) MarshalJSON() ([]byte, error) {
if t.Time.IsZero() {
return []byte("null"), nil
}
return []byte(`"` + t.Format("2006-01-02T15:04:05") + `"`), nil
}

type RastroRequest struct {
CodigosObjetos []string `json:"codigosObjetos,omitempty"`
Resultado *string `json:"resultado,omitempty"`
}

type SroRastro struct {
Versao string `json:"versao,omitempty"`
Quantidade int `json:"quantidade,omitempty"`
Objetos []Objeto `json:"objetos,omitempty"`
TipoResultado string `json:"tipoResultado,omitempty"`
}

type Objeto struct {
CodObjeto string `json:"codObjeto,omitempty"`
TipoPostal TipoPostal `json:"tipoPostal,omitempty"`
Mensagem string `json:"mensagem,omitempty"`
DtPrevista TimeStrRastro `json:"dtPrevista,omitempty"`
MultiVolume string `json:"multiVolume,omitempty"`
Afterschedule string `json:"afterschedule,omitempty"`
Volume int `json:"volume,omitempty"`
ValorRecebido string `json:"valorRecebido,omitempty"`
EntregaProgramada TimeStrRastro `json:"entregaProgramada,omitempty"`
PrazoTratamento int `json:"prazoTratamento,omitempty"`
Contrato string `json:"contrato,omitempty"`
CodAdm string `json:"codAdm,omitempty"`
CartaoPostagem string `json:"cartaoPostagem,omitempty"`
CNPJ string `json:"CNPJ,omitempty"`
Largura float64 `json:"largura,omitempty"`
Comprimento float64 `json:"comprimento,omitempty"`
Altura float64 `json:"altura,omitempty"`
Diametro float64 `json:"diametro,omitempty"`
Peso float64 `json:"peso,omitempty"`
Formato string `json:"formato,omitempty"`
CelRemetSMS string `json:"celRemetSMS,omitempty"`
CelDestSMS string `json:"celDestSMS,omitempty"`
ValorDeclarado interface{} `json:"valorDeclarado,omitempty"`
Eventos []Evento `json:"eventos,omitempty"`
Servico Servico `json:"servico,omitempty"`
}

type TipoPostal struct {
Sigla string `json:"sigla,omitempty"`
Nome string `json:"nome,omitempty"`
Categoria string `json:"categoria,omitempty"`
Familia string `json:"familia,omitempty"`
}

type Evento struct {
Codigo string `json:"codigo,omitempty"`
Tipo string `json:"tipo,omitempty"`
DtHrCriado TimeStrRastro `json:"dtHrCriado,omitempty"`
Descricao string `json:"descricao,omitempty"`
Estacao string `json:"estacao,omitempty"`
Usuario string `json:"usuario,omitempty"`
Carteiro string `json:"carteiro,omitempty"`
Entregador string `json:"entregador,omitempty"`
Latitude string `json:"latitude,omitempty"`
Longitude string `json:"longitude,omitempty"`
Detalhe string `json:"detalhe,omitempty"`
DescCodigo string `json:"descCodigo,omitempty"`
DtHrGravado TimeStrRastro `json:"dtHrGravado,omitempty"`
Recebedor Recebedor `json:"recebedor,omitempty"`
Unidade Unidade `json:"unidade,omitempty"`
EntregadorExterno EntregadorExterno `json:"entregadorExterno,omitempty"`
Contrato string `json:"contrato,omitempty"`
CodAdm string `json:"codAdm,omitempty"`
CartaoPostagem string `json:"cartaoPostagem,omitempty"`
CNPJ string `json:"CNPJ,omitempty"`
Remetente Remetente `json:"remetente,omitempty"`
Destinatario Destinatario `json:"destinatario,omitempty"`
DtLimiteRetirada TimeStrRastro `json:"dtLimiteRetirada,omitempty"`
Comentario string `json:"comentario,omitempty"`
CodLista string `json:"codLista,omitempty"`
UnidadeDestino Unidade `json:"unidadeDestino,omitempty"`
}

type Recebedor struct {
Nome string `json:"nome,omitempty"`
Documento string `json:"documento,omitempty"`
Celular string `json:"celular,omitempty"`
Email string `json:"email,omitempty"`
Comentario string `json:"comentario,omitempty"`
}

type Unidade struct {
Nome string `json:"nome,omitempty"`
CodSro string `json:"codSro,omitempty"`
CodMcu string `json:"codMcu,omitempty"`
Tipo string `json:"tipo,omitempty"`
Endereco Endereco `json:"endereco,omitempty"`
Codse string `json:"codse,omitempty"`
Se string `json:"se,omitempty"`
}

type Endereco struct {
Cep string `json:"cep,omitempty"`
Logradouro string `json:"logradouro,omitempty"`
Complemento string `json:"complemento,omitempty"`
Numero string `json:"numero,omitempty"`
Bairro string `json:"bairro,omitempty"`
Cidade string `json:"cidade,omitempty"`
Uf string `json:"uf,omitempty"`
Pais string `json:"pais,omitempty"`
Telefone string `json:"telefone,omitempty"`
}

type EntregadorExterno struct {
Documento string `json:"documento,omitempty"`
Nome string `json:"nome,omitempty"`
}

type Remetente struct {
Nome string `json:"nome,omitempty"`
Documento string `json:"documento,omitempty"`
Endereco Endereco `json:"endereco,omitempty"`
Telefones []Telefone `json:"telefones,omitempty"`
}

type Destinatario struct {
Nome string `json:"nome,omitempty"`
Documento string `json:"documento,omitempty"`
Email string `json:"email,omitempty"`
Telefones []Telefone `json:"telefones,omitempty"`
Endereco Endereco `json:"endereco,omitempty"`
}

type Telefone struct {
Tipo string `json:"tipo,omitempty"`
Ddd string `json:"ddd,omitempty"`
Numero string `json:"numero,omitempty"`
}

type Servico struct {
Codigo string `json:"codigo,omitempty"`
Ar string `json:"ar,omitempty"`
TipoAr string `json:"tipoAr,omitempty"`
Mp string `json:"mp,omitempty"`
Vd string `json:"vd,omitempty"`
EVizinho string `json:"eVizinho,omitempty"`
FotoFachada string `json:"fotoFachada,omitempty"`
EControlada string `json:"eControlada,omitempty"`
EInterativa string `json:"eInterativa,omitempty"`
ELocker string `json:"eLocker,omitempty"`
}

func (c *Client) GetSroRastroObjetos(codObjeto []string) (SroRastro, error) {

sendRequest := &RastroRequest{}
var err error

rastRemess := SroRastro{}
if len(codObjeto) == 0 {
err = errors.New("the codObjeto must be a valid")
return rastRemess, err
}
sendRequest.CodigosObjetos = codObjeto
sendRequest.Resultado = StringPtr("T")

err = c.Get(sroRastro, sendRequest, nil, &rastRemess)
return rastRemess, err
}
15 changes: 15 additions & 0 deletions sro_rastro_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package ebct

import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)

func TestGetSroRastroObjeto(t *testing.T) {

sendObjects := []string{"QC963533014BR", "OV852367667BR", "SY530313828BR"}
requestReturn, err := client.GetSroRastroObjetos(sendObjects)
fmt.Println(Serialize(requestReturn))
assert.NoError(t, err)
}
7 changes: 4 additions & 3 deletions token_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,16 @@ var client *Client
func init() {

client = NewClient(
"eyJhbGciOiJSUzUxMiJ9.eyJhbWJpZW50ZSI6IkhPTU9MT0dBQ0FPIiwiaWQiOiIwNTMxNzcwODAwMDE5NCIsInBmbCI6IlBKIiwiY25waiI6IjA1MzE3NzA4MDAwMTk0IiwiYXBpIjpbNTYzXSwiaXAiOiIxNzkuMTAxLjIxMy4xODcsIDE5Mi4xNjguMS44IiwiaWF0IjoxNzE3NDIyMDAzLCJpc3MiOiJ0b2tlbi1zZXJ2aWNlIiwiZXhwIjoxNzE3NTA4NDAzLCJqdGkiOiJmZDc3YTQ4MC0zYzk2LTQ4NmUtOWJhYi00NTUzYmI3Y2QyMWQifQ.O3wU-E2LI5pfnKirU9SiLrVEu1fudcDVlrGpTrcyujO_vDFm6mEkXivfCdLOJ3ZK4_U607J6XfxdW1lmf5f2DMwD8g0GA9HDQzJF81cDmn6PZtnKw4dqYWwXQ8OihQf-B1xMROJCSZ3fjUiNuRLjW9GCN_gQnVYi-A7AVOgWIo_Jj7aCazpRhN8tmUCleiuMq_1DWjHvZ46UuEyb6HbzSMgRbBNB9CeZxCAn7e0Nn_mh361KnigoldfZBm-dSsQ03gDHvPV-HBqou7BuoAndNDnqtJ0MxeGtvHdul5TOejAVwOS2frAb2aO-5hQyFOtl83ocKlteBtzB4pYJc64pdQ",
true,
"eyJhbGciOiJSUzUxMiJ9.eyJhbWJpZW50ZSI6IlBST0RVQ0FPIiwiaWQiOiJwaG9lbmV4Y2FyZ28iLCJwZmwiOiJQSiIsImNucGoiOiIxMDI1NzYwMjAwMDE4MiIsImFwaSI6WzU2M10sImNhcnRhby1wb3N0YWdlbSI6eyJudW1lcm8iOiIwMDY5Mjk1ODE2IiwiY29udHJhdG8iOiI5OTEyMzUyMTY3IiwiZHIiOjcyLCJhcGkiOlsyNywzNCwzNSwzNiwzNyw0MSw3Niw3OCw4MCw4Myw4Nyw1NjYsNTg3XX0sImlwIjoiMTc5LjEwMS4yMTYuMjE0LCAxOTIuMTY4LjEuMTMyIiwiaWF0IjoxNzIxNzQ2MDM0LCJpc3MiOiJ0b2tlbi1zZXJ2aWNlIiwiZXhwIjoxNzIxODMyNDM0LCJqdGkiOiJjYWQyMTk2OC03MGRmLTRkYjUtOGFhNS0wNWJjMTk1NDFmNGMifQ.yeISSHn_uZsn4lSkFuPjiFuPhFyF_WSpzObGfngR2TEAcyTq99mS-sYgfdyxNV8YPf5hL6Y-FbS0SIeBY7UllntdEGFofyLW7lmGKQIuVybqfjeocGbKL15Cw-c3kbMY8trU5JQcUge_bSVsrjsZzMOBRCmUEPfRD0zxYyJEHKDxHmdyUfEE29_WF3tJ0BbcTx68Dzt7qH2XgMKfmY7VBK-PybS0I7DC1ZlC3DiPFc1-deLmgCNKeCj094jdlesRJu6hLOCw80QegrlVhkNGQDERO0okVPYenoO-FoOssZ7I5rSmxtz4WFJmn-Twz4QR5kcB0RwxpuCk8kYLdh9RXA",
false,
)
}

func TestLogin(t *testing.T) {
var err error

client, err = NewClientToken("05317708000194", "0ywD1PYCdkzojfPUGAfifFyTIHFOhTZUoGZgOVpP", "9912435103", "AUTH", true)
//client, err = NewClientToken("05317708000194", "0ywD1PYCdkzojfPUGAfifFyTIHFOhTZUoGZgOVpP", "9912435103", "AUTH", true)
client, err = NewClientToken("phoenexcargo", "pCXd7tgr7dGRXkWnlZ2FGsxGMMQ2QjeSmwmSvQ2p", "0069295816", "CARTAOPOSTAGEM", false)

spew.Dump(client)
assert.NoError(t, err)
Expand Down
14 changes: 14 additions & 0 deletions util.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ebct

import (
"encoding/json"
"fmt"
"github.com/google/uuid"
"time"
)
Expand Down Expand Up @@ -87,3 +89,15 @@ func IsUUID(value string) bool {
func TimePtr(value time.Time) *time.Time {
return &value
}

func Serialize(obj interface{}) string {

// Convert back to a pretty JSON string
prettyJSON, err := json.MarshalIndent(obj, "", " ")
if err != nil {
fmt.Println("Error:", err)
return ""
}

return string(prettyJSON)
}

0 comments on commit ec39c0c

Please sign in to comment.