superpay_api 0.0.1
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/superpay_api/configuracao.rb +171 -0
- data/lib/superpay_api/dados_usuario.rb +144 -0
- data/lib/superpay_api/endereco.rb +84 -0
- data/lib/superpay_api/forma_de_pagamento.rb +56 -0
- data/lib/superpay_api/helper.rb +46 -0
- data/lib/superpay_api/item_pedido.rb +64 -0
- data/lib/superpay_api/retorno.rb +80 -0
- data/lib/superpay_api/status.rb +55 -0
- data/lib/superpay_api/telefone.rb +99 -0
- data/lib/superpay_api/transacao.rb +206 -0
- data/lib/superpay_api/version.rb +9 -0
- data/lib/superpay_api/web_service.rb +74 -0
- data/lib/superpay_api.rb +22 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: e19b66538456ae34eae4448a9f6acdd191f64389
|
4
|
+
data.tar.gz: 6884549fdd974f9924224cd4c7011dada8c0f9d9
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6e7752e4f932db0033ddf6fb7685d32558b2df4ddd0c2e9b068d25ed5430e345aeab6b545d26ea13d804c2a64a56f4bcedb9c11613e410d1ef5f23b27e41086d
|
7
|
+
data.tar.gz: c5eac64d290bfa1598d0d50899a73cc94b63d94bcf679549d48bcf6ec590919184a363db497f828a58463869f8b7d707462cd573296d1fc404b4f4da9f6b82af
|
@@ -0,0 +1,171 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
module Configuracao
|
4
|
+
|
5
|
+
# Endereço do wsdl funções:
|
6
|
+
# [Criar Transação pagamentoTransacaoCompleta, Capturar operacaoTransacao, Cancelar operacaoTransacao, Consultar consultaTransacaoEspecifica]
|
7
|
+
# [Estornar estornaTransacao] - Estorno
|
8
|
+
URL = {
|
9
|
+
:homologacao => "https://homologacao.superpay.com.br/superpay/servicosPagamentoCompletoWS.Services?wsdl",
|
10
|
+
:homologacao_estorno => "https://homologacao.superpay.com.br/superpay/servicosEstornoWS.Services?wsdl",
|
11
|
+
:producao => "https://superpay2.superpay.com.br/checkout/servicosPagamentoCompletoWS.Services?wsdl",
|
12
|
+
:producao_estorno => "https://superpay2.superpay.com.br/checkout/servicosEstornoWS.Services?wsdl",
|
13
|
+
}
|
14
|
+
|
15
|
+
# Opções de idiomas
|
16
|
+
IDIOMAS = {
|
17
|
+
:portugues => 1,
|
18
|
+
:ingles => 2,
|
19
|
+
:espanhol => 3,
|
20
|
+
}
|
21
|
+
|
22
|
+
# Opções de Origem da Transação
|
23
|
+
# Consulte área de suporte sobre a habilitação das origens
|
24
|
+
ORIGEM_DA_TRANSACAO ={
|
25
|
+
:ecommerce => 1,
|
26
|
+
:mobile => 2,
|
27
|
+
:ura => 3,
|
28
|
+
:pos => 4,
|
29
|
+
}
|
30
|
+
|
31
|
+
# Retornar array com os possíveis idiomas
|
32
|
+
def self.validos
|
33
|
+
IDIOMAS.map{ |key, value| key }
|
34
|
+
end
|
35
|
+
|
36
|
+
# Retornar array com as possíveis Origem da Transação
|
37
|
+
def self.origem_da_transacao_validos
|
38
|
+
ORIGEM_DA_TRANSACAO.map{ |key, value| key }
|
39
|
+
end
|
40
|
+
|
41
|
+
# Parâmetros iniciais
|
42
|
+
URL_CAMPAINHA = 'http://localhost:3000'
|
43
|
+
# Parâmetros iniciais
|
44
|
+
IDIOMA = :portugues
|
45
|
+
# Parâmetros iniciais
|
46
|
+
ORIGEM_TRANSACAO = :ecommerce
|
47
|
+
# Parâmetros iniciais
|
48
|
+
AMBIENTE = :homologacao # :homologacao ou :producao
|
49
|
+
# Parâmetros iniciais
|
50
|
+
USUARIO = 'superpay'
|
51
|
+
# Parâmetros iniciais
|
52
|
+
SENHA = 'superpay'
|
53
|
+
# Parâmetros iniciais
|
54
|
+
ESTABELECIMENTO = 1010101010101010
|
55
|
+
|
56
|
+
# Define o ambiente de trabalho
|
57
|
+
# Simbolo - Valores pré-definidos [:homologacao, :producao]
|
58
|
+
attr_writer :ambiente
|
59
|
+
|
60
|
+
# Código que identifica o estabelecimento dentro do SuperPay (fornecido pelo gateway)
|
61
|
+
# Enviado pelo SuperPay
|
62
|
+
attr_writer :estabelecimento
|
63
|
+
|
64
|
+
# URL será sempre acionada quando o status do pedido mudar. Deve estar preparada para receber dados de campainha
|
65
|
+
# Alfa Numérico - Até 250 caracteres
|
66
|
+
attr_writer :url_campainha
|
67
|
+
|
68
|
+
# Código do idioma. Ver tabela “Idiomas”
|
69
|
+
# Simbolo - Valores pré-definidos
|
70
|
+
attr_writer :idioma
|
71
|
+
|
72
|
+
# Código do ambiente de origem. Verificar tabela “Ambientes de Origem”
|
73
|
+
# Simbolo - Valores pré-definidos
|
74
|
+
attr_writer :origem_transacao
|
75
|
+
|
76
|
+
# Enviado pelo SuperPay
|
77
|
+
attr_writer :usuario
|
78
|
+
|
79
|
+
# Enviado pelo SuperPay
|
80
|
+
attr_writer :senha
|
81
|
+
|
82
|
+
# Comando que recebe as configuracoes
|
83
|
+
def configure
|
84
|
+
yield self if block_given?
|
85
|
+
end
|
86
|
+
|
87
|
+
# Definir ambiente
|
88
|
+
def ambiente
|
89
|
+
@ambiente ||= AMBIENTE
|
90
|
+
end
|
91
|
+
|
92
|
+
# Definir url_campainha
|
93
|
+
def url_campainha
|
94
|
+
@url_campainha ||= URL_CAMPAINHA
|
95
|
+
end
|
96
|
+
|
97
|
+
# Definir idioma
|
98
|
+
def idioma
|
99
|
+
@idioma ||= IDIOMA
|
100
|
+
end
|
101
|
+
|
102
|
+
# Definir origem_transacao
|
103
|
+
def origem_transacao
|
104
|
+
@origem_transacao ||= ORIGEM_TRANSACAO
|
105
|
+
end
|
106
|
+
|
107
|
+
# Definir usuario
|
108
|
+
def usuario
|
109
|
+
@usuario ||= USUARIO
|
110
|
+
end
|
111
|
+
|
112
|
+
# Definir senha
|
113
|
+
def senha
|
114
|
+
@senha ||= SENHA
|
115
|
+
end
|
116
|
+
|
117
|
+
# Definir estabelecimento
|
118
|
+
def estabelecimento
|
119
|
+
@estabelecimento ||= ESTABELECIMENTO
|
120
|
+
end
|
121
|
+
|
122
|
+
# Montar o Hash de Login no padrão utilizado pelo SuperPay
|
123
|
+
def login
|
124
|
+
login = {
|
125
|
+
usuario: usuario.to_s,
|
126
|
+
senha: senha.to_s,
|
127
|
+
}
|
128
|
+
return login
|
129
|
+
end
|
130
|
+
|
131
|
+
# Retornar o número do idioma no padrão utilizado pelo SuperPay
|
132
|
+
def idiomas_to_request
|
133
|
+
IDIOMAS[self.idioma].to_i
|
134
|
+
end
|
135
|
+
|
136
|
+
# Retornar o número da origem da transacao no padrão utilizado pelo SuperPay
|
137
|
+
def origem_da_transacao_to_request
|
138
|
+
ORIGEM_DA_TRANSACAO[self.origem_transacao].to_i
|
139
|
+
end
|
140
|
+
|
141
|
+
# Montar o Hash de configurações no padrão utilizado pelo SuperPay
|
142
|
+
def configuracoes_to_request
|
143
|
+
configuracoes = {
|
144
|
+
codigo_estabelecimento: self.estabelecimento.to_i,
|
145
|
+
url_campainha: self.url_campainha.to_s,
|
146
|
+
idioma: self.idiomas_to_request,
|
147
|
+
origem_transacao: self.origem_da_transacao_to_request,
|
148
|
+
}
|
149
|
+
return configuracoes
|
150
|
+
end
|
151
|
+
|
152
|
+
# Retornar a url conforme o ambiente
|
153
|
+
def url
|
154
|
+
if ambiente == :producao
|
155
|
+
SuperpayApi::Configuracao::URL[:producao]
|
156
|
+
else
|
157
|
+
SuperpayApi::Configuracao::URL[:homologacao]
|
158
|
+
end
|
159
|
+
end
|
160
|
+
|
161
|
+
# Retornar a url conforme o ambiente
|
162
|
+
def url_estorno
|
163
|
+
if ambiente == :producao
|
164
|
+
SuperpayApi::Configuracao::URL[:producao_estorno]
|
165
|
+
else
|
166
|
+
SuperpayApi::Configuracao::URL[:homologacao_estorno]
|
167
|
+
end
|
168
|
+
end
|
169
|
+
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,144 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class DadosUsuario
|
4
|
+
|
5
|
+
# Opções de Sexo
|
6
|
+
SEXO = {
|
7
|
+
:masculino => "M",
|
8
|
+
:feminino => "F",
|
9
|
+
}
|
10
|
+
|
11
|
+
# Opções de Tipo de Cliente
|
12
|
+
TIPOS_DE_CLIENTE = {
|
13
|
+
:pessoa_fisica => 1,
|
14
|
+
:pessoa_juridica => 2,
|
15
|
+
}
|
16
|
+
|
17
|
+
# Código que identifica o cliente no estabelecimento.
|
18
|
+
# Alfa Numérico - Até 20 caracteres
|
19
|
+
attr_accessor :codigo_cliente
|
20
|
+
|
21
|
+
# Identifica se o cliente é pessoa física ou jurídica. Ver tabela “Tipo Cliente”
|
22
|
+
# Simbolo - Valores pré-definidos [:pessoa_fisica, :pessoa_juridica]
|
23
|
+
attr_accessor :tipo_cliente
|
24
|
+
|
25
|
+
# Nome do comprador
|
26
|
+
# Alfa Numérico - Até 100 caracteres
|
27
|
+
attr_accessor :nome
|
28
|
+
|
29
|
+
# E-mail do comprador
|
30
|
+
# Alfa Numérico - Até 100 caracteres
|
31
|
+
attr_accessor :email
|
32
|
+
|
33
|
+
# Documento principal do comprador
|
34
|
+
# Alfa Numérico - Até 30 caracteres
|
35
|
+
attr_accessor :documento
|
36
|
+
|
37
|
+
# Documento complementar do comprador
|
38
|
+
# Alfa Numérico - Até 30 caracteres
|
39
|
+
attr_accessor :documento_2
|
40
|
+
|
41
|
+
# M – Masculino / F – Feminino
|
42
|
+
# Simbolo - Valores pré-definidos [:masculino, :feminino]
|
43
|
+
attr_accessor :sexo
|
44
|
+
|
45
|
+
# Data de nascimento do comprador. Formato dd/mm/yyyy
|
46
|
+
# Alfa Numérico - Até 10 caracteres
|
47
|
+
attr_accessor :data_nascimento
|
48
|
+
|
49
|
+
# Endereços
|
50
|
+
# SuperpayApi::Endereco
|
51
|
+
attr_accessor :endereco_comprador, :endereco_entrega
|
52
|
+
|
53
|
+
# Telefones
|
54
|
+
# SuperpayApi::Telefone
|
55
|
+
attr_accessor :telefone_comprador, :telefone_adicional_comprador, :telefone_entrega, :telefone_adicional_entrega
|
56
|
+
|
57
|
+
# Validações do Rails 3
|
58
|
+
include ActiveModel::Validations
|
59
|
+
|
60
|
+
# Retornar array com os possíveis sexos
|
61
|
+
def self.sexos_validos
|
62
|
+
SEXO.map{ |key, value| key }
|
63
|
+
end
|
64
|
+
|
65
|
+
# Retornar array com os possíveis tipos de cliente
|
66
|
+
def self.tipos_de_cliente_validos
|
67
|
+
TIPOS_DE_CLIENTE.map{ |key, value| key }
|
68
|
+
end
|
69
|
+
|
70
|
+
# Validações
|
71
|
+
validates :sexo, inclusion: { in: SuperpayApi::DadosUsuario.sexos_validos }, allow_nil: true
|
72
|
+
validates :tipo_cliente, inclusion: { in: SuperpayApi::DadosUsuario.tipos_de_cliente_validos }, allow_nil: true
|
73
|
+
validates :codigo_cliente, length: { maximum: 20 }
|
74
|
+
validates :nome, :email, length: { maximum: 100 }
|
75
|
+
validates :documento, :documento_2, length: { maximum: 30 }
|
76
|
+
validates :data_nascimento, length: { maximum: 10 }
|
77
|
+
|
78
|
+
validates_each [:endereco_comprador, :endereco_entrega], allow_nil: true do |record, attr, value|
|
79
|
+
if value.is_a? SuperpayApi::Endereco
|
80
|
+
if value.invalid?
|
81
|
+
value.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
82
|
+
end
|
83
|
+
else
|
84
|
+
record.errors.add(attr, 'deve ser um objeto SuperpayApi::Endereco.')
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
validates_each [:telefone_comprador, :telefone_adicional_comprador, :telefone_entrega, :telefone_adicional_entrega], allow_nil: true do |record, attr, value|
|
89
|
+
if value.is_a? SuperpayApi::Telefone
|
90
|
+
if value.invalid?
|
91
|
+
value.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
92
|
+
end
|
93
|
+
else
|
94
|
+
record.errors.add(attr, 'deve ser um objeto SuperpayApi::Telefone.')
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# Nova instancia da classe DadosUsuario
|
99
|
+
# @param [Hash] campos
|
100
|
+
def initialize(campos = {})
|
101
|
+
campos.each do |campo, valor|
|
102
|
+
if SuperpayApi::DadosUsuario.public_instance_methods.include? "#{campo}=".to_sym
|
103
|
+
send "#{campo}=", valor
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
# Retornar o número do tipo de telefone no padrão utilizado pelo SuperPay
|
109
|
+
def sexo_to_request
|
110
|
+
SEXO[self.sexo]
|
111
|
+
end
|
112
|
+
|
113
|
+
# Retornar o número do tipo de telefone no padrão utilizado pelo SuperPay
|
114
|
+
def tipos_de_cliente_to_request
|
115
|
+
TIPOS_DE_CLIENTE[self.tipo_cliente]
|
116
|
+
end
|
117
|
+
|
118
|
+
# Montar o Hash de dados do usuario no padrão utilizado pelo SuperPay
|
119
|
+
def to_request
|
120
|
+
dados_usuario = {
|
121
|
+
codigo_cliente: self.codigo_cliente,
|
122
|
+
tipo_cliente: self.tipos_de_cliente_to_request,
|
123
|
+
nome_comprador: self.nome,
|
124
|
+
documento_comprador: self.documento,
|
125
|
+
documento_2_comprador: self.documento_2,
|
126
|
+
sexo_comprador: self.sexo_to_request,
|
127
|
+
data_nascimento_comprador: self.data_nascimento,
|
128
|
+
email_comprador: self.email,
|
129
|
+
}
|
130
|
+
# Adiciona os dados de endereços
|
131
|
+
dados_usuario.merge! self.endereco_comprador.to_request("endereco_comprador") unless endereco_comprador.blank?
|
132
|
+
dados_usuario.merge! self.endereco_entrega.to_request("endereco_entrega") unless endereco_entrega.blank?
|
133
|
+
|
134
|
+
# Adiciona os dados de telefones
|
135
|
+
dados_usuario.merge! self.telefone_comprador.to_request("comprador") unless telefone_comprador.blank?
|
136
|
+
dados_usuario.merge! self.telefone_adicional_comprador.to_request("adicional_comprador") unless telefone_adicional_comprador.blank?
|
137
|
+
dados_usuario.merge! self.telefone_entrega.to_request("entrega") unless telefone_entrega.blank?
|
138
|
+
dados_usuario.merge! self.telefone_adicional_entrega.to_request("adicional_entrega") unless telefone_adicional_entrega.blank?
|
139
|
+
|
140
|
+
return dados_usuario
|
141
|
+
end
|
142
|
+
|
143
|
+
end
|
144
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class Endereco
|
4
|
+
|
5
|
+
# Endereço (Logradouro)
|
6
|
+
# Alfa Numérico - Até 100 caracteres
|
7
|
+
attr_accessor :logradouro
|
8
|
+
|
9
|
+
# Número do logradouro
|
10
|
+
# Alfa Numérico - Até 10 caracteres
|
11
|
+
attr_accessor :numero
|
12
|
+
|
13
|
+
# Bairro do logradouro
|
14
|
+
# Alfa Numérico - Até 50 caracteres
|
15
|
+
attr_accessor :bairro
|
16
|
+
|
17
|
+
# Complemento do endereço comprador
|
18
|
+
# Alfa Numérico - Até 50 caracteres
|
19
|
+
attr_accessor :complemento
|
20
|
+
|
21
|
+
# Cidade do logradouro
|
22
|
+
# Alfa Numérico - Até 50 caracteres
|
23
|
+
attr_accessor :cidade
|
24
|
+
|
25
|
+
# Estado do logradouro
|
26
|
+
# Alfa Numérico - Até 2 caracteres
|
27
|
+
attr_accessor :estado
|
28
|
+
|
29
|
+
# CEP. Enviar sem traços ou espaços
|
30
|
+
# Alfa Numérico - Até 10 caracteres
|
31
|
+
attr_accessor :cep
|
32
|
+
|
33
|
+
# Validações do Rails 3
|
34
|
+
include ActiveModel::Validations
|
35
|
+
|
36
|
+
# Validações
|
37
|
+
validates :logradouro, length: { maximum: 100 }
|
38
|
+
validates :numero, :cep, length: { maximum: 10 }
|
39
|
+
validates :bairro, :complemento, :cidade, length: { maximum: 50 }
|
40
|
+
validates :estado, length: { maximum: 2 }
|
41
|
+
|
42
|
+
# Nova instancia da classe Endereco
|
43
|
+
# @param [Hash] campos
|
44
|
+
def initialize(campos = {})
|
45
|
+
campos.each do |campo, valor|
|
46
|
+
if SuperpayApi::Endereco.public_instance_methods.include? "#{campo}=".to_sym
|
47
|
+
send "#{campo}=", valor
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
# Montar o Hash de Endereco conforme o tipo dele no padrão utilizado pelo SuperPay
|
53
|
+
# tipo: [:endereco_comprador, :endereco_entrega]
|
54
|
+
def to_request tipo
|
55
|
+
endereco = {}
|
56
|
+
case tipo.to_sym
|
57
|
+
when :endereco_comprador then
|
58
|
+
endereco = {
|
59
|
+
endereco_comprador: self.logradouro,
|
60
|
+
numero_endereco_comprador: self.numero,
|
61
|
+
bairro_endereco_comprador: self.bairro,
|
62
|
+
complemento_endereco_comprador: self.complemento,
|
63
|
+
cidade_endereco_comprador: self.cidade,
|
64
|
+
estado_endereco_comprador: self.estado,
|
65
|
+
cep_endereco_comprador: self.cep,
|
66
|
+
}
|
67
|
+
when :endereco_entrega then
|
68
|
+
endereco = {
|
69
|
+
endereco_entrega: self.logradouro,
|
70
|
+
numero_endereco_entrega: self.numero,
|
71
|
+
bairro_endereco_entrega: self.bairro,
|
72
|
+
complemento_endereco_entrega: self.complemento,
|
73
|
+
cidade_endereco_entrega: self.cidade,
|
74
|
+
estado_endereco_entrega: self.estado,
|
75
|
+
cep_endereco_entrega: self.cep,
|
76
|
+
}
|
77
|
+
else
|
78
|
+
raise 'Endereço inválido.'
|
79
|
+
end
|
80
|
+
return endereco
|
81
|
+
end
|
82
|
+
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class FormaDePagamento
|
4
|
+
|
5
|
+
# Opções de Formas de Pagamento
|
6
|
+
FORMAS_DE_PAGAMENTO = {
|
7
|
+
52 => "Cielo - Checkout Redirect",
|
8
|
+
120 => "Cielo - Visa WebService",
|
9
|
+
121 => "Cielo - MasterCard WebService",
|
10
|
+
122 => "Cielo - American Express WebService",
|
11
|
+
123 => "Cielo - ELO WebService",
|
12
|
+
124 => "Cielo - Diners WebService",
|
13
|
+
125 => "Cielo - Discover WebService",
|
14
|
+
126 => "Cielo - Aura WebService",
|
15
|
+
127 => "Cielo - JCB WebService",
|
16
|
+
128 => "Cielo - Maestro WebService",
|
17
|
+
129 => "Cielo - Visa Electron WebService",
|
18
|
+
130 => "Cielo - Visa Redirect",
|
19
|
+
131 => "Cielo - MasterCard Redirect",
|
20
|
+
132 => "Cielo - American Express Redirect",
|
21
|
+
133 => "Cielo - ELO Redirect",
|
22
|
+
134 => "Cielo - Diners Redirect",
|
23
|
+
135 => "Cielo - Discover Redirect",
|
24
|
+
136 => "Cielo - Aura Redirect",
|
25
|
+
137 => "Cielo - JCB Redirect",
|
26
|
+
138 => "Cielo - Maestro Redirect",
|
27
|
+
139 => "Cielo - Visa Electron Redirect",
|
28
|
+
80 => "Rede - Visa Komerci Integrado Redirect",
|
29
|
+
81 => "Rede - MasterCard Komerci Integrado Redirect",
|
30
|
+
82 => "Rede - Diners Komerci Integrado Redirect",
|
31
|
+
90 => "Rede - Visa Komerci WebService WebService",
|
32
|
+
91 => "Rede - MasterCard Komerci WebService WebService",
|
33
|
+
92 => "Rede - Diners Komerci WebService WebService",
|
34
|
+
93 => "Rede - Hpercard Komerci WebService WebService",
|
35
|
+
94 => "Rede - Hiper Komerci WebService WebService",
|
36
|
+
204 => "Elavon - Visa WebService",
|
37
|
+
205 => "Elavon - MasterCard WebService",
|
38
|
+
206 => "Elavon - Diners WebService",
|
39
|
+
207 => "Elavon - Discover WebService",
|
40
|
+
270 => "GetNet - Visa WebService",
|
41
|
+
271 => "GetNet - MasterCard WebService",
|
42
|
+
350 => "Stone - Visa WebService",
|
43
|
+
351 => "Stone - MasterCard WebService",
|
44
|
+
380 => "Bin-FirstData - Visa WebService",
|
45
|
+
381 => "Bin-FirstData - MasterCard WebService",
|
46
|
+
382 => "Bin-FirstData - Cabal WebService",
|
47
|
+
999 => "Múltiplos Cartões WebService",
|
48
|
+
}
|
49
|
+
|
50
|
+
# Retornar array com as possíveis Formas de Pagamento
|
51
|
+
def self.validos
|
52
|
+
FORMAS_DE_PAGAMENTO.map{ |key, value| key }
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class Helper
|
4
|
+
|
5
|
+
# Montar o Hash com a requisição de consulta transação completo
|
6
|
+
def build_request_consulta_transacao_completa numero_transacao
|
7
|
+
# Montar os parâmetros para consulta
|
8
|
+
params = {
|
9
|
+
consulta_transacao_w_s: {
|
10
|
+
codigo_estabelecimento: SuperpayApi.estabelecimento,
|
11
|
+
numero_transacao: numero_transacao,
|
12
|
+
}
|
13
|
+
}
|
14
|
+
# Adiciona as configurações de login
|
15
|
+
params.merge! SuperpayApi.login
|
16
|
+
end
|
17
|
+
|
18
|
+
# Montar o Hash com a requisição de pagamento transação completo
|
19
|
+
def build_request_pagamento_transacao_completa transacao
|
20
|
+
# Montar os parâmetros para pagamento transacao completa
|
21
|
+
params = {}
|
22
|
+
params[:transacao] = transacao.to_request
|
23
|
+
# Adiciona as configurações de login
|
24
|
+
params.merge! SuperpayApi.login
|
25
|
+
end
|
26
|
+
|
27
|
+
# Montar o Hash com a resposta quando ocorre erro
|
28
|
+
# [ResultadoPagamentosWS, ResultadoConsultaTransacaoWS]
|
29
|
+
def build_response_retorno(resposta = {})
|
30
|
+
response = resposta.to_array.first
|
31
|
+
if !response[:consulta_transacao_completa_response].blank?
|
32
|
+
return SuperpayApi::Retorno.new(response[:consulta_transacao_completa_response][:return])
|
33
|
+
elsif !response[:pagamento_transacao_completa_response].blank?
|
34
|
+
return SuperpayApi::Retorno.new(response[:pagamento_transacao_completa_response][:return])
|
35
|
+
else
|
36
|
+
return resposta
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Montar o Hash com a resposta quando ocorre erro
|
41
|
+
def build_response_error(resposta = {})
|
42
|
+
return resposta
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class ItemPedido
|
4
|
+
|
5
|
+
# Código único que identifica cada produto.
|
6
|
+
# Alfa Numérico - Até 20 caracteres
|
7
|
+
attr_accessor :codigo_produto
|
8
|
+
|
9
|
+
# Código que identifica categoria do produto.
|
10
|
+
# Alfa Numérico - Até 20 caracteres
|
11
|
+
attr_accessor :codigo_categoria
|
12
|
+
|
13
|
+
# Nome do Produto
|
14
|
+
# Alfa Numérico - Até 100 caracteres
|
15
|
+
attr_accessor :nome_produto
|
16
|
+
|
17
|
+
# Quantidade comprada do produto
|
18
|
+
# Numérico - Até 8 dígitos
|
19
|
+
attr_accessor :quantidade_produto
|
20
|
+
|
21
|
+
# Valor unitário do produto.
|
22
|
+
# Sempre enviar o valor sem vírgula ou ponto, os dois últimos dígitos são sempre considerados como centavos.
|
23
|
+
# Numérico - Até 10 dígitos
|
24
|
+
attr_accessor :valor_unitario_produto
|
25
|
+
|
26
|
+
# Nome da categoria do produto.
|
27
|
+
# Alfa Numérico - Até 100 caracteres
|
28
|
+
attr_accessor :nome_categoria
|
29
|
+
|
30
|
+
# Validações do Rails 3
|
31
|
+
include ActiveModel::Validations
|
32
|
+
|
33
|
+
# Validações
|
34
|
+
validates :quantidade_produto, :valor_unitario_produto, numericality: true, allow_nil: true
|
35
|
+
validates :codigo_produto, :codigo_categoria, length: { maximum: 20 }
|
36
|
+
validates :nome_produto, :nome_categoria, length: { maximum: 100 }
|
37
|
+
validates :quantidade_produto, length: { maximum: 8 }
|
38
|
+
validates :valor_unitario_produto, length: { maximum: 10 }
|
39
|
+
|
40
|
+
# Nova instancia da classe ItemPedido
|
41
|
+
# @param [Hash] campos
|
42
|
+
def initialize(campos = {})
|
43
|
+
campos.each do |campo, valor|
|
44
|
+
if SuperpayApi::ItemPedido.public_instance_methods.include? "#{campo}=".to_sym
|
45
|
+
send "#{campo}=", valor
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Montar o Hash de dados do ItemPedido no padrão utilizado pelo SuperPay
|
51
|
+
def to_request
|
52
|
+
item_pedido = {
|
53
|
+
codigo_produto: self.codigo_produto,
|
54
|
+
codigo_categoria: self.codigo_categoria,
|
55
|
+
nome_produto: self.nome_produto,
|
56
|
+
quantidade_produto: self.quantidade_produto,
|
57
|
+
valor_unitario_produto: self.valor_unitario_produto,
|
58
|
+
nome_categoria: self.nome_categoria,
|
59
|
+
}
|
60
|
+
return item_pedido
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class Retorno
|
4
|
+
|
5
|
+
# Código que identifica a transação dentro do SuperPay
|
6
|
+
# Numérico - Até 8 dígitos
|
7
|
+
attr_accessor :numero_transacao
|
8
|
+
|
9
|
+
# Código que identifica o estabelecimento dentro do SuperPay (fornecido pelo gateway)
|
10
|
+
# Enviado pelo SuperPay
|
11
|
+
attr_accessor :codigo_estabelecimento
|
12
|
+
|
13
|
+
# Código da forma de pagamento. Ver tabela “Forma de Pagamento”
|
14
|
+
# Simbolo - Valores pré-definidos - Verifique classe SuperpayApi::FormaDePagamento
|
15
|
+
attr_accessor :codigo_forma_pagamento
|
16
|
+
|
17
|
+
# Valor da transação
|
18
|
+
# Sempre enviar o valor sem vírgula ou ponto, os dois últimos dígitos são sempre considerados como centavos.
|
19
|
+
# Numérico - Até 10 dígitos
|
20
|
+
attr_accessor :valor
|
21
|
+
|
22
|
+
# Valor do desconto da transação
|
23
|
+
# Sempre enviar o valor sem vírgula ou ponto, os dois últimos dígitos são sempre considerados como centavos.
|
24
|
+
# Numérico - Até 10 dígitos
|
25
|
+
attr_accessor :valor_desconto
|
26
|
+
|
27
|
+
# Valor da taxa de embarque
|
28
|
+
# Sempre enviar o valor sem vírgula ou ponto, os dois últimos dígitos são sempre considerados como centavos.
|
29
|
+
# Numérico - Até 10 dígitos
|
30
|
+
attr_accessor :taxa_embarque
|
31
|
+
|
32
|
+
# Quantidade de parcelas da transação. Verificar se forma de pagamento suporta parcelamento
|
33
|
+
# Numérico - Até 2 dígitos
|
34
|
+
attr_accessor :parcelas
|
35
|
+
|
36
|
+
# Para o modelo redirect. Essa será a URL de redirecionamento da operação.
|
37
|
+
# Alfa Numérico - Até 500 caracteres
|
38
|
+
attr_accessor :url_pagamento
|
39
|
+
|
40
|
+
# Código que mostra o status atual da transação. Verificar tabela “Status”
|
41
|
+
# Simbolo - Valores pré-definidos - Verifique classe SuperpayApi::Status
|
42
|
+
attr_accessor :status_transacao
|
43
|
+
|
44
|
+
# Código de autorização da operadora/banco/intermediário financeiro
|
45
|
+
# Numérico - Até 20 dígitos
|
46
|
+
attr_accessor :autorizacao
|
47
|
+
|
48
|
+
# Código da transação na operadora/banco/intermediário financeiro
|
49
|
+
# Numérico - Até 20 dígitos
|
50
|
+
attr_accessor :codigo_transacao_operadora
|
51
|
+
|
52
|
+
# Data de aprovação na operadora
|
53
|
+
# Alfa Numérico - Até 10 caracteres
|
54
|
+
attr_accessor :data_aprovacao_operadora
|
55
|
+
|
56
|
+
# Número do comprovante de venda
|
57
|
+
# Alfa Numérico - Até 20 caracteres
|
58
|
+
attr_accessor :numero_comprovante_venda
|
59
|
+
|
60
|
+
# Mensagem de retorno da operadora
|
61
|
+
# Alfa Numérico - Até 50 caracteres
|
62
|
+
attr_accessor :mensagem_venda
|
63
|
+
|
64
|
+
# Retorna o status conforme classe SuperpayApi::Status
|
65
|
+
def status
|
66
|
+
@status ||= SuperpayApi::Status::STATUS[self.status_transacao.to_i]
|
67
|
+
end
|
68
|
+
|
69
|
+
# Nova instancia da classe Retorno
|
70
|
+
# @param [Hash] campos
|
71
|
+
def initialize(campos = {})
|
72
|
+
campos.each do |campo, valor|
|
73
|
+
if SuperpayApi::Retorno.public_instance_methods.include? "#{campo}=".to_sym
|
74
|
+
send "#{campo}=", valor.to_s
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class Status
|
4
|
+
|
5
|
+
# Map Status para Texto.
|
6
|
+
MAPPING = {
|
7
|
+
:autorizado_e_confirmado => "Autorizado e Confirmado",
|
8
|
+
:autorizado => "Autorizado",
|
9
|
+
:nao_autorizado => "Não Autorizado",
|
10
|
+
:transacao_em_andamento => "Transação em Andamento",
|
11
|
+
:aguardando_pagamento => "Aguardando Pagamento",
|
12
|
+
:falha_na_operadora => "Falha na Operadora",
|
13
|
+
:cancelado => "Cancelado",
|
14
|
+
:estornada => "Estornada",
|
15
|
+
:em_analise_de_risco => "Em Análise de Risco",
|
16
|
+
:recusado_analise_de_risco => "Recusado Análise de Risco",
|
17
|
+
:falha_no_envio_para_analise_de_risco => "Falha no envio para Análise de Risco",
|
18
|
+
:boleto_pago_a_menor => "Boleto Pago a menor",
|
19
|
+
:boleto_pago_a_maior => "Boleto Pago a maior",
|
20
|
+
:estorno_parcial => "Estorno Parcial",
|
21
|
+
:estorno_nao_autorizado => "Estorno Não Autorizado",
|
22
|
+
:operacao_em_andamento => "Operação em andamento",
|
23
|
+
:transacao_ja_efetuada => "Transação já efetuada",
|
24
|
+
:aguardando_cancelamento => "Aguardando Cancelamento",
|
25
|
+
}
|
26
|
+
|
27
|
+
# Opções de Status das Transações
|
28
|
+
STATUS = {
|
29
|
+
1 => :autorizado_e_confirmado,
|
30
|
+
2 => :autorizado,
|
31
|
+
3 => :nao_autorizado,
|
32
|
+
5 => :transacao_em_andamento,
|
33
|
+
8 => :aguardando_pagamento,
|
34
|
+
9 => :falha_na_operadora,
|
35
|
+
13 => :cancelado,
|
36
|
+
14 => :estornada,
|
37
|
+
15 => :em_analise_de_risco,
|
38
|
+
17 => :recusado_analise_de_risco,
|
39
|
+
18 => :falha_no_envio_para_analise_de_risco,
|
40
|
+
21 => :boleto_pago_a_menor,
|
41
|
+
22 => :boleto_pago_a_maior,
|
42
|
+
23 => :estorno_parcial,
|
43
|
+
24 => :estorno_nao_autorizado,
|
44
|
+
30 => :operacao_em_andamento,
|
45
|
+
31 => :transacao_ja_efetuada,
|
46
|
+
40 => :aguardando_cancelamento,
|
47
|
+
}
|
48
|
+
|
49
|
+
# Retornar array com os possíveis Status
|
50
|
+
def self.validos
|
51
|
+
STATUS.map{ |key, value| key }
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class Telefone
|
4
|
+
|
5
|
+
# Opções de Tipo de Telefone
|
6
|
+
TIPOS_DE_TELEFONE = {
|
7
|
+
:outros => 1,
|
8
|
+
:residencial => 2,
|
9
|
+
:comercial => 3,
|
10
|
+
:recados => 4,
|
11
|
+
:cobranca => 5,
|
12
|
+
:temporario => 6,
|
13
|
+
}
|
14
|
+
|
15
|
+
# Ver tabela “Tipos de Telefone”
|
16
|
+
# Simbolo - Valores pré-definidos [:outros, :residencial, :comercial, :recados, :cobranca, :temporario]
|
17
|
+
attr_accessor :codigo_tipo_telefone
|
18
|
+
|
19
|
+
# Telefone sem espaços ou traços
|
20
|
+
# Alfa Numérico - Até 10 caracteres
|
21
|
+
attr_accessor :telefone
|
22
|
+
|
23
|
+
# DDD do telefone
|
24
|
+
# Alfa Numérico - Até 3 caracteres
|
25
|
+
attr_accessor :ddd
|
26
|
+
|
27
|
+
# DDI do telefone
|
28
|
+
# Alfa Numérico - Até 3 caracteres
|
29
|
+
attr_accessor :ddi
|
30
|
+
|
31
|
+
# Validações do Rails 3
|
32
|
+
include ActiveModel::Validations
|
33
|
+
|
34
|
+
# Retornar array com os possíveis tipos de telefone
|
35
|
+
def self.validos
|
36
|
+
TIPOS_DE_TELEFONE.map{ |key, value| key }
|
37
|
+
end
|
38
|
+
|
39
|
+
# Validações
|
40
|
+
validates :codigo_tipo_telefone, inclusion: { in: SuperpayApi::Telefone.validos }, allow_nil: true
|
41
|
+
validates :telefone, length: { maximum: 10 }
|
42
|
+
validates :ddd, :ddi, length: { maximum: 3 }
|
43
|
+
|
44
|
+
# Nova instancia da classe Telefone
|
45
|
+
# @param [Hash] campos
|
46
|
+
def initialize(campos = {})
|
47
|
+
campos.each do |campo, valor|
|
48
|
+
if SuperpayApi::Telefone.public_instance_methods.include? "#{campo}=".to_sym
|
49
|
+
send "#{campo}=", valor
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
# Retornar o número do tipo de telefone
|
55
|
+
def codigo_tipo_telefone_to_request
|
56
|
+
TIPOS_DE_TELEFONE[self.codigo_tipo_telefone]
|
57
|
+
end
|
58
|
+
|
59
|
+
# Montar o Hash de tefone conforme o tipo dele no padrão utilizado pelo SuperPay
|
60
|
+
# tipo: [:comprador, :adicional_comprador, :entrega, :adicional_entrega]
|
61
|
+
def to_request tipo
|
62
|
+
telefone = {}
|
63
|
+
case tipo.to_sym
|
64
|
+
when :comprador then
|
65
|
+
telefone = {
|
66
|
+
codigo_tipo_telefone_comprador: self.codigo_tipo_telefone_to_request,
|
67
|
+
telefone_comprador: self.telefone,
|
68
|
+
ddd_comprador: self.ddd,
|
69
|
+
ddi_comprador: self.ddi,
|
70
|
+
}
|
71
|
+
when :adicional_comprador then
|
72
|
+
telefone = {
|
73
|
+
codigo_tipo_telefone_adicional_comprador: self.codigo_tipo_telefone_to_request,
|
74
|
+
telefone_adicional_comprador: self.telefone,
|
75
|
+
ddd_adicional_comprador: self.ddd,
|
76
|
+
ddi_adicional_comprador: self.ddi,
|
77
|
+
}
|
78
|
+
when :entrega then
|
79
|
+
telefone = {
|
80
|
+
codigo_tipo_telefone_entrega: self.codigo_tipo_telefone_to_request,
|
81
|
+
telefone_entrega: self.telefone,
|
82
|
+
ddd_entrega: self.ddd,
|
83
|
+
ddi_entrega: self.ddi,
|
84
|
+
}
|
85
|
+
when :adicional_entrega then
|
86
|
+
telefone = {
|
87
|
+
codigo_tipo_telefone_adicional_entrega: self.codigo_tipo_telefone_to_request,
|
88
|
+
telefone_adicional_entrega: self.telefone,
|
89
|
+
ddd_adicional_entrega: self.ddd,
|
90
|
+
ddi_adicional_entrega: self.ddi,
|
91
|
+
}
|
92
|
+
else
|
93
|
+
raise 'Tipo inválido.'
|
94
|
+
end
|
95
|
+
return telefone
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
99
|
+
end
|
@@ -0,0 +1,206 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module SuperpayApi
|
3
|
+
class Transacao
|
4
|
+
|
5
|
+
# Código que identifica a transação dentro do SuperPay
|
6
|
+
# Numérico - Até 8 dígitos
|
7
|
+
attr_accessor :numero_transacao
|
8
|
+
|
9
|
+
# Código da forma de pagamento. Ver tabela “Forma de Pagamento”
|
10
|
+
# Simbolo - Valores pré-definidos - Verifique classe SuperpayApi::FormaDePagamento
|
11
|
+
attr_accessor :codigo_forma_pagamento
|
12
|
+
|
13
|
+
# Valor da transação
|
14
|
+
# Sempre enviar o valor sem vírgula ou ponto, os dois últimos dígitos são sempre considerados como centavos.
|
15
|
+
# Numérico - Até 10 dígitos
|
16
|
+
attr_accessor :valor
|
17
|
+
|
18
|
+
# Valor do desconto da transação
|
19
|
+
# Sempre enviar o valor sem vírgula ou ponto, os dois últimos dígitos são sempre considerados como centavos.
|
20
|
+
# Numérico - Até 10 dígitos
|
21
|
+
attr_accessor :valor_desconto
|
22
|
+
|
23
|
+
# Valor da taxa de embarque
|
24
|
+
# Sempre enviar o valor sem vírgula ou ponto, os dois últimos dígitos são sempre considerados como centavos.
|
25
|
+
# Numérico - Até 10 dígitos
|
26
|
+
attr_accessor :taxa_embarque
|
27
|
+
|
28
|
+
# Quantidade de parcelas da transação. Verificar se forma de pagamento suporta parcelamento
|
29
|
+
# Numérico - Até 2 dígitos
|
30
|
+
attr_accessor :parcelas
|
31
|
+
|
32
|
+
# Nome do titular do cartão de crédito (Exatamente como escrito no cartão)
|
33
|
+
# Alfa Numérico - Até 16 caracteres
|
34
|
+
attr_accessor :nome_titular_cartao_credito
|
35
|
+
|
36
|
+
# Numero do cartão de crédito, sem espaços ou traços
|
37
|
+
# Numérico - Até 22 caracteres
|
38
|
+
attr_accessor :numero_cartao_credito
|
39
|
+
|
40
|
+
# Código de segurança do cartão (campo não é armazenado pelo SuperPay)
|
41
|
+
# Numérico - Até 4 caracteres
|
42
|
+
attr_accessor :codigo_seguranca
|
43
|
+
|
44
|
+
# Data de validade do cartão.
|
45
|
+
# Alfa Numérico - Até 7 caracteres - Formato mm/yyyy
|
46
|
+
attr_accessor :data_validade_cartao
|
47
|
+
|
48
|
+
# Data de validade do boleto.
|
49
|
+
# Alfa Numérico - Até 10 caracteres - Formato dd/mm/yyyy
|
50
|
+
attr_accessor :vencimento_boleto
|
51
|
+
|
52
|
+
# Para o modelo de pagamento redirect, O SuperPay redirecionará para essa URL em caso de transação *aprovada
|
53
|
+
# Alfa Numérico - Até 250 caracteres
|
54
|
+
attr_accessor :url_redirecionamento_pago
|
55
|
+
|
56
|
+
# Para o modelo de pagamento redirect, O SuperPay redirecionará para essa URL em caso de transação *reprovada
|
57
|
+
# Alfa Numérico - Até 250 caracteres
|
58
|
+
attr_accessor :url_redirecionamento_nao_pago
|
59
|
+
|
60
|
+
# Número do IP do usuário final/cliente.
|
61
|
+
# Alfa Numérico - Até 15 caracteres Formato xxx.xxx.xxx.xxx
|
62
|
+
attr_accessor :ip
|
63
|
+
|
64
|
+
# Campo Livre 1
|
65
|
+
# Alfa Numérico - Até 16 caracteres
|
66
|
+
attr_accessor :campo_livre1
|
67
|
+
|
68
|
+
# Campo Livre 2
|
69
|
+
# Alfa Numérico - Até 16 caracteres
|
70
|
+
attr_accessor :campo_livre2
|
71
|
+
|
72
|
+
# Campo Livre 3
|
73
|
+
# Alfa Numérico - Até 16 caracteres
|
74
|
+
attr_accessor :campo_livre3
|
75
|
+
|
76
|
+
# Campo Livre 4
|
77
|
+
# Alfa Numérico - Até 16 caracteres
|
78
|
+
attr_accessor :campo_livre4
|
79
|
+
|
80
|
+
# Campo Livre 5
|
81
|
+
# Alfa Numérico - Até 16 caracteres
|
82
|
+
attr_accessor :campo_livre5
|
83
|
+
|
84
|
+
# Informações para cobrança e entrega. Informações importantes para análise de fraude
|
85
|
+
# SuperpayApi::DadosUsuario
|
86
|
+
attr_accessor :dados_usuario_transacao
|
87
|
+
|
88
|
+
# Lista com Itens que estão sendo comprados. Informações importantes para análise de fraude e intermediários financeiros
|
89
|
+
# SuperpayApi::ItemPedido
|
90
|
+
attr_accessor :itens_do_pedido
|
91
|
+
|
92
|
+
# Validações do Rails 3
|
93
|
+
include ActiveModel::Validations
|
94
|
+
|
95
|
+
# Validações
|
96
|
+
validates :numero_transacao, :codigo_forma_pagamento, :valor, :valor_desconto, :taxa_embarque, :parcelas, :numero_cartao_credito,
|
97
|
+
:codigo_seguranca, numericality: true
|
98
|
+
validates :codigo_forma_pagamento, inclusion: { in: SuperpayApi::FormaDePagamento.validos }
|
99
|
+
validates :parcelas, length: { maximum: 2 }
|
100
|
+
validates :codigo_seguranca, length: { maximum: 4 }
|
101
|
+
validates :data_validade_cartao, length: { maximum: 7 }
|
102
|
+
validates :numero_transacao, length: { maximum: 8 }
|
103
|
+
validates :valor, :valor_desconto, :taxa_embarque, :vencimento_boleto, length: { maximum: 10 }
|
104
|
+
validates :ip, length: { maximum: 15 }
|
105
|
+
validates :nome_titular_cartao_credito, :campo_livre1, :campo_livre2, :campo_livre3, :campo_livre4, :campo_livre5, length: { maximum: 16 }
|
106
|
+
validates :numero_cartao_credito, length: { maximum: 22 }
|
107
|
+
validates :url_redirecionamento_pago, :url_redirecionamento_nao_pago, length: { maximum: 250 }
|
108
|
+
|
109
|
+
validates_each [:dados_usuario_transacao], allow_nil: true do |record, attr, value|
|
110
|
+
if value.is_a? SuperpayApi::DadosUsuario
|
111
|
+
if value.invalid?
|
112
|
+
value.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
113
|
+
end
|
114
|
+
else
|
115
|
+
record.errors.add(attr, 'deve ser um objeto SuperpayApi::DadosUsuario.')
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
validates_each [:itens_do_pedido], allow_nil: true do |record, attr, value|
|
120
|
+
if value.is_a? Array
|
121
|
+
value.each do |item_do_pedido|
|
122
|
+
if item_do_pedido.is_a? SuperpayApi::ItemPedido
|
123
|
+
if item_do_pedido.invalid?
|
124
|
+
item_do_pedido.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
125
|
+
end
|
126
|
+
else
|
127
|
+
record.errors.add(attr, 'deve ser um objeto SuperpayApi::ItemPedido.')
|
128
|
+
end
|
129
|
+
end
|
130
|
+
else
|
131
|
+
record.errors.add(attr, 'deve ser uma coleção (Array).')
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Nova instancia da classe Transacao
|
136
|
+
# @param [Hash] campos
|
137
|
+
def initialize(campos = {})
|
138
|
+
campos.each do |campo, valor|
|
139
|
+
if SuperpayApi::Transacao.public_instance_methods.include? "#{campo}=".to_sym
|
140
|
+
send "#{campo}=", valor
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
# Função para consultar transações
|
146
|
+
def consulta_transacao numero_transacao
|
147
|
+
resposta = web_service.consulta_transacao_completa numero_transacao
|
148
|
+
resposta
|
149
|
+
end
|
150
|
+
|
151
|
+
# Função para consultar transações
|
152
|
+
def self.consulta_transacao numero_transacao
|
153
|
+
self.new.consulta_transacao numero_transacao
|
154
|
+
end
|
155
|
+
|
156
|
+
# Função para realizar o pagamento de transações
|
157
|
+
def enviar_pagamento
|
158
|
+
resposta = web_service.pagamento_transacao_completa self
|
159
|
+
resposta
|
160
|
+
end
|
161
|
+
|
162
|
+
# Montar o Hash da transação no padrão utilizado pelo SuperPay
|
163
|
+
def to_request
|
164
|
+
transacao = {
|
165
|
+
numero_transacao: self.numero_transacao,
|
166
|
+
"IP" => self.ip,
|
167
|
+
codigo_forma_pagamento: self.codigo_forma_pagamento,
|
168
|
+
valor: self.valor,
|
169
|
+
valor_desconto: self.valor_desconto,
|
170
|
+
taxa_embarque: self.taxa_embarque,
|
171
|
+
parcelas: self.parcelas,
|
172
|
+
nome_titular_cartao_credito: self.nome_titular_cartao_credito,
|
173
|
+
numero_cartao_credito: self.numero_cartao_credito,
|
174
|
+
codigo_seguranca: self.codigo_seguranca,
|
175
|
+
data_validade_cartao: self.data_validade_cartao,
|
176
|
+
vencimento_boleto: self.vencimento_boleto,
|
177
|
+
url_redirecionamento_pago: self.url_redirecionamento_pago,
|
178
|
+
url_redirecionamento_nao_pago: self.url_redirecionamento_nao_pago,
|
179
|
+
campo_livre1: self.campo_livre1,
|
180
|
+
campo_livre2: self.campo_livre2,
|
181
|
+
campo_livre3: self.campo_livre3,
|
182
|
+
campo_livre4: self.campo_livre4,
|
183
|
+
campo_livre5: self.campo_livre5,
|
184
|
+
}
|
185
|
+
|
186
|
+
# Adicionar os parâmetros de configurações
|
187
|
+
transacao.merge! SuperpayApi.configuracoes_to_request
|
188
|
+
|
189
|
+
# Adicionar dados do usuário
|
190
|
+
transacao[:dados_usuario_transacao] = self.dados_usuario_transacao.to_request unless self.dados_usuario_transacao.blank?
|
191
|
+
|
192
|
+
# Adicionar itens do pedido
|
193
|
+
transacao[:itens_do_pedido] = self.itens_do_pedido.collect{ |i| i.to_request } unless self.itens_do_pedido.blank?
|
194
|
+
|
195
|
+
return transacao
|
196
|
+
end
|
197
|
+
|
198
|
+
private
|
199
|
+
|
200
|
+
# Acesso ao web_service
|
201
|
+
def web_service
|
202
|
+
@web_service ||= SuperpayApi::WebService.new
|
203
|
+
end
|
204
|
+
|
205
|
+
end
|
206
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'savon'
|
3
|
+
|
4
|
+
module SuperpayApi
|
5
|
+
class WebService
|
6
|
+
|
7
|
+
# Atributo para o cliente SOAP
|
8
|
+
attr_reader :savon_client
|
9
|
+
|
10
|
+
# Nova instancia da classe WebService
|
11
|
+
# Será considerado o ambiente informado nas configurações
|
12
|
+
def initialize
|
13
|
+
@savon_client = Savon.client(
|
14
|
+
wsdl: ::SuperpayApi.url,
|
15
|
+
env_namespace: :soapenv,
|
16
|
+
convert_request_keys_to: :lower_camelcase,
|
17
|
+
namespace_identifier: :pag,
|
18
|
+
namespaces: {
|
19
|
+
"xmlns:soapenv" => "http://schemas.xmlsoap.org/soap/envelope/",
|
20
|
+
"xmlns:pag" => "http://pagamentos.webservices.superpay.ernet.com.br/",
|
21
|
+
}
|
22
|
+
)
|
23
|
+
end
|
24
|
+
|
25
|
+
# Função que faz a requisição para consulta_transacao_completa
|
26
|
+
def consulta_transacao_completa(numero_transacao)
|
27
|
+
# Monta os parâmetros
|
28
|
+
params = helper.build_request_consulta_transacao_completa(numero_transacao)
|
29
|
+
|
30
|
+
# Faz a requisição para o wsdl
|
31
|
+
begin
|
32
|
+
retorno = @savon_client.call(:consulta_transacao_completa, message: params)
|
33
|
+
rescue Savon::SOAPFault => error
|
34
|
+
return helper.build_response_error(error)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Verifica se a retorno veio correta ou se deu problema
|
38
|
+
if retorno.blank?
|
39
|
+
return {error: true}
|
40
|
+
else
|
41
|
+
return helper.build_response_retorno(retorno)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# Função que faz a requisição para pagamento_transacao_completa
|
46
|
+
def pagamento_transacao_completa(transacao)
|
47
|
+
# Monta os parâmetros
|
48
|
+
params = helper.build_request_pagamento_transacao_completa(transacao)
|
49
|
+
|
50
|
+
# Faz a requisição para o wsdl
|
51
|
+
begin
|
52
|
+
retorno = @savon_client.call(:pagamento_transacao_completa, message: params)
|
53
|
+
rescue Savon::SOAPFault => error
|
54
|
+
return helper.build_response_error(error)
|
55
|
+
# return helper.build_response_error({error: error.to_hash[:fault][:faultstring]})
|
56
|
+
end
|
57
|
+
|
58
|
+
# Verifica se a retorno veio correta ou se deu problema
|
59
|
+
if retorno.blank?
|
60
|
+
return {error: true}
|
61
|
+
else
|
62
|
+
return helper.build_response_retorno(retorno)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
# Acesso ao helper
|
69
|
+
def helper
|
70
|
+
@helper ||= SuperpayApi::Helper.new
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
data/lib/superpay_api.rb
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'rubygems'
|
3
|
+
require 'active_model'
|
4
|
+
|
5
|
+
require "superpay_api/version"
|
6
|
+
require "superpay_api/configuracao"
|
7
|
+
require "superpay_api/helper"
|
8
|
+
require "superpay_api/web_service"
|
9
|
+
require "superpay_api/forma_de_pagamento"
|
10
|
+
require "superpay_api/status"
|
11
|
+
|
12
|
+
require "superpay_api/endereco"
|
13
|
+
require "superpay_api/telefone"
|
14
|
+
require "superpay_api/dados_usuario"
|
15
|
+
require "superpay_api/item_pedido"
|
16
|
+
require "superpay_api/transacao"
|
17
|
+
require "superpay_api/retorno"
|
18
|
+
|
19
|
+
# -*- encoding : utf-8 -*-
|
20
|
+
module SuperpayApi
|
21
|
+
extend SuperpayApi::Configuracao
|
22
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: superpay_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- QW3 Software & Marketing
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2016-07-12 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activemodel
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: savon
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '2.11'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '2.11'
|
41
|
+
description: Gem para utilização do SuperPay API disponibilizado pela empresa SuperPay
|
42
|
+
para integrar sua plataforma de forma segura e eficaz com as principais formas de
|
43
|
+
pagamento disponíveis no mercado.
|
44
|
+
email:
|
45
|
+
- contato@qw3.com.br
|
46
|
+
executables: []
|
47
|
+
extensions: []
|
48
|
+
extra_rdoc_files: []
|
49
|
+
files:
|
50
|
+
- lib/superpay_api.rb
|
51
|
+
- lib/superpay_api/configuracao.rb
|
52
|
+
- lib/superpay_api/dados_usuario.rb
|
53
|
+
- lib/superpay_api/endereco.rb
|
54
|
+
- lib/superpay_api/forma_de_pagamento.rb
|
55
|
+
- lib/superpay_api/helper.rb
|
56
|
+
- lib/superpay_api/item_pedido.rb
|
57
|
+
- lib/superpay_api/retorno.rb
|
58
|
+
- lib/superpay_api/status.rb
|
59
|
+
- lib/superpay_api/telefone.rb
|
60
|
+
- lib/superpay_api/transacao.rb
|
61
|
+
- lib/superpay_api/version.rb
|
62
|
+
- lib/superpay_api/web_service.rb
|
63
|
+
homepage: https://github.com/qw3/superpay_api
|
64
|
+
licenses:
|
65
|
+
- MIT
|
66
|
+
metadata: {}
|
67
|
+
post_install_message:
|
68
|
+
rdoc_options: []
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.9'
|
76
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
version: '0'
|
81
|
+
requirements: []
|
82
|
+
rubyforge_project:
|
83
|
+
rubygems_version: 2.4.1
|
84
|
+
signing_key:
|
85
|
+
specification_version: 4
|
86
|
+
summary: SuperPay API - Gateway de pagamento
|
87
|
+
test_files: []
|
88
|
+
has_rdoc:
|