correios_gem 1.4.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 +7 -0
- data/lib/SRO/client.rb +25 -0
- data/lib/SRO/helper.rb +118 -0
- data/lib/SRO/requests/track_shippings.rb +142 -0
- data/lib/SRO/requests/track_shippings_list.rb +144 -0
- data/lib/correios_exception.rb +11 -0
- data/lib/correios_gem.rb +186 -0
- data/lib/credentials.rb +27 -0
- data/lib/pricefier/client.rb +20 -0
- data/lib/pricefier/helper.rb +72 -0
- data/lib/pricefier/requests/calculate_deadline.rb +100 -0
- data/lib/pricefier/requests/calculate_deadline_with_date.rb +102 -0
- data/lib/pricefier/requests/calculate_deadline_with_restrictions.rb +102 -0
- data/lib/pricefier/requests/calculate_price.rb +123 -0
- data/lib/pricefier/requests/calculate_price_deadline.rb +138 -0
- data/lib/pricefier/requests/calculate_price_deadline_with_date.rb +142 -0
- data/lib/pricefier/requests/calculate_price_deadline_with_restrictions.rb +142 -0
- data/lib/pricefier/requests/calculate_price_fac.rb +106 -0
- data/lib/pricefier/requests/calculate_price_with_date.rb +125 -0
- data/lib/pricefier/requests/list_services.rb +87 -0
- data/lib/pricefier/requests/list_services_star.rb +87 -0
- data/lib/reverse_logistics/client.rb +34 -0
- data/lib/reverse_logistics/helper.rb +95 -0
- data/lib/reverse_logistics/requests/calculate_ticket_number_check_digit.rb +66 -0
- data/lib/reverse_logistics/requests/cancel_shipping.rb +70 -0
- data/lib/reverse_logistics/requests/create_shippings.rb +166 -0
- data/lib/reverse_logistics/requests/create_shippings_with_collection.rb +152 -0
- data/lib/reverse_logistics/requests/request_ticket_numbers.rb +90 -0
- data/lib/reverse_logistics/requests/track_shipping.rb +121 -0
- data/lib/reverse_logistics/requests/track_shippings_by_date.rb +133 -0
- data/lib/sigep/client.rb +29 -0
- data/lib/sigep/helper.rb +234 -0
- data/lib/sigep/requests/calculate_label_number_check_digit.rb +72 -0
- data/lib/sigep/requests/cancel_shipping.rb +72 -0
- data/lib/sigep/requests/check_card_status.rb +69 -0
- data/lib/sigep/requests/check_service_availability.rb +91 -0
- data/lib/sigep/requests/create_shippings.rb +70 -0
- data/lib/sigep/requests/request_label_numbers.rb +76 -0
- data/lib/sigep/requests/request_shippings_xml.rb +208 -0
- data/lib/sigep/requests/search_available_additional_services.rb +62 -0
- data/lib/sigep/requests/search_customer.rb +129 -0
- data/lib/sigep/requests/search_zip_code.rb +63 -0
- data/lib/sigep/requests/track_shippings.rb +145 -0
- metadata +145 -0
data/lib/sigep/client.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'savon'
|
2
|
+
|
3
|
+
module Correios
|
4
|
+
module Sigep
|
5
|
+
class Client
|
6
|
+
def client
|
7
|
+
Savon.client(
|
8
|
+
wsdl: wsdl,
|
9
|
+
ssl_verify_mode: :none
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def wsdl
|
16
|
+
if test_env?
|
17
|
+
'https://apphom.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl'
|
18
|
+
else
|
19
|
+
'https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl'
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_env?
|
24
|
+
(defined?(Rails) && ENV['RAILS_ENV'].in?(%w[test development]) ||
|
25
|
+
ENV['GEM_ENV'].in?(%w[test development]))
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/sigep/helper.rb
ADDED
@@ -0,0 +1,234 @@
|
|
1
|
+
require 'date'
|
2
|
+
|
3
|
+
module Correios
|
4
|
+
module Sigep
|
5
|
+
class Helper
|
6
|
+
def namespaces
|
7
|
+
{
|
8
|
+
'xmlns:soap' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
9
|
+
'xmlns:ns1' => 'http://cliente.bean.master.sigep.bsb.correios.com.br/'
|
10
|
+
}
|
11
|
+
end
|
12
|
+
|
13
|
+
def shippings_xml(data)
|
14
|
+
credentials = Correios.credentials
|
15
|
+
sender = data[:sender]
|
16
|
+
sender_address = sender[:address]
|
17
|
+
shippings = data[:shippings]
|
18
|
+
|
19
|
+
Nokogiri::XML::Builder.new(encoding: 'ISO-8859-1') do |xml|
|
20
|
+
xml.correioslog do
|
21
|
+
xml.tipo_arquivo 'Postagem'
|
22
|
+
xml.versao_arquivo '2.3'
|
23
|
+
xml.plp do
|
24
|
+
xml.id_plp
|
25
|
+
xml.valor_global
|
26
|
+
xml.mcu_unidade_postagem
|
27
|
+
xml.nome_unidade_postagem
|
28
|
+
xml.cartao_postagem credentials.card
|
29
|
+
end
|
30
|
+
xml.remetente do
|
31
|
+
xml.numero_contrato credentials.contract
|
32
|
+
xml.numero_diretoria sender[:board_id]
|
33
|
+
xml.codigo_administrativo credentials.administrative_code
|
34
|
+
xml.nome_remetente sender[:name]
|
35
|
+
xml.logradouro_remetente sender_address[:street]
|
36
|
+
xml.numero_remetente sender_address[:number]
|
37
|
+
xml.complemento_remetente sender_address[:additional]
|
38
|
+
xml.bairro_remetente sender_address[:neighborhood]
|
39
|
+
xml.cep_remetente sender_address[:zip_code]
|
40
|
+
xml.cidade_remetente sender_address[:city]
|
41
|
+
xml.uf_remetente sender_address[:state]
|
42
|
+
xml.telefone_remetente sender[:phone]
|
43
|
+
xml.fax_remetente sender[:fax]
|
44
|
+
xml.email_remetente sender[:email]
|
45
|
+
end
|
46
|
+
xml.forma_pagamento payment_method(data[:payment_method])
|
47
|
+
shippings.each do |shipping|
|
48
|
+
receiver = shipping[:receiver]
|
49
|
+
receiver_address = receiver[:address]
|
50
|
+
object = shipping[:object]
|
51
|
+
invoice = shipping[:invoice] || {}
|
52
|
+
additional_services = shipping[:additional_services] || []
|
53
|
+
notes = shipping[:notes] || []
|
54
|
+
|
55
|
+
xml.objeto_postal do
|
56
|
+
xml.numero_etiqueta shipping[:label_number]
|
57
|
+
xml.codigo_objeto_cliente shipping[:code]
|
58
|
+
xml.codigo_servico_postagem shipping[:service_code]
|
59
|
+
xml.cubagem 0
|
60
|
+
xml.peso object[:weight]
|
61
|
+
xml.rt1 notes[0]
|
62
|
+
xml.rt2 notes[1]
|
63
|
+
xml.destinatario do
|
64
|
+
xml.nome_destinatario receiver[:name]
|
65
|
+
xml.telefone_destinatario receiver[:phone]
|
66
|
+
xml.celular_destinatario receiver[:cellphone]
|
67
|
+
xml.email_destinatario receiver[:email]
|
68
|
+
xml.logradouro_destinatario receiver_address[:street]
|
69
|
+
xml.complemento_destinatario receiver_address[:additional]
|
70
|
+
xml.numero_end_destinatario receiver_address[:number]
|
71
|
+
end
|
72
|
+
xml.nacional do
|
73
|
+
xml.bairro_destinatario receiver_address[:neighborhood]
|
74
|
+
xml.cidade_destinatario receiver_address[:city]
|
75
|
+
xml.uf_destinatario receiver_address[:state]
|
76
|
+
xml.cep_destinatario receiver_address[:zip_code]
|
77
|
+
xml.codigo_usuario_postal
|
78
|
+
xml.centro_custo_cliente shipping[:cost_center]
|
79
|
+
xml.numero_nota_fiscal invoice[:number]
|
80
|
+
xml.serie_nota_fiscal invoice[:serie]
|
81
|
+
xml.valor_nota_fiscal invoice[:value]
|
82
|
+
xml.natureza_nota_fiscal invoice[:kind]
|
83
|
+
xml.descricao_objeto shipping[:description]
|
84
|
+
xml.valor_a_cobrar shipping[:additional_value]
|
85
|
+
end
|
86
|
+
xml.servico_adicional do
|
87
|
+
additional_services.each do |additional_service|
|
88
|
+
xml.codigo_servico_adicional additional_service
|
89
|
+
end
|
90
|
+
xml.valor_declarado shipping[:declared_value]
|
91
|
+
end
|
92
|
+
xml.dimensao_objeto do
|
93
|
+
xml.tipo_objeto object_type(object[:type])
|
94
|
+
xml.dimensao_altura object[:height] || 0
|
95
|
+
xml.dimensao_largura object[:width] || 0
|
96
|
+
xml.dimensao_comprimento object[:length] || 0
|
97
|
+
xml.dimensao_diametro object[:diameter] || 0
|
98
|
+
end
|
99
|
+
xml.data_postagem_sara
|
100
|
+
xml.status_processamento 0
|
101
|
+
xml.numero_comprovante_postagem
|
102
|
+
xml.valor_cobrado
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end.to_xml.encode(Encoding::UTF_8)
|
107
|
+
end
|
108
|
+
|
109
|
+
def label_without_digit_checker(label_number)
|
110
|
+
label_number.slice!(10)
|
111
|
+
label_number
|
112
|
+
end
|
113
|
+
|
114
|
+
def convert_string_to_bool(string)
|
115
|
+
string.strip == 'S'
|
116
|
+
end
|
117
|
+
|
118
|
+
def convert_string_to_date(date, time)
|
119
|
+
DateTime.strptime("#{date} #{time}", '%d/%m/%Y %H:%M')
|
120
|
+
end
|
121
|
+
|
122
|
+
def convert_string_to_decimal(string)
|
123
|
+
return nil if string.nil?
|
124
|
+
|
125
|
+
string.tr(',', '.').to_f
|
126
|
+
end
|
127
|
+
|
128
|
+
def tracking_event_status(event)
|
129
|
+
type = event['tipo']
|
130
|
+
status = event['status'].to_i
|
131
|
+
|
132
|
+
case type
|
133
|
+
when 'BDE', 'BDI', 'BDR'
|
134
|
+
case status
|
135
|
+
when 0, 1
|
136
|
+
return :delivered
|
137
|
+
when 2
|
138
|
+
return :not_delivered
|
139
|
+
when 4, 5, 6, 8, 10, 21, 22, 26, 33, 36, 40, 42, 48, 49, 56
|
140
|
+
return :returning
|
141
|
+
when 7, 19, 25, 32, 38, 41, 45, 46, 47, 53, 57, 66, 69
|
142
|
+
return :in_transit
|
143
|
+
when 9, 50, 51, 52
|
144
|
+
return :stolen_lost
|
145
|
+
when 3, 12, 24
|
146
|
+
return :awaiting_pick_up
|
147
|
+
when 20, 34, 35
|
148
|
+
return :not_delivered
|
149
|
+
when 23
|
150
|
+
return :returned
|
151
|
+
when 28, 37
|
152
|
+
return :damaged
|
153
|
+
when 43
|
154
|
+
return :arrested
|
155
|
+
when 54, 55, 58, 59
|
156
|
+
return :taxing
|
157
|
+
end
|
158
|
+
when 'BLQ', 'PMT', 'CD', 'CMT', 'TRI', 'CUN', 'RO', 'DO', 'EST', 'PAR'
|
159
|
+
case status
|
160
|
+
when 0, 1, 2, 3, 4, 5, 6, 9, 15, 16, 17, 18
|
161
|
+
return :in_transit
|
162
|
+
end
|
163
|
+
when 'FC'
|
164
|
+
case status
|
165
|
+
when 1
|
166
|
+
return :returning
|
167
|
+
when 2, 3, 5, 7
|
168
|
+
return :in_transit
|
169
|
+
when 4
|
170
|
+
return :not_delivered
|
171
|
+
end
|
172
|
+
when 'IDC'
|
173
|
+
case status
|
174
|
+
when 1, 2, 3, 4, 5, 6, 7
|
175
|
+
return :stolen_lost
|
176
|
+
end
|
177
|
+
when 'LDI'
|
178
|
+
case status
|
179
|
+
when 0, 1, 2, 3, 14
|
180
|
+
return :awaiting_pick_up
|
181
|
+
end
|
182
|
+
when 'OEC', 'LDE'
|
183
|
+
case status
|
184
|
+
when 0, 1, 9
|
185
|
+
return :delivering
|
186
|
+
end
|
187
|
+
when 'PO', 'CO'
|
188
|
+
case status
|
189
|
+
when 0, 1, 9
|
190
|
+
return :posted
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
private
|
196
|
+
|
197
|
+
def convert_decimal_to_string(decimal)
|
198
|
+
return nil if decimal.nil?
|
199
|
+
|
200
|
+
decimal.to_s.tr('.', ',')
|
201
|
+
end
|
202
|
+
|
203
|
+
def object_type(type)
|
204
|
+
case type
|
205
|
+
when :letter_envelope
|
206
|
+
'001'
|
207
|
+
when :box
|
208
|
+
'002'
|
209
|
+
when :prism
|
210
|
+
'002'
|
211
|
+
when :cylinder
|
212
|
+
'003'
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
def payment_method(method)
|
217
|
+
case method
|
218
|
+
when :postal_vouncher
|
219
|
+
1
|
220
|
+
when :postal_refound
|
221
|
+
2
|
222
|
+
when :exchange_contract
|
223
|
+
3
|
224
|
+
when :credit_card
|
225
|
+
4
|
226
|
+
when :other
|
227
|
+
5
|
228
|
+
when :to_bill
|
229
|
+
nil
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require_relative '../client'
|
5
|
+
require_relative '../helper'
|
6
|
+
require_relative '../../correios_exception.rb'
|
7
|
+
|
8
|
+
module Correios
|
9
|
+
module Sigep
|
10
|
+
class CalculateLabelNumberCheckDigit < CorreiosException
|
11
|
+
HELPER = Helper.new
|
12
|
+
CLIENT = Client.new
|
13
|
+
|
14
|
+
def initialize(data = {})
|
15
|
+
@credentials = Correios.credentials
|
16
|
+
|
17
|
+
@show_request = data[:show_request]
|
18
|
+
@label_numbers = data[:label_numbers]
|
19
|
+
super()
|
20
|
+
end
|
21
|
+
|
22
|
+
def request
|
23
|
+
puts xml if @show_request == true
|
24
|
+
begin
|
25
|
+
format_response(CLIENT.client.call(:gera_digito_verificador_etiquetas,
|
26
|
+
soap_action: '',
|
27
|
+
xml: xml).to_hash)
|
28
|
+
rescue Savon::SOAPFault => error
|
29
|
+
generate_exception(error)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def xml
|
36
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
37
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
38
|
+
xml['soap'].Body do
|
39
|
+
xml['ns1'].geraDigitoVerificadorEtiquetas do
|
40
|
+
parent_namespace = xml.parent.namespace
|
41
|
+
xml.parent.namespace = nil
|
42
|
+
|
43
|
+
@label_numbers.each do |label_number|
|
44
|
+
xml.etiquetas label_number
|
45
|
+
end
|
46
|
+
xml.usuario @credentials.sigep_user
|
47
|
+
xml.senha @credentials.sigep_password
|
48
|
+
|
49
|
+
xml.parent.namespace = parent_namespace
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end.doc.root.to_xml
|
54
|
+
end
|
55
|
+
|
56
|
+
def format_response(response)
|
57
|
+
response = response[:gera_digito_verificador_etiquetas_response][:return]
|
58
|
+
response = [response] if response.is_a?(Hash)
|
59
|
+
|
60
|
+
{ digit_checkers: format_digit_checkers(response) }
|
61
|
+
end
|
62
|
+
|
63
|
+
def format_digit_checkers(digit_checkers)
|
64
|
+
formatted_digit_checkers = []
|
65
|
+
digit_checkers.each do |digit_check|
|
66
|
+
formatted_digit_checkers << digit_check.to_i
|
67
|
+
end
|
68
|
+
formatted_digit_checkers
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,72 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require_relative '../client'
|
5
|
+
require_relative '../helper'
|
6
|
+
require_relative '../../correios_exception.rb'
|
7
|
+
|
8
|
+
module Correios
|
9
|
+
module Sigep
|
10
|
+
class CancelShipping < CorreiosException
|
11
|
+
HELPER = Helper.new
|
12
|
+
CLIENT = Client.new
|
13
|
+
|
14
|
+
def initialize(data = {})
|
15
|
+
@credentials = Correios.credentials
|
16
|
+
|
17
|
+
@show_request = data[:show_request]
|
18
|
+
@label_number = data[:label_number]
|
19
|
+
@request_id = data[:request_id]
|
20
|
+
super()
|
21
|
+
end
|
22
|
+
|
23
|
+
def request
|
24
|
+
puts xml if @show_request == true
|
25
|
+
begin
|
26
|
+
format_response(CLIENT.client.call(:bloquear_objeto,
|
27
|
+
soap_action: '',
|
28
|
+
xml: xml).to_hash)
|
29
|
+
rescue Savon::SOAPFault => error
|
30
|
+
generate_exception(error)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def xml
|
37
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
38
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
39
|
+
xml['soap'].Body do
|
40
|
+
xml['ns1'].bloquearObjeto do
|
41
|
+
parent_namespace = xml.parent.namespace
|
42
|
+
xml.parent.namespace = nil
|
43
|
+
|
44
|
+
xml.numeroEtiqueta @label_number
|
45
|
+
xml.idPlp @request_id
|
46
|
+
xml.tipoBloqueio 'FRAUDE_BLOQUEIO'
|
47
|
+
xml.acao 'DEVOLVIDO_AO_REMETENTE'
|
48
|
+
xml.usuario @credentials.sigep_user
|
49
|
+
xml.senha @credentials.sigep_password
|
50
|
+
|
51
|
+
xml.parent.namespace = parent_namespace
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end.doc.root.to_xml
|
56
|
+
end
|
57
|
+
|
58
|
+
def format_response(response)
|
59
|
+
response = response[:bloquear_objeto_response][:return]
|
60
|
+
|
61
|
+
{ status: convert_status_to_symbol(response) }
|
62
|
+
end
|
63
|
+
|
64
|
+
def convert_status_to_symbol(status)
|
65
|
+
case status
|
66
|
+
when 'Registro gravado'
|
67
|
+
:ok
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
require 'savon'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
require_relative '../client'
|
5
|
+
require_relative '../helper'
|
6
|
+
require_relative '../../correios_exception.rb'
|
7
|
+
|
8
|
+
module Correios
|
9
|
+
module Sigep
|
10
|
+
class CheckCardStatus < CorreiosException
|
11
|
+
HELPER = Helper.new
|
12
|
+
CLIENT = Client.new
|
13
|
+
|
14
|
+
def initialize(data = {})
|
15
|
+
@credentials = Correios.credentials
|
16
|
+
|
17
|
+
@show_request = data[:show_request]
|
18
|
+
super()
|
19
|
+
end
|
20
|
+
|
21
|
+
def request
|
22
|
+
puts xml if @show_request == true
|
23
|
+
begin
|
24
|
+
format_response(CLIENT.client.call(:get_status_cartao_postagem,
|
25
|
+
soap_action: '',
|
26
|
+
xml: xml).to_hash)
|
27
|
+
rescue Savon::SOAPFault => error
|
28
|
+
generate_exception(error)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def xml
|
35
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
36
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
37
|
+
xml['soap'].Body do
|
38
|
+
xml['ns1'].getStatusCartaoPostagem do
|
39
|
+
parent_namespace = xml.parent.namespace
|
40
|
+
xml.parent.namespace = nil
|
41
|
+
|
42
|
+
xml.numeroCartaoPostagem @credentials.card
|
43
|
+
xml.usuario @credentials.sigep_user
|
44
|
+
xml.senha @credentials.sigep_password
|
45
|
+
|
46
|
+
xml.parent.namespace = parent_namespace
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end.doc.root.to_xml
|
51
|
+
end
|
52
|
+
|
53
|
+
def format_response(response)
|
54
|
+
response = response[:get_status_cartao_postagem_response][:return]
|
55
|
+
|
56
|
+
{ status: convert_status_to_symbol(response) }
|
57
|
+
end
|
58
|
+
|
59
|
+
def convert_status_to_symbol(status)
|
60
|
+
case status
|
61
|
+
when 'Normal'
|
62
|
+
:ok
|
63
|
+
when 'Cancelado'
|
64
|
+
:canceled
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|