correios_api 1.0.4 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6d97899305ead4c4911dd1fe1c201306e26d165324531a2cb847a742b641d3ce
4
- data.tar.gz: 3b9d62e983fde19b06f98de0274c1c72be0c8c18439df8f09c8212910b4abade
3
+ metadata.gz: 947751ce5932b8c69121fe2c80deb58c8e9a14afd6524f7473de681d7bf739c0
4
+ data.tar.gz: 16605f0aed58b2b021242192b2b778e56781a5d311afbec05d9db25dec24dc4e
5
5
  SHA512:
6
- metadata.gz: 850e4f35f98d188701c02e7b85dea38585207815b3a83ca15557ef1ad0997cbde4d50d32be7e64e07f36c69b379762ddbf0aa5d4b94ce5df6a4cb7f2660b3142
7
- data.tar.gz: 5605ca4f3c18d54464befc09991783002c371f6b7574da142bbc443c00f1f9b6c1286ae434a027f4782abd491744a1cc3c079562f06137a8980a0528308868fc
6
+ metadata.gz: 9172d088381928faf3d18ec644bd307b410cc7b14562a1cf6e06b6b9dc37e46e3aa9111ed648a5fcb01f834e5d83d460d5bc066174456d35e66dde83166e912f
7
+ data.tar.gz: 3b21cb005ad59a4f84207425dbd1b6a10135184be285304fa85fa4b98bcffad4d77a4da596e3eb73f6950856e6cb5bbc11430b9d88abdd9a9ae82c9baa891be5
@@ -35,38 +35,46 @@ module CorreiosApi
35
35
  "04227" => "CORREIOS MINI ENVIOS CTR AG"
36
36
  }
37
37
 
38
- attr_reader :username, :password, :post_card, :contract_number, :token, :expires_in
39
- def initialize username:, password:, post_card:, contract_number: nil, token: nil, expires_in: nil
38
+ attr_reader :username, :password, :post_card, :contract_number, :token_expires_at
39
+ def initialize username:, password:, post_card:, contract_number: nil, access_token: nil, token_expires_at: nil
40
40
  @username = username
41
41
  @password = password
42
42
  @post_card = post_card
43
43
  @contract_number = contract_number
44
- @token = token
45
- # if @token.nil? || @expires_in < Time.now
46
- # authenticate
47
- # end
44
+ @access_token = access_token
45
+ @token_expires_at = token_expires_at
48
46
  end
49
47
 
50
- def authenticate
48
+ def default_options
49
+ {
50
+ headers: {
51
+ "Content-Type" => "application/json",
52
+ "X-Idempotency-Key" => SecureRandom.uuid
53
+ },
54
+ timeout: TIMEOUT
55
+ }
56
+ end
57
+
58
+ def refresh_token
59
+ headers = {
60
+ "Authorization" => "Basic #{Base64.strict_encode64("#{@username}:#{@password}")}",
61
+ }
51
62
  body = {
52
63
  numero: @post_card
53
64
  }
54
65
  response = post(
55
66
  "/token/v1/autentica/cartaopostagem",
56
- headers: {
57
- "Authorization" => "Basic #{Base64.strict_encode64("#{@username}:#{@password}")}",
58
- "Content-Type" => "application/json"
59
- },
60
- body: JSON.dump(body),
61
- timeout: TIMEOUT
62
- ) { |response| validate_response(response, "token") }
63
- @token = response.json.dig("token")
64
- @expires_in = Time.new(response.json.dig("expiraEm"))
67
+ headers:,
68
+ body:,
69
+ skip_authentication: true
70
+ )
71
+ @access_token = response.token
72
+ @token_expires_at = response.expiraEm.to_time
65
73
  end
66
74
 
67
75
  def tracking_package tracking_code, result_type = "T"
68
76
  response = get("/srorastro/v1/objetos/#{tracking_code}?resultado=#{result_type}")
69
- Tracking.new(response.json)
77
+ Tracking.new(response)
70
78
  end
71
79
 
72
80
  def create_pre_shipping shipper_name:, shipper_tax_id:, shipper_zipcode:, shipper_street:, shipper_address_number:, shipper_district:, shipper_city:, shipper_state_code:, receiver_name:, receiver_tax_id:, receiver_zipcode:, receiver_street:, receiver_address_number:, receiver_district:, receiver_city:, receiver_state_code:, service_code:, price:, items:, weight_g:, height_cm: 15, width_cm: 15, length_cm: 15
@@ -111,13 +119,8 @@ module CorreiosApi
111
119
  # dataPrevistaPostagem: "29/09/2024"
112
120
  }
113
121
 
114
- response = post(
115
- "/prepostagem/v1/prepostagens",
116
- headers: headers,
117
- body: JSON.dump(body),
118
- timeout: TIMEOUT
119
- ) { |response| validate_response(response, "id") }
120
- PreShipping.new(response.json)
122
+ response = post("/prepostagem/v1/prepostagens", body:)
123
+ PreShipping.new(response)
121
124
  end
122
125
 
123
126
  def create_label pre_shipping
@@ -132,44 +135,36 @@ module CorreiosApi
132
135
  imprimeRemetente: "S", # S (Sim) ou N (não)
133
136
  layoutImpressao: "PADRAO" # PADRAO, LINEAR_100_150, LINEAR_100_80, LINEAR_A4, LINEAR_A
134
137
  }
135
-
136
- response = post(
137
- "/prepostagem/v1/prepostagens/rotulo/assincrono/pdf",
138
- headers: headers,
139
- body: JSON.dump(body),
140
- timeout: TIMEOUT
141
- ) { |response| validate_response(response, "idRecibo") }
138
+ response = post("/prepostagem/v1/prepostagens/rotulo/assincrono/pdf", body:)
142
139
  sleep(0.5) # Tem que esperar o PDF ficar pronto
143
- get_label(response.json.dig("idRecibo"))
140
+ get_label(response.idRecibo)
144
141
  end
145
142
 
146
143
  def get_label id
147
- response = get(
148
- "/prepostagem/v1/prepostagens/rotulo/download/assincrono/#{id}",
149
- headers: headers
150
- ) { |response| validate_response(response, "nome") }
151
- Label.new(response.json)
144
+ response = get("/prepostagem/v1/prepostagens/rotulo/download/assincrono/#{id}")
145
+ Label.new(response)
152
146
  end
153
147
 
154
148
  def create_rates zipcode_from:, zipcode_to:, weight_g: 1000, height_cm: 15, width_cm: 15, length_cm: 15
155
149
  services_with_time = delivery_time(zipcode_from, zipcode_to)
156
150
  services_with_cost = delivery_cost(zipcode_from, zipcode_to, weight_g, height_cm, width_cm, length_cm)
157
-
158
151
  rates = services_with_time.map do |service_time|
159
152
  service_cost = services_with_cost.find { |service| service["coProduto"] == service_time["coProduto"] }
153
+ next if service_cost.nil?
154
+
160
155
  Rate.new(
161
- service_name: SERVICE_NAMES[service_time["coProduto"]],
162
- service_code: service_time["coProduto"],
156
+ service_name: SERVICE_NAMES[service_time.coProduto],
157
+ service_code: service_time.coProduto,
163
158
  price: service_cost["pcFinal"],
164
159
  delivery_time_in_days: service_time["prazoEntrega"],
165
160
  max_delivery_time: service_time["dataMaxima"],
166
161
  message: service_time["msgPrazo"],
167
162
  errors: [
168
- service_cost.dig("txErro"),
169
- service_time.dig("txErro")
163
+ service_cost["txErro"],
164
+ service_time["txErro"]
170
165
  ].compact
171
166
  )
172
- end
167
+ end.compact
173
168
  ShippingQuotes.new(rates)
174
169
  end
175
170
 
@@ -180,14 +175,7 @@ module CorreiosApi
180
175
  idLote: "1",
181
176
  parametrosPrazo: SERVICES.map { |service| {coProduto: service[:code], nuRequisicao: 1, cepOrigem: zipcode_from_digits, cepDestino: zipcode_to_digits} }
182
177
  }
183
-
184
- response = post(
185
- "/prazo/v1/nacional",
186
- headers: headers,
187
- body: JSON.dump(body),
188
- timeout: TIMEOUT
189
- ) { |response| validate_response(response, "coProduto") }
190
- response.json
178
+ post("/prazo/v1/nacional", body:) { _1[0].coProduto }
191
179
  end
192
180
 
193
181
  def delivery_cost zipcode_from, zipcode_to, weight_g, height_cm, width_cm, length_cm
@@ -211,27 +199,7 @@ module CorreiosApi
211
199
  parametrosProduto: params_produto
212
200
  }
213
201
 
214
- response = post(
215
- "/preco/v1/nacional",
216
- headers: headers,
217
- body: JSON.dump(body),
218
- timeout: TIMEOUT
219
- ) { |response| validate_response(response, "coProduto") }
220
- response.json
221
- end
222
-
223
- private
224
-
225
- def headers
226
- {
227
- "Authorization" => "Bearer #{@token}",
228
- "Content-Type" => "application/json"
229
- }
230
- end
231
-
232
- def validate_response(response, required_response_key)
233
- puts response.json unless response.success?
234
- ![500, 429].include?(response.code) || response.json.dig(*required_response_key)
202
+ post("/preco/v1/nacional", body:) { _1[0].coProduto }
235
203
  end
236
204
  end
237
205
  end
@@ -2,8 +2,8 @@ class Label
2
2
  attr_reader :response, :name, :data
3
3
  def initialize response
4
4
  @response = response
5
- @name = response.dig("nome")
6
- @data = response.dig("dados")
5
+ @name = response.nome
6
+ @data = response.dados
7
7
  end
8
8
 
9
9
  def download_file
@@ -3,18 +3,18 @@ module CorreiosApi
3
3
  attr_reader :response, :external_id, :tracking_code, :service_code, :payment_method_id, :price, :items, :post_prevision, :posting_deadline, :status, :status_detail, :label_type, :package_type
4
4
  def initialize response
5
5
  @response = response
6
- @external_id = response.dig("id")
7
- @tracking_code = response.dig("codigoObjeto")
8
- @service_code = response.dig("codigoServico")
9
- @payment_method_id = response.dig("modalidadePagamento")
10
- @price = response.dig("precoPrePostagem")
11
- @items = response.dig("itensDeclaracaoConteudo")
12
- @post_prevision = response.dig("dataPrevistaPostagem")
13
- @posting_deadline = response.dig("prazoPostagem")
14
- @status = response.dig("statusAtual")
15
- @status_detail = response.dig("descStatusAtual")
16
- @label_type = response.dig("tipoRotulo")
17
- @package_type = response.dig("tipoObjeto")
6
+ @external_id = response.id
7
+ @tracking_code = response.codigoObjeto
8
+ @service_code = response.codigoServico
9
+ @payment_method_id = response.modalidadePagamento
10
+ @price = response.precoPrePostagem
11
+ @items = response.itensDeclaracaoConteudo
12
+ @post_prevision = response.dataPrevistaPostagem
13
+ @posting_deadline = response.prazoPostagem
14
+ @status = response.statusAtual
15
+ @status_detail = response.descStatusAtual
16
+ @label_type = response.tipoRotulo
17
+ @package_type = response.tipoObjeto
18
18
  end
19
19
  end
20
20
  end
@@ -2,18 +2,18 @@ module CorreiosApi
2
2
  class Tracking
3
3
  attr_reader :response, :tracking_code, :sigla, :descricao, :categoria, :data_prevista, :weight_g, :height_cm, :width_cm, :length_cm, :formato, :modalidade, :eventos
4
4
  def initialize response
5
- @tracking_code = response.dig("objetos", 0, "codObjeto")
6
- @sigla = response.dig("objetos", 0, "tipoPostal", "sigla")
7
- @descricao = response.dig("objetos", 0, "tipoPostal", "descricao")
8
- @categoria = response.dig("objetos", 0, "tipoPostal", "categoria")
9
- @data_prevista = response.dig("objetos", 0, "dtPrevista")
10
- @weight_g = response.dig("objetos", 0, "peso") * 1000
11
- @height_cm = response.dig("objetos", 0, "altura")
12
- @width_cm = response.dig("objetos", 0, "largura")
13
- @length_cm = response.dig("objetos", 0, "comprimento")
14
- @formato = response.dig("objetos", 0, "formato")
15
- @modalidade = response.dig("objetos", 0, "modalidade")
16
- @eventos = response.dig("objetos", 0, "eventos")
5
+ @tracking_code = response.objetos[0].codObjeto
6
+ @sigla = response.objetos[0].tipoPostal.sigla
7
+ @descricao = response.objetos[0].tipoPostal.descricao
8
+ @categoria = response.objetos[0].tipoPostal.categoria
9
+ @data_prevista = response.objetos[0].dtPrevista
10
+ @weight_g = response.objetos[0].peso * 1000
11
+ @height_cm = response.objetos[0].altura
12
+ @width_cm = response.objetos[0].largura
13
+ @length_cm = response.objetos[0].comprimento
14
+ @formato = response.objetos[0].formato
15
+ @modalidade = response.objetos[0].modalidade
16
+ @eventos = response.objetos[0].eventos
17
17
  end
18
18
  end
19
19
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module CorreiosApi
4
- VERSION = "1.0.4"
4
+ VERSION = "2.0.0"
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: correios_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todas Essas Coisas
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-05-21 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: codigo_postal
@@ -94,7 +94,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
94
94
  - !ruby/object:Gem::Version
95
95
  version: '0'
96
96
  requirements: []
97
- rubygems_version: 3.6.2
97
+ rubygems_version: 3.6.9
98
98
  specification_version: 4
99
99
  summary: ''
100
100
  test_files: []