superpay_api 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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:
|