redex 0.1.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/.gitignore +14 -0
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +105 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/helpers/configuration.rb +23 -0
- data/lib/redex.rb +14 -0
- data/lib/redex/request/base_request.rb +33 -0
- data/lib/redex/request/cancel_request.rb +29 -0
- data/lib/redex/request/query_request.rb +25 -0
- data/lib/redex/request/transaction_request.rb +62 -0
- data/lib/redex/response/base_response.rb +43 -0
- data/lib/redex/response/cancel_response.rb +14 -0
- data/lib/redex/response/query_response.rb +86 -0
- data/lib/redex/response/transaction_response.rb +19 -0
- data/lib/redex/version.rb +3 -0
- data/redex.gemspec +28 -0
- metadata +128 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 4cf86d74ee9fea2686018fceeb710d82307c04cc
|
4
|
+
data.tar.gz: b6724f7205af4724e07253e192eba751d6ce2cd3
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2aae59ffbc39d9a03ad04efcf110dfa79389fabddf8a614b6a5d680b372c322c6204b8a62263fbf93d66256166b86602fecebe94b8dd8b55bc3f4d94c1067905
|
7
|
+
data.tar.gz: 19db95288a1573e6c3c446eae92b5783c35c05c65b077ffec531e4ec038e917ac409cb4351bfa669f1572d155f9f256de602249783d8b6e8d2b350f78b797a25
|
data/.gitignore
ADDED
data/.rspec
ADDED
data/.travis.yml
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2017 REDEX
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
# Redex
|
2
|
+
|
3
|
+
Uma refatoração da gem de integração para o sistema de pagamentos [eRede](https://www.userede.com.br/nossos-produtos/e-rede/)
|
4
|
+
|
5
|
+
O objetivo desta gem é normalizar nomes de campos, permitir o uso de classes do ruby na chamada serviços e mascarar a comunicação com um servidor SOAP (utilizando a gem [canned_soap](http://github.com/gknedo/canned_soap))
|
6
|
+
|
7
|
+
## Funcionalidades
|
8
|
+
Resumo das operações suportadas pelo Redex.
|
9
|
+
|
10
|
+
### Transações de Crédito
|
11
|
+
|
12
|
+
Todas as transações com autorização (captura) automática são suportadas. Apesar de transações de pré-autorização (sem captura) automática serem suportadas, a trasanção de captura ainda não foi desenvolvida.
|
13
|
+
|
14
|
+
### Cancelamento
|
15
|
+
|
16
|
+
O cancelamento de transações de crédito são suportadas, mas assim como o serviço SOAP da eRede elas devem ser feitas no mesmo dia da captura. Transações de pré-autorização são suportadas e podem ser canceladas em até 29 dias da pré-autorização, após esse período elas são canceladas automaticamente
|
17
|
+
|
18
|
+
### Consulta
|
19
|
+
|
20
|
+
Consultas são suportadas.
|
21
|
+
|
22
|
+
## Funcionalidades não desenvolvidas ou em desenvolvimento
|
23
|
+
|
24
|
+
### Transações Autenticadas (3D Security)
|
25
|
+
|
26
|
+
Transações autenticadas, seja de débito ou crédito, ainda não são suportadas.
|
27
|
+
|
28
|
+
|
29
|
+
## Instalação
|
30
|
+
|
31
|
+
Adicione esta linha no seu Gemfile:
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
gem 'redex'
|
35
|
+
```
|
36
|
+
|
37
|
+
Então execute:
|
38
|
+
|
39
|
+
$ bundle
|
40
|
+
|
41
|
+
Para instalar sem o bundle:
|
42
|
+
|
43
|
+
$ gem install redex
|
44
|
+
|
45
|
+
## Utilização
|
46
|
+
|
47
|
+
### Guia Rápido
|
48
|
+
|
49
|
+
Todas as requisições suportadas são utilizadas via sua respectiva classe, que ficam dentro do modulo `Redex::Request`, elas são inicializadas como um objeto padrão do ruby e são executadas ao chamar o método `result` e retornaram objetos do tipo response, que são do módulo `Redex::Response`.
|
50
|
+
|
51
|
+
*Objetos do tipo Request executam o request somente na primeira chamada do método result!*
|
52
|
+
|
53
|
+
Exemplo de uso:
|
54
|
+
|
55
|
+
```ruby
|
56
|
+
request = Redex::Request::QueryRequest.new(transaction: 123456789)
|
57
|
+
response = request.result #Redex::Response::QueryResponse
|
58
|
+
response.credit_card_authorization_id
|
59
|
+
```
|
60
|
+
### Configuração
|
61
|
+
|
62
|
+
Antes de iniciar, é necessário configurar a autorização e a URL do servidor. Esta configuração pode ser sobrescrita em qualquer lugar do seu código.
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
Redex.configuration do |config|
|
66
|
+
config.secret_pv = 123456789 # Seu Numero de Filiacao
|
67
|
+
config.secret_token = "1a2b3c4d5f6f7g8h90" # Sua senha
|
68
|
+
config.service_url = 'https://scommerce.userede.com.br/example'
|
69
|
+
end
|
70
|
+
```
|
71
|
+
|
72
|
+
Por padrão o `service_url` vem configurado com o ambiente de testes do eRede.
|
73
|
+
|
74
|
+
### Transação de Crédito
|
75
|
+
|
76
|
+
Requests são feitas utilizando a classe `Redex::Request::TransactionRequest`.
|
77
|
+
|
78
|
+
| Redex | Tipo do Campo | Equivalente SOAP | Observações |
|
79
|
+
| --- | --- | --- | --- |
|
80
|
+
| order_id | String | NUMPEDIDO |
|
81
|
+
| amount | Integer ou Float | TOTAL
|
82
|
+
| card_number | Integer ou String | NRCARTAO |
|
83
|
+
| card_holder_name | String | PORTADOR |
|
84
|
+
| card_cvc | Integer ou String | CVC2 |
|
85
|
+
| card_expiration_month | Integer ou String | MÊS
|
86
|
+
| card_expiration_year | Integer ou String | ANO
|
87
|
+
| installments | Integer ou String | PARCELAS | Padrão: 1
|
88
|
+
| recorrence | Boolean | RECORRENTE | Padrão: false
|
89
|
+
| | | ORIGEM | Sempre será 01 (eRede)
|
90
|
+
| | | TRANSACAO | Calculado pela gem
|
91
|
+
|
92
|
+
|
93
|
+
## Desenvolvimento
|
94
|
+
|
95
|
+
Após clonar o repositório, execute `bin/setup` para instalar as dependências. Para rodar os testes execute `rake spec`. Você também pode executar `bin/console` para um console interativo.
|
96
|
+
|
97
|
+
Para instalar essa gem na sua máquina local execute `bundle exec rake install`. Para gerar uma nova versão atualize o arquivo `version.rb` e então execute `bundle exec rake release`, isto irá criar uma tag do git para a versão, faça o commit e o push do repositório, e então envie o arquivo `.gem` para [rubygems.org](https://rubygems.org).
|
98
|
+
|
99
|
+
## Contribua
|
100
|
+
|
101
|
+
Bug reports e pull requests são bem vindos no nosso GitHub at https://github.com/gknedo/redex. Este projeto visa ser um lugar seguro e receptivo para novos colaborados e é esperado que os contribuidores sigam o [Código de Conduta](http://contributor-covenant.org).
|
102
|
+
|
103
|
+
## License
|
104
|
+
|
105
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
data/bin/console
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require "bundler/setup"
|
4
|
+
require "redex"
|
5
|
+
|
6
|
+
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
+
# with your gem easier. You can also use a different console, if you like.
|
8
|
+
|
9
|
+
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
+
# require "pry"
|
11
|
+
# Pry.start
|
12
|
+
|
13
|
+
require "irb"
|
14
|
+
IRB.start(__FILE__)
|
data/bin/setup
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Configuration
|
2
|
+
|
3
|
+
def configuration
|
4
|
+
yield self
|
5
|
+
end
|
6
|
+
|
7
|
+
def define_setting(name, default = nil)
|
8
|
+
class_variable_set("@@#{name}", default)
|
9
|
+
define_class_method "#{name}=" do |value|
|
10
|
+
class_variable_set("@@#{name}", value)
|
11
|
+
end
|
12
|
+
define_class_method name do
|
13
|
+
class_variable_get("@@#{name}")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
def define_class_method(name, &block)
|
19
|
+
(class << self; self; end).instance_eval do
|
20
|
+
define_method name, &block
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/redex.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'canned_soap'
|
2
|
+
|
3
|
+
require "redex/version"
|
4
|
+
require "redex/request/base_request"
|
5
|
+
require "redex/response/base_response"
|
6
|
+
require "helpers/configuration"
|
7
|
+
|
8
|
+
module Redex
|
9
|
+
extend Configuration
|
10
|
+
|
11
|
+
define_setting :secret_pv
|
12
|
+
define_setting :secret_token
|
13
|
+
define_setting :service_url, 'https://scommerce.userede.com.br/Redecard.Komerci.External.WcfKomerci/KomerciWcf.svc'
|
14
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Redex::Request
|
2
|
+
class BaseRequest
|
3
|
+
def self.client
|
4
|
+
@client ||= CannedSoap::Client.new(Redex.service_url)
|
5
|
+
end
|
6
|
+
|
7
|
+
def authorization_params
|
8
|
+
{
|
9
|
+
Filiacao: Redex.secret_pv.to_s,
|
10
|
+
Senha: Redex.secret_token.to_s
|
11
|
+
}
|
12
|
+
end
|
13
|
+
|
14
|
+
def result
|
15
|
+
@result ||= do_request
|
16
|
+
end
|
17
|
+
|
18
|
+
def sanitize(field)
|
19
|
+
return nil if send(field).nil?
|
20
|
+
return "%.2f" % send(field) if [:amount].include?(field)
|
21
|
+
return "%02d" % send(field) if [:installments, :card_expiration_month, :origin].include?(field)
|
22
|
+
return card_expiration_year_sanitized if [:card_expiration_year].include?(field)
|
23
|
+
return send(field) ? "1" : "0" if [:recorrence].include?(field)
|
24
|
+
return send(field).to_s if [:order_id, :credit_card_authorization_id, :sequential_id, :transaction_id, :card_number].include?(field)
|
25
|
+
return send(field).strftime("%Y%m%d") if [:transaction_date].include?(field)
|
26
|
+
send(field)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
require 'redex/request/transaction_request'
|
32
|
+
require 'redex/request/cancel_request'
|
33
|
+
require 'redex/request/query_request'
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module Redex
|
2
|
+
module Request
|
3
|
+
class CancelRequest < BaseRequest
|
4
|
+
attr_accessor :transaction_date, :credit_card_authorization_id, :sequential_id, :transaction_id
|
5
|
+
|
6
|
+
def initialize(params = {})
|
7
|
+
@transaction_date = params[:transaction_date]
|
8
|
+
@credit_card_authorization_id = params[:credit_card_authorization_id]
|
9
|
+
@sequential_id = params[:sequential_id]
|
10
|
+
@transaction_id = params[:transaction_id]
|
11
|
+
end
|
12
|
+
|
13
|
+
def sanitized_fields
|
14
|
+
{
|
15
|
+
Data: sanitize(:transaction_date),
|
16
|
+
NumAutor: sanitize(:credit_card_authorization_id),
|
17
|
+
NumSqn: sanitize(:sequential_id),
|
18
|
+
Tid: sanitize(:transaction_id)
|
19
|
+
}.merge(authorization_params).sort.to_h.select { |k, v| !v.to_s.empty? }
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
def do_request
|
24
|
+
raw_response = BaseRequest.client.VoidTransactionTID(request: sanitized_fields)
|
25
|
+
Redex::Response::CancelResponse.new(raw_response.result)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Redex
|
2
|
+
module Request
|
3
|
+
class QueryRequest < BaseRequest
|
4
|
+
attr_accessor :order_id, :transaction_id
|
5
|
+
|
6
|
+
def initialize(params = {})
|
7
|
+
@order_id = params[:order_id]
|
8
|
+
@transaction_id = params[:transaction_id]
|
9
|
+
end
|
10
|
+
|
11
|
+
def sanitized_fields
|
12
|
+
{
|
13
|
+
NumPedido: sanitize(:order_id),
|
14
|
+
Tid: sanitize(:transaction_id),
|
15
|
+
}.merge(authorization_params).sort.to_h.select { |k, v| !v.to_s.empty? }
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
def do_request
|
20
|
+
raw_response = BaseRequest.client.Query(request: sanitized_fields)
|
21
|
+
Redex::Response::QueryResponse.new(raw_response.result)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Redex
|
2
|
+
module Request
|
3
|
+
class TransactionRequest < BaseRequest
|
4
|
+
attr_accessor :order_id, :amount, :installments, :invoice_note,
|
5
|
+
:card_number, :card_cvc, :card_holder_name,
|
6
|
+
:card_expiration_month, :card_expiration_year,
|
7
|
+
:auto_capture
|
8
|
+
attr_reader :recorrence, :origin
|
9
|
+
|
10
|
+
def initialize(params = {})
|
11
|
+
@order_id = params[:order_id]
|
12
|
+
@amount = params[:amount]
|
13
|
+
@installments = params.fetch(:installments, 1)
|
14
|
+
@invoice_note = params[:invoice_note]
|
15
|
+
@card_number = params[:card_number]
|
16
|
+
@card_cvc = params[:card_cvc]
|
17
|
+
@card_holder_name = params[:card_holder_name]
|
18
|
+
@card_expiration_month = params[:card_expiration_month]
|
19
|
+
@card_expiration_year = params[:card_expiration_year]
|
20
|
+
@auto_capture = params.fetch(:auto_capture, true)
|
21
|
+
@recorrence = params.fetch(:recorrence, false)
|
22
|
+
@origin = 1
|
23
|
+
end
|
24
|
+
|
25
|
+
def sanitized_fields
|
26
|
+
{
|
27
|
+
NumPedido: sanitize(:order_id),
|
28
|
+
Total: sanitize(:amount),
|
29
|
+
Parcelas: sanitize(:installments),
|
30
|
+
IdentificacaoFatura: sanitize(:invoice_note),
|
31
|
+
Nrcartao: sanitize(:card_number),
|
32
|
+
Cvc2: sanitize(:card_cvc),
|
33
|
+
Portador: sanitize(:card_holder_name),
|
34
|
+
Mes: sanitize(:card_expiration_month),
|
35
|
+
Ano: sanitize(:card_expiration_year),
|
36
|
+
Recorrente: sanitize(:recorrence),
|
37
|
+
Origem: sanitize(:origin),
|
38
|
+
Transacao: transaction_type
|
39
|
+
}.merge(authorization_params).sort.to_h.select { |k, v| !v.to_s.empty? }
|
40
|
+
end
|
41
|
+
|
42
|
+
private
|
43
|
+
|
44
|
+
def do_request
|
45
|
+
raw_response = BaseRequest.client.GetAuthorizedCredit(request: sanitized_fields)
|
46
|
+
Redex::Response::TransactionResponse.new(raw_response.result)
|
47
|
+
end
|
48
|
+
|
49
|
+
def transaction_type
|
50
|
+
return "74" unless @auto_capture
|
51
|
+
return "08" if installments > 1
|
52
|
+
"04"
|
53
|
+
end
|
54
|
+
|
55
|
+
def card_expiration_year_sanitized
|
56
|
+
year = card_expiration_year
|
57
|
+
year += 2000 if year < 100
|
58
|
+
year.to_s
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Redex
|
2
|
+
module Response
|
3
|
+
class BaseResponse
|
4
|
+
attr_reader :raw, :code, :message, :sequential_id, :transaction_id
|
5
|
+
|
6
|
+
def initialize(raw_response)
|
7
|
+
@raw = clear(raw_response)
|
8
|
+
end
|
9
|
+
|
10
|
+
def clear(httpi_result)
|
11
|
+
httpi_result = Hash[httpi_result.map { |k, v| [k.to_sym, v] }]
|
12
|
+
httpi_result.select! {|k,v| v != [{"i:nil"=>"true"}]}
|
13
|
+
httpi_result.each { |k, v| httpi_result[k] = v.first }
|
14
|
+
end
|
15
|
+
|
16
|
+
def code
|
17
|
+
@code ||= @raw[:CodRet].to_i
|
18
|
+
end
|
19
|
+
|
20
|
+
def message
|
21
|
+
@message ||= @raw[:Msgret]
|
22
|
+
end
|
23
|
+
|
24
|
+
def sequential_id
|
25
|
+
@sequential_id ||= @raw[:NumSqn].to_i
|
26
|
+
end
|
27
|
+
|
28
|
+
def transaction_id
|
29
|
+
@transaction_id ||= @raw[:Tid].to_i
|
30
|
+
end
|
31
|
+
|
32
|
+
def datetime_sanitize(raw_date, raw_time)
|
33
|
+
if raw_date && raw_time
|
34
|
+
DateTime.strptime(raw_date + raw_time + '-03:00', '%Y%m%d%H:%M:%S%z')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
require 'redex/response/transaction_response'
|
42
|
+
require 'redex/response/cancel_response'
|
43
|
+
require 'redex/response/query_response'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Redex
|
2
|
+
module Response
|
3
|
+
class CancelResponse < BaseResponse
|
4
|
+
attr_reader :canceled_at
|
5
|
+
def initialize(httpi_response)
|
6
|
+
super(httpi_response)
|
7
|
+
end
|
8
|
+
|
9
|
+
def canceled_at
|
10
|
+
@canceled_at ||= datetime_sanitize(@raw[:Data], @raw[:Hora])
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,86 @@
|
|
1
|
+
module Redex
|
2
|
+
module Response
|
3
|
+
class QueryResponse < BaseResponse
|
4
|
+
attr_reader :canceled_at, :amount, :transaction_type, :installments, :order_id,
|
5
|
+
:card_number, :transaction_id, :card_expiration_month, :card_holder_name,
|
6
|
+
:invoice_note, :origin, :status, :transaction_created_at, :credit_card_authorization_id,
|
7
|
+
:code, :message
|
8
|
+
def initialize(httpi_response)
|
9
|
+
super(httpi_response["REGISTRO"])
|
10
|
+
end
|
11
|
+
|
12
|
+
def amount
|
13
|
+
@amount ||= @raw[:TOTAL].to_f
|
14
|
+
end
|
15
|
+
|
16
|
+
def transaction_type
|
17
|
+
@transaction_type ||= @raw[:TRANSACAO].to_f
|
18
|
+
end
|
19
|
+
|
20
|
+
def installments
|
21
|
+
@installments ||= @raw[:PARCELAS].to_f
|
22
|
+
end
|
23
|
+
|
24
|
+
def order_id
|
25
|
+
@order_id ||= @raw[:NUMPEDIDO]
|
26
|
+
end
|
27
|
+
|
28
|
+
def card_number
|
29
|
+
@card_number ||= @raw[:NR_CARTAO]
|
30
|
+
end
|
31
|
+
|
32
|
+
def sequential_id
|
33
|
+
@sequential_id ||= @raw[:NUMSQN].to_i
|
34
|
+
end
|
35
|
+
|
36
|
+
def card_expiration_month
|
37
|
+
@card_expiration_month ||= @raw[:MES].to_i
|
38
|
+
end
|
39
|
+
|
40
|
+
def invoice_note
|
41
|
+
@invoice_note ||= @raw[:IDENTIFICACAOFATURA]
|
42
|
+
end
|
43
|
+
|
44
|
+
def card_holder_name
|
45
|
+
@card_holder_name ||= @raw[:NOM_PORTADOR]
|
46
|
+
end
|
47
|
+
|
48
|
+
def origin
|
49
|
+
@origin ||= @raw[:ORIGEM].to_i
|
50
|
+
end
|
51
|
+
|
52
|
+
def status
|
53
|
+
@status ||= @raw[:STATUS].to_i
|
54
|
+
end
|
55
|
+
|
56
|
+
def code
|
57
|
+
@code ||= @raw[:COD_RET].to_i
|
58
|
+
end
|
59
|
+
|
60
|
+
def message
|
61
|
+
@message ||= @raw[:MSG_RET]
|
62
|
+
end
|
63
|
+
|
64
|
+
def credit_card_authorization_id
|
65
|
+
@credit_card_authorization_id ||= @raw[:NUMAUTOR].to_i
|
66
|
+
end
|
67
|
+
|
68
|
+
def transaction_created_at
|
69
|
+
@transaction_created_at ||= datetime_sanitize(@raw[:DATA], @raw[:HORA])
|
70
|
+
end
|
71
|
+
|
72
|
+
def transaction_canceled_at
|
73
|
+
@transaction_canceled_at ||= datetime_sanitize(@raw[:DATA], "00:00:00")
|
74
|
+
end
|
75
|
+
|
76
|
+
|
77
|
+
def clear(httpi_result)
|
78
|
+
httpi_result = httpi_result.first
|
79
|
+
httpi_result.delete("AVS")
|
80
|
+
httpi_result = Hash[httpi_result.map { |k, v| [k.to_sym, v] }]
|
81
|
+
httpi_result.select! {|k,v| v != [{}] && v!= [{"i:nil"=>"true"}]}
|
82
|
+
httpi_result.each { |k, v| httpi_result[k] = v.first }
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Redex
|
2
|
+
module Response
|
3
|
+
class TransactionResponse < BaseResponse
|
4
|
+
attr_reader :order_id, :created_at, :credit_card_authorization_id
|
5
|
+
|
6
|
+
def order_id
|
7
|
+
@order_id ||= @raw[:NumPedido]
|
8
|
+
end
|
9
|
+
|
10
|
+
def credit_card_authorization_id
|
11
|
+
@credit_card_authorization_id ||= @raw[:NumAutor].to_i
|
12
|
+
end
|
13
|
+
|
14
|
+
def created_at
|
15
|
+
@created_at ||= datetime_sanitize(@raw[:Data], @raw[:Hora])
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/redex.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "redex/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "redex"
|
8
|
+
spec.version = Redex::VERSION
|
9
|
+
spec.authors = ["Ateliê de Software - Webgoal", "Aluan Henrique" "Gustavo Canedo"]
|
10
|
+
spec.email = ["contato@atelie.software"]
|
11
|
+
|
12
|
+
spec.summary = %q{Uma gem para integração com o sistema de pagamentos eRede}
|
13
|
+
spec.homepage = "https://github.com/webgoal/redex"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
|
+
f.match(%r{^(test|spec|features)/})
|
18
|
+
end
|
19
|
+
|
20
|
+
spec.bindir = "exe"
|
21
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
22
|
+
spec.require_paths = ["lib"]
|
23
|
+
|
24
|
+
spec.add_development_dependency "bundler", "~> 1.15"
|
25
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
26
|
+
spec.add_development_dependency "rspec", "~> 3.0"
|
27
|
+
spec.add_dependency "canned_soap", "~>0.1", ">=0.1.2"
|
28
|
+
end
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: redex
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Ateliê de Software - Webgoal
|
8
|
+
- Aluan HenriqueGustavo Canedo
|
9
|
+
autorequire:
|
10
|
+
bindir: exe
|
11
|
+
cert_chain: []
|
12
|
+
date: 2017-08-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: '1.15'
|
21
|
+
type: :development
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: '1.15'
|
28
|
+
- !ruby/object:Gem::Dependency
|
29
|
+
name: rake
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: '10.0'
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '10.0'
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: rspec
|
44
|
+
requirement: !ruby/object:Gem::Requirement
|
45
|
+
requirements:
|
46
|
+
- - "~>"
|
47
|
+
- !ruby/object:Gem::Version
|
48
|
+
version: '3.0'
|
49
|
+
type: :development
|
50
|
+
prerelease: false
|
51
|
+
version_requirements: !ruby/object:Gem::Requirement
|
52
|
+
requirements:
|
53
|
+
- - "~>"
|
54
|
+
- !ruby/object:Gem::Version
|
55
|
+
version: '3.0'
|
56
|
+
- !ruby/object:Gem::Dependency
|
57
|
+
name: canned_soap
|
58
|
+
requirement: !ruby/object:Gem::Requirement
|
59
|
+
requirements:
|
60
|
+
- - "~>"
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: '0.1'
|
63
|
+
- - ">="
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: 0.1.2
|
66
|
+
type: :runtime
|
67
|
+
prerelease: false
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - "~>"
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '0.1'
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.1.2
|
76
|
+
description:
|
77
|
+
email:
|
78
|
+
- contato@atelie.software
|
79
|
+
executables: []
|
80
|
+
extensions: []
|
81
|
+
extra_rdoc_files: []
|
82
|
+
files:
|
83
|
+
- ".gitignore"
|
84
|
+
- ".rspec"
|
85
|
+
- ".travis.yml"
|
86
|
+
- Gemfile
|
87
|
+
- LICENSE.txt
|
88
|
+
- README.md
|
89
|
+
- Rakefile
|
90
|
+
- bin/console
|
91
|
+
- bin/setup
|
92
|
+
- lib/helpers/configuration.rb
|
93
|
+
- lib/redex.rb
|
94
|
+
- lib/redex/request/base_request.rb
|
95
|
+
- lib/redex/request/cancel_request.rb
|
96
|
+
- lib/redex/request/query_request.rb
|
97
|
+
- lib/redex/request/transaction_request.rb
|
98
|
+
- lib/redex/response/base_response.rb
|
99
|
+
- lib/redex/response/cancel_response.rb
|
100
|
+
- lib/redex/response/query_response.rb
|
101
|
+
- lib/redex/response/transaction_response.rb
|
102
|
+
- lib/redex/version.rb
|
103
|
+
- redex.gemspec
|
104
|
+
homepage: https://github.com/webgoal/redex
|
105
|
+
licenses:
|
106
|
+
- MIT
|
107
|
+
metadata: {}
|
108
|
+
post_install_message:
|
109
|
+
rdoc_options: []
|
110
|
+
require_paths:
|
111
|
+
- lib
|
112
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
118
|
+
requirements:
|
119
|
+
- - ">="
|
120
|
+
- !ruby/object:Gem::Version
|
121
|
+
version: '0'
|
122
|
+
requirements: []
|
123
|
+
rubyforge_project:
|
124
|
+
rubygems_version: 2.6.12
|
125
|
+
signing_key:
|
126
|
+
specification_version: 4
|
127
|
+
summary: Uma gem para integração com o sistema de pagamentos eRede
|
128
|
+
test_files: []
|