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
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 4bcdea458108961276833153250ad580148c625d6fb4500a90ad69558d54a98a
|
4
|
+
data.tar.gz: '0967af2c766255082c6a6231d2321d42c25283906b42f72606dbd1559d2517f0'
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: d11f27adbbfc2648b8c73442052d707ebe2e3783e14a84ccd8053a7670815ce2ad2939806a4040b3870b402c49cdc1a5e840ede98c25b940a6c08b3e6cdf7749
|
7
|
+
data.tar.gz: 2ce68ea63004a35f7eec0021987b1a6a47d8a88461da43891a44c7ff315b937efdc0f890fce11946646be27c3491b6ce4c7331b46213a8d7a6ec84dbc63d02ee
|
data/lib/SRO/client.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'savon'
|
2
|
+
|
3
|
+
module Correios
|
4
|
+
module SRO
|
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
|
+
'https://webservice.correios.com.br/service/rastro/Rastro.wsdl'
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_env?
|
20
|
+
(defined?(Rails) && ENV['RAILS_ENV'].in?(%w[test development]) ||
|
21
|
+
ENV['GEM_ENV'].in?(%w[test development]))
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/SRO/helper.rb
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
module Correios
|
2
|
+
module SRO
|
3
|
+
class Helper
|
4
|
+
def namespaces
|
5
|
+
{
|
6
|
+
'xmlns:soap' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
7
|
+
'xmlns:ns1' => 'http://resource.webservice.correios.com.br/'
|
8
|
+
}
|
9
|
+
end
|
10
|
+
|
11
|
+
def tracking_event_status(event)
|
12
|
+
type = event[:tipo]
|
13
|
+
status = event[:status].to_i
|
14
|
+
|
15
|
+
case type
|
16
|
+
when 'BDE', 'BDI', 'BDR'
|
17
|
+
case status
|
18
|
+
when 0, 1
|
19
|
+
return :delivered
|
20
|
+
when 2
|
21
|
+
return :not_delivered
|
22
|
+
when 4, 5, 6, 8, 10, 21, 22, 26, 33, 36, 40, 42, 48, 49, 56
|
23
|
+
return :returning
|
24
|
+
when 7, 19, 25, 32, 38, 41, 45, 46, 47, 53, 57, 66, 69
|
25
|
+
return :in_transit
|
26
|
+
when 9, 50, 51, 52
|
27
|
+
return :stolen_lost
|
28
|
+
when 3, 12, 24
|
29
|
+
return :awaiting_pickup
|
30
|
+
when 20, 34, 35
|
31
|
+
return :not_delivered
|
32
|
+
when 23
|
33
|
+
return :returned
|
34
|
+
when 28, 37
|
35
|
+
return :damaged
|
36
|
+
when 43
|
37
|
+
return :arrested
|
38
|
+
when 54, 55, 58, 59
|
39
|
+
return :taxing
|
40
|
+
end
|
41
|
+
when 'BLQ', 'PMT', 'CD', 'CMT', 'TRI', 'CUN', 'RO', 'DO', 'EST', 'PAR'
|
42
|
+
case status
|
43
|
+
when 0, 1, 2, 3, 4, 5, 6, 9, 15, 16, 17, 18
|
44
|
+
return :in_transit
|
45
|
+
end
|
46
|
+
when 'FC'
|
47
|
+
case status
|
48
|
+
when 1
|
49
|
+
return :returning
|
50
|
+
when 2, 3, 5, 7
|
51
|
+
return :in_transit
|
52
|
+
when 4
|
53
|
+
return :not_delivered
|
54
|
+
end
|
55
|
+
when 'IDC'
|
56
|
+
case status
|
57
|
+
when 1, 2, 3, 4, 5, 6, 7
|
58
|
+
return :stolen_lost
|
59
|
+
end
|
60
|
+
when 'LDI'
|
61
|
+
case status
|
62
|
+
when 0, 1, 2, 3, 14
|
63
|
+
return :awaiting_pickup
|
64
|
+
end
|
65
|
+
when 'OEC', 'LDE'
|
66
|
+
case status
|
67
|
+
when 0, 1, 9
|
68
|
+
return :delivering
|
69
|
+
end
|
70
|
+
when 'PO', 'CO'
|
71
|
+
case status
|
72
|
+
when 0, 1, 9
|
73
|
+
return :posted
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
def query_type(type)
|
79
|
+
case type
|
80
|
+
when :list
|
81
|
+
'L'
|
82
|
+
when :range
|
83
|
+
'F'
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def result_type(type)
|
88
|
+
case type
|
89
|
+
when :last_event
|
90
|
+
'U'
|
91
|
+
when :all_events
|
92
|
+
'T'
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def language(type)
|
97
|
+
case type
|
98
|
+
when :portuguese
|
99
|
+
'101'
|
100
|
+
when :english
|
101
|
+
'102'
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
def format_label_numbers(label_numbers)
|
106
|
+
label_numbers_string = ''
|
107
|
+
label_numbers.each do |label_number|
|
108
|
+
label_numbers_string += label_number
|
109
|
+
end
|
110
|
+
label_numbers_string
|
111
|
+
end
|
112
|
+
|
113
|
+
def convert_string_to_date(date, time)
|
114
|
+
Time.strptime("#{date} #{time}", '%d/%m/%Y %H:%M')
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,142 @@
|
|
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 SRO
|
10
|
+
class TrackShippings < 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
|
+
@query_type = data[:query_type]
|
20
|
+
@result_type = data[:result_type]
|
21
|
+
@language = data[:language]
|
22
|
+
super()
|
23
|
+
end
|
24
|
+
|
25
|
+
def request
|
26
|
+
puts xml if @show_request == true
|
27
|
+
begin
|
28
|
+
format_response(CLIENT.client.call(:busca_eventos,
|
29
|
+
soap_action: '',
|
30
|
+
xml: xml).to_hash)
|
31
|
+
rescue Savon::SOAPFault => error
|
32
|
+
generate_exception(error)
|
33
|
+
rescue Savon::HTTPError => error
|
34
|
+
if error.http.code == 401
|
35
|
+
generate_exception("Unauthorized (#{error.http.code}).")
|
36
|
+
end
|
37
|
+
generate_exception("Unknown HTTP error (#{error.http.code}).")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def xml
|
44
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
45
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
46
|
+
xml['soap'].Body do
|
47
|
+
xml['ns1'].buscaEventos do
|
48
|
+
parent_namespace = xml.parent.namespace
|
49
|
+
xml.parent.namespace = nil
|
50
|
+
|
51
|
+
xml.objetos HELPER.format_label_numbers(@label_numbers)
|
52
|
+
xml.tipo HELPER.query_type(@query_type)
|
53
|
+
xml.resultado HELPER.result_type(@result_type)
|
54
|
+
xml.lingua HELPER.language(@language)
|
55
|
+
xml.usuario @credentials.sro_user
|
56
|
+
xml.senha @credentials.sro_password
|
57
|
+
|
58
|
+
xml.parent.namespace = parent_namespace
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end.doc.root.to_xml
|
63
|
+
end
|
64
|
+
|
65
|
+
def format_response(response)
|
66
|
+
response = response[:busca_eventos_response][:return]
|
67
|
+
|
68
|
+
objects = response[:objeto]
|
69
|
+
objects = [objects] if objects.is_a?(Hash)
|
70
|
+
|
71
|
+
generate_exception(objects.first[:erro]) if objects.first[:numero] == 'Erro'
|
72
|
+
|
73
|
+
formatted_objects = []
|
74
|
+
objects.each do |object|
|
75
|
+
formatted_objects << format_object(object)
|
76
|
+
end
|
77
|
+
|
78
|
+
{ tracking: formatted_objects }
|
79
|
+
end
|
80
|
+
|
81
|
+
def format_object(object)
|
82
|
+
if object[:erro].present?
|
83
|
+
return {
|
84
|
+
label: {
|
85
|
+
number: object[:numero]
|
86
|
+
},
|
87
|
+
error: object[:erro]
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
events = object[:evento]
|
92
|
+
events = [events] if events.is_a?(Hash)
|
93
|
+
|
94
|
+
formatted_events = []
|
95
|
+
events.each do |event|
|
96
|
+
formatted_events << format_event(event)
|
97
|
+
end
|
98
|
+
|
99
|
+
{
|
100
|
+
label: {
|
101
|
+
number: object[:numero],
|
102
|
+
initials: object[:sigla],
|
103
|
+
name: object[:nome],
|
104
|
+
category: object[:categoria]
|
105
|
+
},
|
106
|
+
events: formatted_events
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
110
|
+
def format_event(event)
|
111
|
+
{
|
112
|
+
movement: HELPER.tracking_event_status(event),
|
113
|
+
type: event[:tipo],
|
114
|
+
status: event[:status],
|
115
|
+
time: HELPER.convert_string_to_date(event[:data], event[:hora]),
|
116
|
+
description: event[:descricao],
|
117
|
+
detail: event[:detalhe],
|
118
|
+
city: event[:cidade],
|
119
|
+
state: event[:uf],
|
120
|
+
destination: format_destination(event[:destino]),
|
121
|
+
site: {
|
122
|
+
description: event[:local],
|
123
|
+
zip_code: event[:codigo]
|
124
|
+
}
|
125
|
+
}
|
126
|
+
end
|
127
|
+
|
128
|
+
def format_destination(destination)
|
129
|
+
return nil if destination.nil?
|
130
|
+
{
|
131
|
+
city: destination[:cidade],
|
132
|
+
neighborhood: destination[:bairro],
|
133
|
+
state: destination[:uf],
|
134
|
+
site: {
|
135
|
+
description: destination[:local],
|
136
|
+
zip_code: destination[:codigo]
|
137
|
+
}
|
138
|
+
}
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
@@ -0,0 +1,144 @@
|
|
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 SRO
|
10
|
+
class TrackShippingsList < 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
|
+
@query_type = data[:query_type]
|
20
|
+
@result_type = data[:result_type]
|
21
|
+
@language = data[:language]
|
22
|
+
super()
|
23
|
+
end
|
24
|
+
|
25
|
+
def request
|
26
|
+
puts xml if @show_request == true
|
27
|
+
begin
|
28
|
+
format_response(CLIENT.client.call(:busca_eventos_lista,
|
29
|
+
soap_action: '',
|
30
|
+
xml: xml).to_hash)
|
31
|
+
rescue Savon::SOAPFault => error
|
32
|
+
generate_exception(error)
|
33
|
+
rescue Savon::HTTPError => error
|
34
|
+
if error.http.code == 401
|
35
|
+
generate_exception("Unauthorized (#{error.http.code}).")
|
36
|
+
end
|
37
|
+
generate_exception("Unknown HTTP error (#{error.http.code}).")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def xml
|
44
|
+
Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
|
45
|
+
xml['soap'].Envelope(HELPER.namespaces) do
|
46
|
+
xml['soap'].Body do
|
47
|
+
xml['ns1'].buscaEventosLista do
|
48
|
+
parent_namespace = xml.parent.namespace
|
49
|
+
xml.parent.namespace = nil
|
50
|
+
|
51
|
+
@label_numbers.each do |label_number|
|
52
|
+
xml.objetos label_number
|
53
|
+
end
|
54
|
+
xml.tipo HELPER.query_type(@query_type)
|
55
|
+
xml.resultado HELPER.result_type(@result_type)
|
56
|
+
xml.lingua HELPER.language(@language)
|
57
|
+
xml.usuario @credentials.sro_user
|
58
|
+
xml.senha @credentials.sro_password
|
59
|
+
|
60
|
+
xml.parent.namespace = parent_namespace
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end.doc.root.to_xml
|
65
|
+
end
|
66
|
+
|
67
|
+
def format_response(response)
|
68
|
+
response = response[:busca_eventos_lista_response][:return]
|
69
|
+
|
70
|
+
objects = response[:objeto]
|
71
|
+
objects = [objects] if objects.is_a?(Hash)
|
72
|
+
|
73
|
+
generate_exception(objects.first[:erro]) if objects.first[:numero] == 'Erro'
|
74
|
+
|
75
|
+
formatted_objects = []
|
76
|
+
objects.each do |object|
|
77
|
+
formatted_objects << format_object(object)
|
78
|
+
end
|
79
|
+
|
80
|
+
{ tracking: formatted_objects }
|
81
|
+
end
|
82
|
+
|
83
|
+
def format_object(object)
|
84
|
+
if object[:erro].present?
|
85
|
+
return {
|
86
|
+
label: {
|
87
|
+
number: object[:numero]
|
88
|
+
},
|
89
|
+
error: object[:erro]
|
90
|
+
}
|
91
|
+
end
|
92
|
+
|
93
|
+
events = object[:evento]
|
94
|
+
events = [events] if events.is_a?(Hash)
|
95
|
+
|
96
|
+
formatted_events = []
|
97
|
+
events.each do |event|
|
98
|
+
formatted_events << format_event(event)
|
99
|
+
end
|
100
|
+
|
101
|
+
{
|
102
|
+
label: {
|
103
|
+
number: object[:numero],
|
104
|
+
initials: object[:sigla],
|
105
|
+
name: object[:nome],
|
106
|
+
category: object[:categoria]
|
107
|
+
},
|
108
|
+
events: formatted_events
|
109
|
+
}
|
110
|
+
end
|
111
|
+
|
112
|
+
def format_event(event)
|
113
|
+
{
|
114
|
+
movement: HELPER.tracking_event_status(event),
|
115
|
+
type: event[:tipo],
|
116
|
+
status: event[:status],
|
117
|
+
time: HELPER.convert_string_to_date(event[:data], event[:hora]),
|
118
|
+
description: event[:descricao],
|
119
|
+
detail: event[:detalhe],
|
120
|
+
city: event[:cidade],
|
121
|
+
state: event[:uf],
|
122
|
+
destination: format_destination(event[:destino]),
|
123
|
+
site: {
|
124
|
+
description: event[:local],
|
125
|
+
zip_code: event[:codigo]
|
126
|
+
}
|
127
|
+
}
|
128
|
+
end
|
129
|
+
|
130
|
+
def format_destination(destination)
|
131
|
+
return nil if destination.nil?
|
132
|
+
{
|
133
|
+
city: destination[:cidade],
|
134
|
+
neighborhood: destination[:bairro],
|
135
|
+
state: destination[:uf],
|
136
|
+
site: {
|
137
|
+
description: destination[:local],
|
138
|
+
zip_code: destination[:codigo]
|
139
|
+
}
|
140
|
+
}
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class CorreiosException < StandardError
|
2
|
+
def generate_exception(message)
|
3
|
+
raise CorreiosException, format_error_message(message)
|
4
|
+
end
|
5
|
+
|
6
|
+
def format_error_message(message)
|
7
|
+
message = message.to_s.gsub('(soap:Server)', '')
|
8
|
+
message = message.strip
|
9
|
+
message.capitalize
|
10
|
+
end
|
11
|
+
end
|