getnet_api 0.1.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/.gitignore +53 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +33 -0
- data/LICENSE +21 -0
- data/README.md +195 -0
- data/Rakefile +2 -0
- data/getnet_api.gemspec +27 -0
- data/lib/getnet_api/address.rb +79 -0
- data/lib/getnet_api/base.rb +64 -0
- data/lib/getnet_api/boleto.rb +62 -0
- data/lib/getnet_api/card.rb +65 -0
- data/lib/getnet_api/card_token.rb +28 -0
- data/lib/getnet_api/card_verification.rb +32 -0
- data/lib/getnet_api/configure.rb +105 -0
- data/lib/getnet_api/credit.rb +88 -0
- data/lib/getnet_api/customer.rb +135 -0
- data/lib/getnet_api/order.rb +50 -0
- data/lib/getnet_api/payment.rb +114 -0
- data/lib/getnet_api/version.rb +9 -0
- data/lib/getnet_api.rb +23 -0
- metadata +80 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5aab4ff1ccb3f001c28e65c81e62dd72fa8baa7c
|
4
|
+
data.tar.gz: b7bba3dd819473f70285ed51a13ba71bb2e23ed0
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: aaff9d29f48ccdfd366be7f611a24dff5d693a87eee4f3088309f7633f2ccba1f24e9be6ea7832324a4d86aa7c89027ac646cca5884e9088ef8d76474463bfa3
|
7
|
+
data.tar.gz: 8d63931e1fa248e26883488300c54d62838ef7647d11cfa4c1012ca32bbef14dc4b52fcd2d1fb3046e23be4cce2fbddc88c6c9131d2f571e72db94de2cc445fc
|
data/.gitignore
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
4
|
+
/coverage/
|
5
|
+
/InstalledFiles
|
6
|
+
/pkg/
|
7
|
+
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
11
|
+
/tmp/
|
12
|
+
|
13
|
+
# Used by dotenv library to load environment variables.
|
14
|
+
# .env
|
15
|
+
|
16
|
+
## Specific to RubyMotion:
|
17
|
+
.dat*
|
18
|
+
.repl_history
|
19
|
+
build/
|
20
|
+
*.bridgesupport
|
21
|
+
build-iPhoneOS/
|
22
|
+
build-iPhoneSimulator/
|
23
|
+
|
24
|
+
## Specific to RubyMotion (use of CocoaPods):
|
25
|
+
#
|
26
|
+
# We recommend against adding the Pods directory to your .gitignore. However
|
27
|
+
# you should judge for yourself, the pros and cons are mentioned at:
|
28
|
+
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
|
29
|
+
#
|
30
|
+
# vendor/Pods/
|
31
|
+
|
32
|
+
## Documentation cache and generated files:
|
33
|
+
/.yardoc/
|
34
|
+
/_yardoc/
|
35
|
+
/doc/
|
36
|
+
/rdoc/
|
37
|
+
|
38
|
+
## Environment normalization:
|
39
|
+
/.bundle/
|
40
|
+
/vendor/bundle
|
41
|
+
/lib/bundler/man/
|
42
|
+
|
43
|
+
# for a library or gem, you might want to ignore these files since the code is
|
44
|
+
# intended to run in multiple environments; otherwise, check them in:
|
45
|
+
# Gemfile.lock
|
46
|
+
# .ruby-version
|
47
|
+
# .ruby-gemset
|
48
|
+
|
49
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
50
|
+
.rvmrc
|
51
|
+
|
52
|
+
|
53
|
+
to_do
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
getnet_api (0.1.0)
|
5
|
+
rest-client
|
6
|
+
|
7
|
+
GEM
|
8
|
+
remote: https://rubygems.org/
|
9
|
+
specs:
|
10
|
+
domain_name (0.5.20180417)
|
11
|
+
unf (>= 0.0.5, < 1.0.0)
|
12
|
+
http-cookie (1.0.3)
|
13
|
+
domain_name (~> 0.5)
|
14
|
+
mime-types (3.2.2)
|
15
|
+
mime-types-data (~> 3.2015)
|
16
|
+
mime-types-data (3.2018.0812)
|
17
|
+
netrc (0.11.0)
|
18
|
+
rest-client (2.0.2)
|
19
|
+
http-cookie (>= 1.0.2, < 2.0)
|
20
|
+
mime-types (>= 1.16, < 4.0)
|
21
|
+
netrc (~> 0.8)
|
22
|
+
unf (0.1.4)
|
23
|
+
unf_ext
|
24
|
+
unf_ext (0.0.7.5)
|
25
|
+
|
26
|
+
PLATFORMS
|
27
|
+
ruby
|
28
|
+
|
29
|
+
DEPENDENCIES
|
30
|
+
getnet_api!
|
31
|
+
|
32
|
+
BUNDLED WITH
|
33
|
+
1.16.4
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2018 QW3 - Software, Marketing e Consultoria
|
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 all
|
13
|
+
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 THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
# Gem Getnet API - Meios de Pagamento
|
2
|
+
|
3
|
+
## Versão Beta
|
4
|
+
|
5
|
+
Gem para utilização dos meios de pagamento [Getnet](https://site.getnet.com.br/) - Uma empresa Santander para integrar sua plataforma de forma segura e eficaz com as principais formas de pagamento disponíveis no mercado.
|
6
|
+
|
7
|
+
Acesso a documentação de desenvolvimento da [Getnet](https://developers.getnet.com.br/)
|
8
|
+
|
9
|
+
## Instalando
|
10
|
+
|
11
|
+
### Gemfile
|
12
|
+
|
13
|
+
Adicione esta linha ao Gemfile do seu aplicativo:
|
14
|
+
|
15
|
+
```ruby
|
16
|
+
gem 'getnet_api'
|
17
|
+
```
|
18
|
+
|
19
|
+
- Execute o comando `bundle install`.
|
20
|
+
|
21
|
+
### Instalação direta
|
22
|
+
|
23
|
+
```ruby
|
24
|
+
gem install getnet_api
|
25
|
+
```
|
26
|
+
|
27
|
+
## Configuração
|
28
|
+
|
29
|
+
Para fazer a autenticação, você precisará configurar as credenciais da Getnet. Crie o arquivo `config/initializers/getnet_api.rb` com o conteúdo abaixo.
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
GetnetApi.configure do |config|
|
33
|
+
|
34
|
+
#
|
35
|
+
# Opções de ambiente
|
36
|
+
# [:sandbox, :homologacao, :producao]
|
37
|
+
config.ambiente = :producao
|
38
|
+
|
39
|
+
#
|
40
|
+
# Código que identifica o seller_id dentro da Getnet
|
41
|
+
# Enviado pela Getnet
|
42
|
+
config.seller_id = '5c89ec4a-db89-45a6-8c96-5b0b72907ef5'
|
43
|
+
|
44
|
+
#
|
45
|
+
# Código que identifica o client_id dentro da Getnet
|
46
|
+
# Enviado pela Getnet
|
47
|
+
config.client_id = 'f43f4b25-fd05-420a-bffc-0dc85428ebd0'
|
48
|
+
|
49
|
+
#
|
50
|
+
# Código que identifica o client_secret dentro da Getnet
|
51
|
+
# Enviado pela Getnet
|
52
|
+
config.client_secret = '31e285f9-5d97-4370-9553-326310ca8b97'
|
53
|
+
|
54
|
+
end
|
55
|
+
```
|
56
|
+
|
57
|
+
## Pagamentos
|
58
|
+
|
59
|
+
Nesse endpoint serão recebidos dados para os pagamentos.
|
60
|
+
|
61
|
+
|
62
|
+
### Montar [Endereço](http://www.rubydoc.info/github/qw3/superpay_api/GetnetApi/Address)
|
63
|
+
|
64
|
+
```ruby
|
65
|
+
obj_endereco = GetnetApi::Address.new ({
|
66
|
+
street: "Rua Dom Pedro II",
|
67
|
+
number: "1330",
|
68
|
+
district: "Vila Monteiro (Gleba I)",
|
69
|
+
complement: "Sala A",
|
70
|
+
city: "São Carlos",
|
71
|
+
state: "SP",
|
72
|
+
postal_code: "13560320",
|
73
|
+
})
|
74
|
+
```
|
75
|
+
|
76
|
+
### Montar [Cliente](http://www.rubydoc.info/github/qw3/superpay_api/GetnetApi/Customer)
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
obj_cliente = GetnetApi::Customer.new ({
|
80
|
+
customer_id: 1,
|
81
|
+
first_name: "Leandro",
|
82
|
+
last_name: "Falcão",
|
83
|
+
name: "Leandro Falcão",
|
84
|
+
document_type: :pessoa_fisica,
|
85
|
+
documento: "999.999.999-9",
|
86
|
+
email: "contato@qw3.com.br",
|
87
|
+
phone_number: "1634166404",
|
88
|
+
celphone_number: "16955555555",
|
89
|
+
endereco: obj_endereco, # Objeto da classe GetnetApi::Address
|
90
|
+
})
|
91
|
+
```
|
92
|
+
|
93
|
+
### Montar [Pedido](http://www.rubydoc.info/github/qw3/superpay_api/GetnetApi/Order)
|
94
|
+
|
95
|
+
```ruby
|
96
|
+
obj_pedido = GetnetApi::Order.new ({
|
97
|
+
order_id: "123456",
|
98
|
+
sales_tax: 12,
|
99
|
+
product_type: "phisical_goods"
|
100
|
+
})
|
101
|
+
```
|
102
|
+
|
103
|
+
---
|
104
|
+
|
105
|
+
### Montar [Pagamento](http://www.rubydoc.info/github/qw3/superpay_api/GetnetApi/Payment)
|
106
|
+
|
107
|
+
```ruby
|
108
|
+
obj_pagamento = GetnetApi::Payment.new ({
|
109
|
+
amount: 100, # Quantidade em centavos
|
110
|
+
order: obj_pedido, # Objeto da classe GetnetApi::Order
|
111
|
+
customer: obj_cliente, # Objeto da classe GetnetApi::Customer
|
112
|
+
billing_address: obj_endereco, # Objeto da classe GetnetApi::Address
|
113
|
+
})
|
114
|
+
```
|
115
|
+
## Criando um pagamento na GetNet do tipo Credit
|
116
|
+
|
117
|
+
### Montar [Cartão](http://www.rubydoc.info/github/qw3/superpay_api/GetnetApi/Credit)
|
118
|
+
|
119
|
+
```ruby
|
120
|
+
obj_credit = GetnetApi::Credit.new ({
|
121
|
+
delayed: false,
|
122
|
+
authenticated: false,
|
123
|
+
pre_authorization: false,
|
124
|
+
save_card_data: false,
|
125
|
+
transaction_type: 'FULL',
|
126
|
+
number_installments: 1,
|
127
|
+
soft_descriptor: '',
|
128
|
+
dynamic_mcc: ''
|
129
|
+
})
|
130
|
+
```
|
131
|
+
|
132
|
+
```ruby
|
133
|
+
# No Caso de pagamento com Cartão de Credito
|
134
|
+
# GetnetApi::Payment.create(GetnetApi::Payment, GetnetApi::Credit, tipo)
|
135
|
+
novo_pagamento = GetnetApi::Payment.create obj_pagamento, obj_credito, :credit
|
136
|
+
```
|
137
|
+
|
138
|
+
---
|
139
|
+
|
140
|
+
## Criando um pagamento na GetNet do tipo Boleto
|
141
|
+
|
142
|
+
### Montar [Boleto](http://www.rubydoc.info/github/qw3/superpay_api/GetnetApi/Boleto)
|
143
|
+
|
144
|
+
```ruby
|
145
|
+
obj_boleto = GetnetApi::Boleto.new ({
|
146
|
+
our_number: "000001946598",
|
147
|
+
document_number: "170500000019763",
|
148
|
+
expiration_date: "16/11/2017",
|
149
|
+
instructions: "Não receber após o vencimento",
|
150
|
+
provider: "santander"
|
151
|
+
})
|
152
|
+
```
|
153
|
+
|
154
|
+
```ruby
|
155
|
+
# No Caso de pagamento de Boleto
|
156
|
+
# GetnetApi::Payment.create(GetnetApi::Payment, GetnetApi::Boleto, tipo)
|
157
|
+
novo_pagamento = GetnetApi::Payment.create obj_pagamento, obj_boleto, :boleto
|
158
|
+
```
|
159
|
+
|
160
|
+
---
|
161
|
+
|
162
|
+
|
163
|
+
## Autor
|
164
|
+
|
165
|
+
- [QW3 Software & Marketing](http://qw3.com.br)
|
166
|
+
- [Leandro dos Santos Falcão](https://www.linkedin.com/in/lsfalcao)
|
167
|
+
- [Victor Barreiros](www.linkedin.com/in/victor-barreiros)
|
168
|
+
|
169
|
+
## Copyright
|
170
|
+
|
171
|
+
[QW3 Software & Marketing](http://qw3.com.br)
|
172
|
+
|
173
|
+

|
174
|
+
|
175
|
+
MIT License
|
176
|
+
|
177
|
+
Copyright (c) 2018 QW3 - Software, Marketing e Consultoria
|
178
|
+
|
179
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
180
|
+
of this software and associated documentation files (the "Software"), to deal
|
181
|
+
in the Software without restriction, including without limitation the rights
|
182
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
183
|
+
copies of the Software, and to permit persons to whom the Software is
|
184
|
+
furnished to do so, subject to the following conditions:
|
185
|
+
|
186
|
+
The above copyright notice and this permission notice shall be included in all
|
187
|
+
copies or substantial portions of the Software.
|
188
|
+
|
189
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
190
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
191
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
192
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
193
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
194
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
195
|
+
SOFTWARE.
|
data/Rakefile
ADDED
data/getnet_api.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'getnet_api/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "getnet_api"
|
8
|
+
spec.version = GetnetApi::Version::STRING
|
9
|
+
spec.platform = Gem::Platform::RUBY
|
10
|
+
spec.authors = ["QW3 Software & Marketing"]
|
11
|
+
spec.email = ["contato@qw3.com.br"]
|
12
|
+
spec.summary = "Getnet API - Meios de Pagamento"
|
13
|
+
spec.description = "Gem para utilização dos meios de pagamento Getnet - Uma empresa Santander para integrar sua plataforma de forma segura e eficaz com as principais formas de pagamento disponíveis no mercado."
|
14
|
+
spec.homepage = "https://github.com/qw3/getnet_api"
|
15
|
+
spec.license = "MIT"
|
16
|
+
|
17
|
+
spec.files = `git ls-files`.split($/)
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
|
21
|
+
spec.require_paths = ["lib"]
|
22
|
+
|
23
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 1.9")
|
24
|
+
|
25
|
+
spec.add_dependency 'rest-client', '~> 0'
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class Address
|
4
|
+
|
5
|
+
# Endereço (Logradouro)
|
6
|
+
# Alfa Numérico - Até 60 caracteres
|
7
|
+
attr_accessor :street
|
8
|
+
|
9
|
+
# Número do logradouro
|
10
|
+
# Alfa Numérico - Até 10 caracteres
|
11
|
+
attr_accessor :number
|
12
|
+
|
13
|
+
# Complemento do endereço comprador
|
14
|
+
# Alfa Numérico - Até 60 caracteres
|
15
|
+
attr_accessor :complement
|
16
|
+
|
17
|
+
# Bairro do logradouro
|
18
|
+
# Alfa Numérico - Até 40 caracteres
|
19
|
+
attr_accessor :district
|
20
|
+
|
21
|
+
# Cidade do logradouro
|
22
|
+
# Alfa Numérico - Até 40 caracteres
|
23
|
+
attr_accessor :city
|
24
|
+
|
25
|
+
# Estado do logradouro (UF)
|
26
|
+
# Alfa Numérico - Até 20 caracteres
|
27
|
+
attr_accessor :state
|
28
|
+
|
29
|
+
# País do logradouro
|
30
|
+
# Alfa Numérico - Até 20 caracteres
|
31
|
+
attr_accessor :country
|
32
|
+
|
33
|
+
# Código Postal, CEP no Brasil ou ZIP nos Estados Unidos. (sem máscara)
|
34
|
+
# Alfa Numérico - Até 10 caracteres
|
35
|
+
attr_accessor :postal_code
|
36
|
+
|
37
|
+
# Definir country
|
38
|
+
def country
|
39
|
+
@country ||= "Brasil"
|
40
|
+
end
|
41
|
+
|
42
|
+
# Validações do Rails 3
|
43
|
+
include ActiveModel::Validations
|
44
|
+
|
45
|
+
# Validações
|
46
|
+
validates :street, length: { maximum: 60 }
|
47
|
+
validates :number, length: { maximum: 10 }
|
48
|
+
validates :complement, length: { maximum: 60 }
|
49
|
+
validates :district, :city, length: { maximum: 40 }
|
50
|
+
validates :state, :country, length: { maximum: 20 }
|
51
|
+
validates :postal_code, length: { maximum: 8 }
|
52
|
+
|
53
|
+
# Nova instancia da classe Endereco
|
54
|
+
# @param [Hash] campos
|
55
|
+
def initialize(campos = {})
|
56
|
+
campos.each do |campo, valor|
|
57
|
+
if GetnetApi::Address.public_instance_methods.include? "#{campo}=".to_sym
|
58
|
+
send "#{campo}=", valor
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
# Montar o Hash de Endereco no padrão utilizado pela GetnetApi
|
64
|
+
def to_request
|
65
|
+
address = {
|
66
|
+
street: self.street,
|
67
|
+
number: self.number,
|
68
|
+
complement: self.complement,
|
69
|
+
district: self.district,
|
70
|
+
city: self.city,
|
71
|
+
state: self.state,
|
72
|
+
postal_code: self.postal_code,
|
73
|
+
country: self.country,
|
74
|
+
}
|
75
|
+
return address
|
76
|
+
end
|
77
|
+
|
78
|
+
end
|
79
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module GetnetApi
|
2
|
+
class Base
|
3
|
+
require 'uri'
|
4
|
+
require 'net/http'
|
5
|
+
|
6
|
+
def self.build_request endpoint, metodo, body=nil
|
7
|
+
|
8
|
+
url = URI("#{GetnetApi.base_uri}/#{endpoint}")
|
9
|
+
|
10
|
+
http = Net::HTTP.new(url.host, url.port)
|
11
|
+
http.use_ssl = true
|
12
|
+
|
13
|
+
case metodo
|
14
|
+
when "delete"
|
15
|
+
request = Net::HTTP::Delete.new(url)
|
16
|
+
when "get"
|
17
|
+
request = Net::HTTP::Get.new(url)
|
18
|
+
when "put"
|
19
|
+
request = Net::HTTP::Put.new(url)
|
20
|
+
when "post"
|
21
|
+
request = Net::HTTP::Post.new(url)
|
22
|
+
end
|
23
|
+
request = GetnetApi::Base.default_headers request
|
24
|
+
|
25
|
+
request.body = body.to_json
|
26
|
+
return http.request(request)
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.default_headers request
|
30
|
+
request["authorization"] = "Bearer #{GetnetApi::Base.valid_bearer}"
|
31
|
+
request["Content-Type"] = "application/json"
|
32
|
+
request["seller_id"] = "#{GetnetApi.seller_id}"
|
33
|
+
return request
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.get_token_de_bearer
|
37
|
+
url = URI("#{GetnetApi.endpoint}/auth/oauth/v2/token")
|
38
|
+
http = Net::HTTP.new(url.host, url.port)
|
39
|
+
http.use_ssl = true
|
40
|
+
request = Net::HTTP::Post.new(url)
|
41
|
+
request.basic_auth "#{GetnetApi.client_id}", "#{GetnetApi.client_secret}"
|
42
|
+
request["Content-Type"] = "application/x-www-form-urlencoded"
|
43
|
+
hash = {
|
44
|
+
"scope" => 'oob',
|
45
|
+
"grant_type" => 'client_credentials',
|
46
|
+
}
|
47
|
+
request.body = hash.to_query
|
48
|
+
response = http.request(request)
|
49
|
+
result = JSON.parse(response.read_body)
|
50
|
+
GetnetApi.access_token = result["access_token"]
|
51
|
+
GetnetApi.expires_in = DateTime.now + result["expires_in"].to_i.seconds - 60.seconds
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.valid_bearer
|
55
|
+
if GetnetApi.expires_in > DateTime.now
|
56
|
+
return GetnetApi.access_token
|
57
|
+
else
|
58
|
+
GetnetApi::Base.get_token_de_bearer
|
59
|
+
return GetnetApi.access_token
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class Boleto
|
4
|
+
|
5
|
+
# string 12 characters
|
6
|
+
# Denominado pelos bancos como "Nosso Número". É a identificação única do boleto no sistema de
|
7
|
+
# cobrança. É composto por regras que variam em função do banco e do serviço de cobrança.
|
8
|
+
# Por exemplo, no caso do Santander existem duas formas de se numerar. 1) Se cliente quem numera, deve informar o dígito verificador (DV); 2) Se o cliente omitir o número, o Banco fica encarregado da geração de um sequêncial, sem um DV. (sem máscara)
|
9
|
+
attr_accessor :our_number
|
10
|
+
|
11
|
+
# string 15 characters
|
12
|
+
# Seu Número. Número controlado pelo cliente, geralmente é gerenciado pelo sistema que está gerando o boleto. (sem máscara)
|
13
|
+
attr_accessor :document_number
|
14
|
+
|
15
|
+
# string <dd/mm/yyyy>
|
16
|
+
# Data do vencimento do boleto. Caso não seja informado, será considerado o número de dias padrão pré-cadastrado para o vencimento.
|
17
|
+
attr_accessor :expiration_date
|
18
|
+
|
19
|
+
# string
|
20
|
+
# Instruções a serem impressas no boleto (colocar quebra de linha a cada 100 caracteres, máximo 10 linhas).
|
21
|
+
attr_accessor :instructions
|
22
|
+
|
23
|
+
# string <= 40 characters
|
24
|
+
# Banco provedor. "santander"
|
25
|
+
attr_accessor :provider
|
26
|
+
|
27
|
+
# Validações do Rails 3
|
28
|
+
include ActiveModel::Validations
|
29
|
+
|
30
|
+
# validates :valor_total, length: { maximum: }
|
31
|
+
# validates :expiration_date, length: { maximum: }
|
32
|
+
validates :moeda, length: { maximum: 3 }
|
33
|
+
validates :our_number , length: { maximum: 12 }
|
34
|
+
validates :document_number, length: { maximum: 15 }
|
35
|
+
validates :instructions, length: { maximum: 1000 }
|
36
|
+
validates :provider, length: { maximum: 40 }
|
37
|
+
|
38
|
+
# Nova instancia da classe Boleto
|
39
|
+
# @param [Hash] campos
|
40
|
+
def initialize(campos = {})
|
41
|
+
campos.each do |campo, valor|
|
42
|
+
if GetnetApi::Boleto.public_instance_methods.include? "#{campo}=".to_sym
|
43
|
+
send "#{campo}=", valor
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
# Montar o Hash de dados do pagamento no padrão utilizado pela Getnet
|
49
|
+
def to_request
|
50
|
+
boleto = {
|
51
|
+
our_number: self.our_number,
|
52
|
+
document_number: self.document_number,
|
53
|
+
expiration_date: self.expiration_date,
|
54
|
+
instructions: self.instructions,
|
55
|
+
provider: self.provider
|
56
|
+
}
|
57
|
+
|
58
|
+
return boleto
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class Card
|
4
|
+
|
5
|
+
# string 128 characters Required
|
6
|
+
# Número do cartão tokenizado. Gerado previamente por meio do endpoint /v1/tokens/card.
|
7
|
+
attr_accessor :number_token
|
8
|
+
|
9
|
+
# string <= 26 characters Required
|
10
|
+
# Nome do comprador impresso no cartão.
|
11
|
+
attr_accessor :cardholder_name
|
12
|
+
|
13
|
+
# string [ 3 .. 4 ] characters
|
14
|
+
# Código de segurança. CVV ou CVC.
|
15
|
+
attr_accessor :security_code
|
16
|
+
|
17
|
+
# string <= 50 characters
|
18
|
+
# "Mastercard" "Visa" "Amex" "Elo" "Hipercard"
|
19
|
+
# Bandeira do cartão.
|
20
|
+
attr_accessor :brand
|
21
|
+
|
22
|
+
# string 2 characters Required
|
23
|
+
# Mês de expiração do cartão com dois dígitos.
|
24
|
+
attr_accessor :expiration_month
|
25
|
+
|
26
|
+
# string 2 characters Required
|
27
|
+
# Ano de expiração do cartão com dois dígitos.
|
28
|
+
attr_accessor :expiration_year
|
29
|
+
|
30
|
+
# Validações do Rails 3
|
31
|
+
include ActiveModel::Validations
|
32
|
+
|
33
|
+
validates :number_token, length: { maximum: 128 }
|
34
|
+
validates :cardholder_name, length: { maximum: 26 }
|
35
|
+
validates :security_code, length: { in: 3..4 }
|
36
|
+
validates :brand, length: { maximum: 50 }
|
37
|
+
validates :expiration_month, length: { maximum: 2 }
|
38
|
+
validates :expiration_year, length: { maximum: 2 }
|
39
|
+
|
40
|
+
# Nova instancia da classe Card
|
41
|
+
# @param [Hash] campos
|
42
|
+
def initialize(campos = {})
|
43
|
+
campos.each do |campo, valor|
|
44
|
+
if GetnetApi::Card.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 pagamento no padrão utilizado pela Getnet
|
51
|
+
def to_request
|
52
|
+
card = {
|
53
|
+
number_token: self.number_token,
|
54
|
+
cardholder_name: self.cardholder_name,
|
55
|
+
security_code: self.security_code,
|
56
|
+
brand: self.brand,
|
57
|
+
expiration_month: self.expiration_month,
|
58
|
+
expiration_year: self.expiration_year
|
59
|
+
}
|
60
|
+
|
61
|
+
return card
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class CardToken < Base
|
4
|
+
require 'uri'
|
5
|
+
require 'net/http'
|
6
|
+
|
7
|
+
# Metodo para gerar o token do cartão de credito do cliente, para ser usado no pagamento.
|
8
|
+
def self.get card_number
|
9
|
+
|
10
|
+
hash = {
|
11
|
+
"card_number" => card_number.to_s
|
12
|
+
}
|
13
|
+
|
14
|
+
response = self.build_request self.endpoint, "post", hash
|
15
|
+
|
16
|
+
return JSON.parse(response.read_body)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def self.endpoint
|
22
|
+
return "tokens/card"
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# GetnetApi::CardToken.get "5155901222280001"
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class CardVerification < Base
|
4
|
+
require 'uri'
|
5
|
+
require 'net/http'
|
6
|
+
|
7
|
+
# Metodo para verificar se o token gerado é valido.
|
8
|
+
def self.verify card_token
|
9
|
+
|
10
|
+
hash = {
|
11
|
+
"number_token" => card_token.to_s,
|
12
|
+
"cardholder_name": "JOAO DA SILVA",
|
13
|
+
"expiration_month": "12",
|
14
|
+
"expiration_year": "20",
|
15
|
+
"security_code": "123"
|
16
|
+
}
|
17
|
+
|
18
|
+
response = self.build_request self.endpoint, "post", hash
|
19
|
+
|
20
|
+
return JSON.parse(response.read_body)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def self.endpoint
|
26
|
+
return "cards/verification"
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
# GetnetApi::CardVerification.verify a["number_token"]
|
@@ -0,0 +1,105 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
module Configure
|
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://api-homologacao.getnet.com.br",
|
10
|
+
:sandbox => "https://api-sandbox.getnet.com.br",
|
11
|
+
:producao => "https://api.getnet.com.br",
|
12
|
+
}
|
13
|
+
|
14
|
+
# Parâmetros iniciais
|
15
|
+
AMBIENTE = :sandbox # :sandbox ou :homologacao ou :producao
|
16
|
+
# Parâmetros iniciais
|
17
|
+
API_VERSION = 'v1'
|
18
|
+
# Parâmetros iniciais
|
19
|
+
SELLER_ID = '5c89ec4a-db89-45a6-8c96-5b0b72907ef5'
|
20
|
+
# Parâmetros iniciais
|
21
|
+
CLIENT_ID = 'f43f4b25-fd05-420a-bffc-0dc85428ebd0'
|
22
|
+
# Parâmetros iniciais
|
23
|
+
CLIENT_SECRET = '31e285f9-5d97-4370-9553-326310ca8b97'
|
24
|
+
|
25
|
+
# Define o ambiente de trabalho
|
26
|
+
# Simbolo - Valores pré-definidos [:sandbox, :homologacao, :producao]
|
27
|
+
attr_writer :ambiente
|
28
|
+
|
29
|
+
# Enviado pela Getnet
|
30
|
+
attr_writer :api_version
|
31
|
+
|
32
|
+
# Enviado pela Getnet
|
33
|
+
attr_writer :seller_id
|
34
|
+
|
35
|
+
# Enviado pela Getnet
|
36
|
+
attr_writer :client_id
|
37
|
+
|
38
|
+
# Enviado pela Getnet
|
39
|
+
attr_writer :client_secret
|
40
|
+
|
41
|
+
# Token de acesso utilizado nas demais requisições
|
42
|
+
attr_writer :access_token
|
43
|
+
attr_writer :expires_in
|
44
|
+
|
45
|
+
# Comando que recebe as configuracoes
|
46
|
+
def configure
|
47
|
+
yield self if block_given?
|
48
|
+
end
|
49
|
+
|
50
|
+
# Definir ambiente
|
51
|
+
def ambiente
|
52
|
+
@ambiente ||= AMBIENTE
|
53
|
+
end
|
54
|
+
|
55
|
+
# Definir Versão da API da Getnet
|
56
|
+
def api_version
|
57
|
+
@api_version ||= API_VERSION
|
58
|
+
end
|
59
|
+
|
60
|
+
# Definir seller_id
|
61
|
+
def seller_id
|
62
|
+
@seller_id ||= SELLER_ID
|
63
|
+
end
|
64
|
+
|
65
|
+
# Definir client_id
|
66
|
+
def client_id
|
67
|
+
@client_id ||= CLIENT_ID
|
68
|
+
end
|
69
|
+
|
70
|
+
# Definir client_secret
|
71
|
+
def client_secret
|
72
|
+
@client_secret ||= CLIENT_SECRET
|
73
|
+
end
|
74
|
+
|
75
|
+
# Definir endpoint
|
76
|
+
def endpoint
|
77
|
+
@endpoint ||= set_endpoint
|
78
|
+
end
|
79
|
+
|
80
|
+
# Definir access_token
|
81
|
+
def access_token
|
82
|
+
@access_token ||= ""
|
83
|
+
end
|
84
|
+
# Definir Versão da API da Getnet
|
85
|
+
def expires_in
|
86
|
+
@expires_in ||= DateTime.now - 1.day
|
87
|
+
end
|
88
|
+
|
89
|
+
# Retornar a url conforme o ambiente
|
90
|
+
def set_endpoint
|
91
|
+
if ambiente == :producao
|
92
|
+
return GetnetApi::Configure::URL[:producao]
|
93
|
+
elsif ambiente == :homologacao
|
94
|
+
return GetnetApi::Configure::URL[:homologacao]
|
95
|
+
else
|
96
|
+
return GetnetApi::Configure::URL[:sandbox]
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
def base_uri
|
101
|
+
return "#{self.endpoint}/#{self.api_version}/"
|
102
|
+
end
|
103
|
+
|
104
|
+
end
|
105
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class Credit < Base
|
4
|
+
|
5
|
+
# Boolean Required
|
6
|
+
# Identifica se o crédito será feito com confirmação tardia.
|
7
|
+
attr_accessor :delayed
|
8
|
+
|
9
|
+
# Boolean
|
10
|
+
# Indicativo se transação deve ter o processo de autenticação no emissor, caso authenticated = true, o portador deve ser encaminhado ao site do emissor para autenticação junto ao mesmo.
|
11
|
+
attr_accessor :authenticated
|
12
|
+
|
13
|
+
# Boolean
|
14
|
+
# Indicativo se a transação é uma pré autorização de crédito.
|
15
|
+
attr_accessor :pre_authorization
|
16
|
+
|
17
|
+
# Boolean Required
|
18
|
+
# Identifica se o cartão deve ser salvo para futuras compras.
|
19
|
+
attr_accessor :save_card_data
|
20
|
+
|
21
|
+
# string Required
|
22
|
+
# "FULL" "INSTALL_NO_INTEREST" "INSTALL_WITH_INTEREST"
|
23
|
+
# Tipo de transação. Pagamento completo à vista, parcelado sem juros, parcelado com juros.
|
24
|
+
attr_accessor :transaction_type
|
25
|
+
|
26
|
+
# integer Required
|
27
|
+
# Número de parcelas.
|
28
|
+
attr_accessor :number_installments
|
29
|
+
|
30
|
+
# string <= 22 characters
|
31
|
+
# Texto exibido na fatura do cartão do comprador, Este campo é opcional, não sendo informado nada, será considerado o nome fantasia cadastrado para o estabelecimento.
|
32
|
+
attr_accessor :soft_descriptor
|
33
|
+
|
34
|
+
# integer
|
35
|
+
# Campo utilizado para sinalizar a transação com outro Merchant Category Code (Código da Categoria do Estabelecimento) diferente do cadastrado. Caso seja enviado um MCC inválido, será utilizado o padrão. Enviar somente dados numéricos.
|
36
|
+
attr_accessor :dynamic_mcc
|
37
|
+
|
38
|
+
# Cartão
|
39
|
+
# GetnetApi::Card
|
40
|
+
attr_accessor :card
|
41
|
+
|
42
|
+
# Validações do Rails 3
|
43
|
+
include ActiveModel::Validations
|
44
|
+
|
45
|
+
validates :transaction_type, length: { maximum: 22 }
|
46
|
+
validates :number_installments, presence: true
|
47
|
+
validates :soft_descriptor, length: { maximum: 22 }
|
48
|
+
validates :dynamic_mcc, length: { maximum: 10 }
|
49
|
+
|
50
|
+
validates_each [:card] do |record, attr, value|
|
51
|
+
if value.is_a? GetnetApi::Card
|
52
|
+
if value.invalid?
|
53
|
+
value.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
54
|
+
end
|
55
|
+
else
|
56
|
+
record.errors.add(attr, 'deve ser um objeto GetnetApi::Card.')
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Nova instancia da classe Credit
|
61
|
+
# @param [Hash] campos
|
62
|
+
def initialize(campos = {})
|
63
|
+
campos.each do |campo, valor|
|
64
|
+
if GetnetApi::Credit.public_instance_methods.include? "#{campo}=".to_sym
|
65
|
+
send "#{campo}=", valor
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Montar o Hash de dados do pagamento no padrão utilizado pela Getnet
|
71
|
+
def to_request
|
72
|
+
credit = {
|
73
|
+
delayed: self.delayed,
|
74
|
+
authenticated: self.authenticated,
|
75
|
+
pre_authorization: self.pre_authorization,
|
76
|
+
save_card_data: self.save_card_data,
|
77
|
+
transaction_type: self.transaction_type,
|
78
|
+
number_installments: self.number_installments.to_i,
|
79
|
+
soft_descriptor: self.soft_descriptor,
|
80
|
+
dynamic_mcc: self.dynamic_mcc,
|
81
|
+
card: self.card.to_request,
|
82
|
+
}
|
83
|
+
|
84
|
+
return credit
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
88
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class Customer < Base
|
4
|
+
|
5
|
+
# Opções de Tipo de Cliente
|
6
|
+
TIPO_DOCUMENTO = {
|
7
|
+
:pessoa_fisica => "CPF",
|
8
|
+
:pessoa_juridica => "CNPJ",
|
9
|
+
}
|
10
|
+
|
11
|
+
# Código que identifica o cliente no estabelecimento.
|
12
|
+
# Alfa Numérico - Até 20 caracteres
|
13
|
+
attr_accessor :customer_id
|
14
|
+
|
15
|
+
# Nome do comprador
|
16
|
+
# Alfa Numérico - Até 40 caracteres
|
17
|
+
attr_accessor :first_name
|
18
|
+
|
19
|
+
# Nome do comprador
|
20
|
+
# Alfa Numérico - Até 80 caracteres
|
21
|
+
attr_accessor :last_name
|
22
|
+
|
23
|
+
# Nome do comprador
|
24
|
+
# Alfa Numérico - Até 100 caracteres
|
25
|
+
attr_accessor :name
|
26
|
+
|
27
|
+
# E-mail do comprador
|
28
|
+
# Alfa Numérico - Até 100 caracteres
|
29
|
+
attr_accessor :email
|
30
|
+
|
31
|
+
# Identifica o tipo de documento informado é pessoa física ou jurídica.
|
32
|
+
# Simbolo - Valores pré-definidos [:pessoa_fisica, :pessoa_juridica]
|
33
|
+
attr_accessor :document_type
|
34
|
+
|
35
|
+
# Número do documento do comprador sem pontuação. (sem máscara)
|
36
|
+
# Alfa Numérico - Até 15 caracteres
|
37
|
+
attr_accessor :document_number
|
38
|
+
|
39
|
+
# Endereços
|
40
|
+
# GetnetApi::Address
|
41
|
+
attr_accessor :address
|
42
|
+
|
43
|
+
# Telefone do comprador. (sem máscara)
|
44
|
+
# Alfa Numérico - Até 15 caracteres
|
45
|
+
attr_accessor :phone_number
|
46
|
+
|
47
|
+
# Celular do comprador. (sem máscara)
|
48
|
+
# Alfa Numérico - Até 15 caracteres
|
49
|
+
attr_accessor :celphone_number
|
50
|
+
|
51
|
+
attr_accessor :observation
|
52
|
+
|
53
|
+
# Validações do Rails 3
|
54
|
+
include ActiveModel::Validations
|
55
|
+
|
56
|
+
# Retornar array com os possíveis tipos de cliente
|
57
|
+
def self.tipos_document_number_validos
|
58
|
+
TIPO_DOCUMENTO.map{ |key, value| key }
|
59
|
+
end
|
60
|
+
|
61
|
+
# Validações
|
62
|
+
validates :customer_id, length: { maximum: 100 }
|
63
|
+
validates :first_name, length: { maximum: 40 }
|
64
|
+
validates :last_name, length: { maximum: 80 }
|
65
|
+
validates :name, :email, length: { maximum: 100 }
|
66
|
+
validates :document_type, inclusion: { in: GetnetApi::Customer.tipos_document_number_validos }
|
67
|
+
validates :document_number, length: { in: 11..15 }
|
68
|
+
validates :phone_number, length: { maximum: 15 }
|
69
|
+
validates :observation, length: { maximum: 140 }
|
70
|
+
|
71
|
+
validates_each [:address] do |record, attr, value|
|
72
|
+
if value.is_a? GetnetApi::Address
|
73
|
+
if value.invalid?
|
74
|
+
value.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
75
|
+
end
|
76
|
+
else
|
77
|
+
record.errors.add(attr, 'deve ser um objeto GetnetApi::Address.')
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
# Nova instancia da classe Cliente
|
82
|
+
# @param [Hash] campos
|
83
|
+
def initialize(campos = {})
|
84
|
+
campos.each do |campo, valor|
|
85
|
+
if GetnetApi::Customer.public_instance_methods.include? "#{campo}=".to_sym
|
86
|
+
send "#{campo}=", valor
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Retornar o número do tipo de phone_number no padrão utilizado pela Getnet
|
92
|
+
def tipos_de_cliente_to_request
|
93
|
+
TIPO_DOCUMENTO[self.document_type]
|
94
|
+
end
|
95
|
+
|
96
|
+
# Montar o Hash de dados do usuario no padrão utilizado pela Getnet
|
97
|
+
def to_request tipo
|
98
|
+
customer = {
|
99
|
+
customer_id: self.customer_id.to_s,
|
100
|
+
first_name: self.first_name.to_s,
|
101
|
+
last_name: self.last_name.to_s,
|
102
|
+
email: self.email.to_s,
|
103
|
+
document_type: self.tipos_de_cliente_to_request.to_s,
|
104
|
+
document_number: self.document_number.to_s,
|
105
|
+
phone_number: self.phone_number.to_s,
|
106
|
+
}
|
107
|
+
|
108
|
+
if tipo == :customer
|
109
|
+
customer.merge!({"address": address.to_request,})
|
110
|
+
elsif tipo == :payment
|
111
|
+
customer.merge!({"name": self.name.to_s,})
|
112
|
+
customer.merge!({"billing_address": address.to_request,})
|
113
|
+
end
|
114
|
+
|
115
|
+
return customer
|
116
|
+
end
|
117
|
+
|
118
|
+
# a = GetnetApi::Customer.create cliente
|
119
|
+
def self.create customer
|
120
|
+
|
121
|
+
hash = customer.to_request(:customer)
|
122
|
+
|
123
|
+
response = self.build_request self.endpoint, "post", hash
|
124
|
+
|
125
|
+
return JSON.parse(response.read_body)
|
126
|
+
end
|
127
|
+
|
128
|
+
private
|
129
|
+
|
130
|
+
def self.endpoint
|
131
|
+
return "/customers"
|
132
|
+
end
|
133
|
+
|
134
|
+
end
|
135
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class Order
|
4
|
+
|
5
|
+
# Conjunto de dados para identificação da compra
|
6
|
+
# order_id
|
7
|
+
# string <= 36 characters Required
|
8
|
+
attr_accessor :order_id
|
9
|
+
|
10
|
+
# Código de identificação da compra utilizado pelo e-commerce
|
11
|
+
# Valor de impostos
|
12
|
+
attr_accessor :sales_tax
|
13
|
+
|
14
|
+
# string
|
15
|
+
# "cash_carry" "digital_content" "digital_goods" "digital_physical" "gift_card" "phisical_goods" "renew_subs" "shareware" "service"
|
16
|
+
# Identificador do tipo de produto vendido dentre as opções
|
17
|
+
attr_accessor :product_type
|
18
|
+
|
19
|
+
# Validações do Rails 3
|
20
|
+
include ActiveModel::Validations
|
21
|
+
|
22
|
+
# validates :valor_total, length: { maximum: }
|
23
|
+
# validates :expiration_date, length: { maximum: }
|
24
|
+
validates :order_id, length: { maximum: 36 }
|
25
|
+
# validates :sales_tax , length: { }
|
26
|
+
# validates :product_type, length: { }
|
27
|
+
|
28
|
+
# Nova instancia da classe Boleto
|
29
|
+
# @param [Hash] campos
|
30
|
+
def initialize(campos = {})
|
31
|
+
campos.each do |campo, valor|
|
32
|
+
if GetnetApi::Order.public_instance_methods.include? "#{campo}=".to_sym
|
33
|
+
send "#{campo}=", valor
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
# Montar o Hash de dados do pagamento no padrão utilizado pela Getnet
|
39
|
+
def to_request
|
40
|
+
order = {
|
41
|
+
order_id: self.order_id.to_s,
|
42
|
+
sales_tax: self.sales_tax.to_i,
|
43
|
+
product_type: self.product_type.to_s
|
44
|
+
}
|
45
|
+
|
46
|
+
return order
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
module GetnetApi
|
3
|
+
class Payment < Base
|
4
|
+
require 'uri'
|
5
|
+
require 'net/http'
|
6
|
+
|
7
|
+
# amount
|
8
|
+
# integer Required
|
9
|
+
# Valor da compra em centavos.
|
10
|
+
attr_accessor :amount
|
11
|
+
|
12
|
+
# currency
|
13
|
+
# string 3 characters
|
14
|
+
# Identificação da moeda (Consultar código em "https://www.currency-iso.org/en/home/tables/table-a1.html").
|
15
|
+
attr_accessor :currency
|
16
|
+
|
17
|
+
# Objeto do tipo GetnetApi::Order
|
18
|
+
attr_accessor :order
|
19
|
+
|
20
|
+
# Objeto do tipo GetnetApi::Customer
|
21
|
+
attr_accessor :customer
|
22
|
+
|
23
|
+
# Validações do Rails 3
|
24
|
+
include ActiveModel::Validations
|
25
|
+
|
26
|
+
validates :amount, length: { maximum: 3 }
|
27
|
+
validates :currency, length: { maximum: 3 }
|
28
|
+
|
29
|
+
validates_each [:order] do |record, attr, value|
|
30
|
+
if value.is_a? GetnetApi::Order
|
31
|
+
if value.invalid?
|
32
|
+
value.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
33
|
+
end
|
34
|
+
else
|
35
|
+
record.errors.add(attr, 'deve ser um objeto GetnetApi::Order.')
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
validates_each [:boleto] do |record, attr, value|
|
40
|
+
if value.is_a? GetnetApi::Boleto
|
41
|
+
if value.invalid?
|
42
|
+
value.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
43
|
+
end
|
44
|
+
else
|
45
|
+
record.errors.add(attr, 'deve ser um objeto GetnetApi::Boleto.')
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
validates_each [:customer] do |record, attr, value|
|
50
|
+
if value.is_a? GetnetApi::Customer
|
51
|
+
if value.invalid?
|
52
|
+
value.errors.full_messages.each { |msg| record.errors.add(attr, msg) }
|
53
|
+
end
|
54
|
+
else
|
55
|
+
record.errors.add(attr, 'deve ser um objeto GetnetApi::Customer.')
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Definir moeda usada
|
60
|
+
def currency
|
61
|
+
@currency ||= "BRL"
|
62
|
+
end
|
63
|
+
|
64
|
+
# Nova instancia da classe Cliente
|
65
|
+
# @param [Hash] campos
|
66
|
+
def initialize(campos = {})
|
67
|
+
campos.each do |campo, valor|
|
68
|
+
if GetnetApi::Payment.public_instance_methods.include? "#{campo}=".to_sym
|
69
|
+
send "#{campo}=", valor
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
# Montar o Hash de dados do usuario no padrão utilizado pela Getnet
|
75
|
+
def to_request obj, type
|
76
|
+
payment = {
|
77
|
+
seller_id: GetnetApi.seller_id.to_s,
|
78
|
+
amount: self.amount.to_i,
|
79
|
+
currency: self.currency.to_s,
|
80
|
+
order: self.order.to_request,
|
81
|
+
customer: self.customer.to_request(:payment),
|
82
|
+
}
|
83
|
+
|
84
|
+
if type == :boleto
|
85
|
+
payment.merge!({"boleto": obj.to_request,})
|
86
|
+
elsif :credit
|
87
|
+
payment.merge!({"credit": obj.to_request,})
|
88
|
+
end
|
89
|
+
|
90
|
+
return payment
|
91
|
+
end
|
92
|
+
|
93
|
+
# a = GetnetApi::Payment.create pagamento, boleto, :boleto
|
94
|
+
def self.create(payment, obj, type)
|
95
|
+
|
96
|
+
hash = payment.to_request(obj, type)
|
97
|
+
|
98
|
+
response = self.build_request self.endpoint(type), "post", hash
|
99
|
+
|
100
|
+
return JSON.parse(response.read_body)
|
101
|
+
end
|
102
|
+
|
103
|
+
private
|
104
|
+
|
105
|
+
def self.endpoint type
|
106
|
+
if type == :boleto
|
107
|
+
return "payments/boleto"
|
108
|
+
elsif :credit
|
109
|
+
return "payments/credit"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
data/lib/getnet_api.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding : utf-8 -*-
|
2
|
+
require 'rubygems'
|
3
|
+
require 'active_model'
|
4
|
+
|
5
|
+
require "getnet_api/version"
|
6
|
+
require "getnet_api/configure"
|
7
|
+
require "getnet_api/base"
|
8
|
+
require "getnet_api/card"
|
9
|
+
require "getnet_api/card_token"
|
10
|
+
require "getnet_api/card_verification"
|
11
|
+
require "getnet_api/customer"
|
12
|
+
require "getnet_api/address"
|
13
|
+
require "getnet_api/order"
|
14
|
+
require "getnet_api/boleto"
|
15
|
+
require "getnet_api/credit"
|
16
|
+
require "getnet_api/payment"
|
17
|
+
|
18
|
+
|
19
|
+
# -*- encoding : utf-8 -*-
|
20
|
+
module GetnetApi
|
21
|
+
extend GetnetApi::Configure
|
22
|
+
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: getnet_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- QW3 Software & Marketing
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-11-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rest-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
description: Gem para utilização dos meios de pagamento Getnet - Uma empresa Santander
|
28
|
+
para integrar sua plataforma de forma segura e eficaz com as principais formas de
|
29
|
+
pagamento disponíveis no mercado.
|
30
|
+
email:
|
31
|
+
- contato@qw3.com.br
|
32
|
+
executables: []
|
33
|
+
extensions: []
|
34
|
+
extra_rdoc_files: []
|
35
|
+
files:
|
36
|
+
- ".gitignore"
|
37
|
+
- Gemfile
|
38
|
+
- Gemfile.lock
|
39
|
+
- LICENSE
|
40
|
+
- README.md
|
41
|
+
- Rakefile
|
42
|
+
- getnet_api.gemspec
|
43
|
+
- lib/getnet_api.rb
|
44
|
+
- lib/getnet_api/address.rb
|
45
|
+
- lib/getnet_api/base.rb
|
46
|
+
- lib/getnet_api/boleto.rb
|
47
|
+
- lib/getnet_api/card.rb
|
48
|
+
- lib/getnet_api/card_token.rb
|
49
|
+
- lib/getnet_api/card_verification.rb
|
50
|
+
- lib/getnet_api/configure.rb
|
51
|
+
- lib/getnet_api/credit.rb
|
52
|
+
- lib/getnet_api/customer.rb
|
53
|
+
- lib/getnet_api/order.rb
|
54
|
+
- lib/getnet_api/payment.rb
|
55
|
+
- lib/getnet_api/version.rb
|
56
|
+
homepage: https://github.com/qw3/getnet_api
|
57
|
+
licenses:
|
58
|
+
- MIT
|
59
|
+
metadata: {}
|
60
|
+
post_install_message:
|
61
|
+
rdoc_options: []
|
62
|
+
require_paths:
|
63
|
+
- lib
|
64
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.9'
|
69
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
version: '0'
|
74
|
+
requirements: []
|
75
|
+
rubyforge_project:
|
76
|
+
rubygems_version: 2.4.8
|
77
|
+
signing_key:
|
78
|
+
specification_version: 4
|
79
|
+
summary: Getnet API - Meios de Pagamento
|
80
|
+
test_files: []
|