bs2_api 0.2.1 → 0.3.4
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 +4 -4
- data/.github/workflows/test.yml +34 -0
- data/CHANGELOG.md +7 -1
- data/Gemfile +1 -14
- data/Gemfile.lock +8 -5
- data/README.md +88 -83
- data/bs2_api.gemspec +20 -7
- data/lib/bs2_api.rb +15 -9
- data/lib/bs2_api/configuration.rb +2 -0
- data/lib/bs2_api/entities/account.rb +7 -2
- data/lib/bs2_api/errors/confirmation_error.rb +7 -0
- data/lib/bs2_api/errors/invalid_bank.rb +7 -0
- data/lib/bs2_api/errors/missing_bank.rb +7 -0
- data/lib/bs2_api/payment/base.rb +10 -18
- data/lib/bs2_api/payment/confirmation.rb +38 -0
- data/lib/bs2_api/payment/manual.rb +1 -0
- data/lib/bs2_api/request/auth.rb +2 -2
- data/lib/bs2_api/util/bank_service.rb +3 -1
- data/lib/bs2_api/util/response.rb +20 -0
- data/lib/bs2_api/version.rb +1 -1
- metadata +171 -17
- data/lib/bs2_api/initializers/hash.rb +0 -9
- data/lib/bs2_api/initializers/object.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 83d1974407ed876b13a3c90b79f4ea2ac0d10f018671176974d0546c8cf37c16
|
4
|
+
data.tar.gz: 11ae325cfb8f34158df8cffc73bb97b44371b5c1092a3c45784fb9a947672d7c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: afa20659aead1ad39f6a5d8123d7d34a880b3379888c4a1f4357fea96805ba3aa5da8ad95da622dd06fa656b63f2e9c05082d75136dcfd30ac9d49f8914f97da
|
7
|
+
data.tar.gz: fc45ca9142c72de060b098e716c578a6a636ebab90bdd67627be66ec8fa00d9c2603c1e5efb8b5c6be0bba500f9dff68bdf89a85b0e11a580972fe0996e507c1
|
@@ -0,0 +1,34 @@
|
|
1
|
+
name: bs2_api test
|
2
|
+
|
3
|
+
on:
|
4
|
+
push:
|
5
|
+
branches: [ main ]
|
6
|
+
pull_request:
|
7
|
+
types: [ opened, synchronize, reopened ]
|
8
|
+
|
9
|
+
jobs:
|
10
|
+
test:
|
11
|
+
runs-on: ubuntu-latest
|
12
|
+
env:
|
13
|
+
BS2_ENVIRONMENT: 'sandbox'
|
14
|
+
BS2_CLIENT_ID: '123'
|
15
|
+
BS2_CLIENT_SECRET: '123'
|
16
|
+
BS2_EVP_TEST_KEY: '123'
|
17
|
+
|
18
|
+
strategy:
|
19
|
+
matrix:
|
20
|
+
ruby-version: ["2.7.2"]
|
21
|
+
|
22
|
+
steps:
|
23
|
+
- uses: actions/checkout@v2
|
24
|
+
|
25
|
+
- name: Set up Ruby
|
26
|
+
uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
|
27
|
+
with:
|
28
|
+
ruby-version: ${{ matrix.ruby-version }}
|
29
|
+
|
30
|
+
- name: Install dependencies
|
31
|
+
run: bundle install
|
32
|
+
|
33
|
+
- name: Run tests
|
34
|
+
run: bundle exec rspec spec/
|
data/CHANGELOG.md
CHANGED
data/Gemfile
CHANGED
@@ -2,17 +2,4 @@
|
|
2
2
|
|
3
3
|
source "https://rubygems.org"
|
4
4
|
|
5
|
-
gemspec
|
6
|
-
|
7
|
-
gem "rake", "~> 13.0"
|
8
|
-
gem "httparty", "~> 0.18.1"
|
9
|
-
gem "activesupport", "~> 6.1", ">= 6.1.3.2"
|
10
|
-
|
11
|
-
group :test do
|
12
|
-
gem "pry-byebug", "~> 3.9"
|
13
|
-
gem "uuid", "~> 2.3", ">= 2.3.9"
|
14
|
-
gem "rspec", "~> 3.10"
|
15
|
-
gem "webmock", "~> 3.13"
|
16
|
-
gem "vcr", "~> 6.0"
|
17
|
-
gem "dotenv", "~> 2.7", ">= 2.7.6"
|
18
|
-
end
|
5
|
+
gemspec
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,12 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bs2_api (0.
|
5
|
-
activesupport
|
4
|
+
bs2_api (0.3.4)
|
5
|
+
activesupport
|
6
|
+
builder
|
7
|
+
bundler
|
8
|
+
httparty (~> 0.18.1)
|
9
|
+
rake
|
6
10
|
|
7
11
|
GEM
|
8
12
|
remote: https://rubygems.org/
|
@@ -15,6 +19,7 @@ GEM
|
|
15
19
|
zeitwerk (~> 2.3)
|
16
20
|
addressable (2.7.0)
|
17
21
|
public_suffix (>= 2.0.2, < 5.0)
|
22
|
+
builder (3.2.4)
|
18
23
|
byebug (11.1.3)
|
19
24
|
coderay (1.1.3)
|
20
25
|
concurrent-ruby (1.1.9)
|
@@ -71,15 +76,13 @@ GEM
|
|
71
76
|
zeitwerk (2.4.2)
|
72
77
|
|
73
78
|
PLATFORMS
|
79
|
+
ruby
|
74
80
|
x86_64-linux
|
75
81
|
|
76
82
|
DEPENDENCIES
|
77
|
-
activesupport (~> 6.1, >= 6.1.3.2)
|
78
83
|
bs2_api!
|
79
84
|
dotenv (~> 2.7, >= 2.7.6)
|
80
|
-
httparty (~> 0.18.1)
|
81
85
|
pry-byebug (~> 3.9)
|
82
|
-
rake (~> 13.0)
|
83
86
|
rspec (~> 3.10)
|
84
87
|
uuid (~> 2.3, >= 2.3.9)
|
85
88
|
vcr (~> 6.0)
|
data/README.md
CHANGED
@@ -1,7 +1,24 @@
|
|
1
|
+
[](https://github.com/latamgateway/bs2_api/actions/workflows/test.yml)
|
2
|
+
[](http://github.com/latamgateway/bs2_api/releases)
|
3
|
+
[](https://rubygems.org/gems/bs2_api)
|
4
|
+
[](https://github.com/latamgateway/bs2_api/blob/main/LICENSE)
|
5
|
+
|
1
6
|
# Bs2Api
|
2
7
|
|
3
8
|
Integração com a API do Banco BS2: https://devs.bs2.com/manual/pix-clientes
|
4
9
|
|
10
|
+
TO-DO:
|
11
|
+
- Pagamentos (**Transfere** dinheiro para alguém)
|
12
|
+
- [x] Criar pagamento por Chave
|
13
|
+
- [x] Criar pagamento Manual
|
14
|
+
- [x] Confirmar pagamento
|
15
|
+
- [ ] Consultar pagamento
|
16
|
+
- Recebimentos (**Recebe** dinheiro de alguém)
|
17
|
+
- [ ] Cobrança estático
|
18
|
+
- [ ] Cobrança dinâmico
|
19
|
+
- [ ] Consultar cobrança
|
20
|
+
|
21
|
+
|
5
22
|
## Instalação
|
6
23
|
|
7
24
|
Adicionar no seu Gemfile:
|
@@ -31,13 +48,13 @@ ou via initializer:
|
|
31
48
|
|
32
49
|
```ruby
|
33
50
|
Bs2Api.configure do |config|
|
34
|
-
config.client_id
|
35
|
-
config.client_secret
|
36
|
-
config.
|
51
|
+
config.client_id = 'you_bs2_client_id'
|
52
|
+
config.client_secret = 'you_bs2_client_secret'
|
53
|
+
config.env = 'sandbox' # ou production
|
37
54
|
end
|
38
55
|
```
|
39
56
|
|
40
|
-
###
|
57
|
+
### Inicia ordem de Transferência PIX via: Chave
|
41
58
|
|
42
59
|
```ruby
|
43
60
|
pix_key = Bs2Api::Entities::PixKey.new(
|
@@ -45,100 +62,88 @@ pix_key = Bs2Api::Entities::PixKey.new(
|
|
45
62
|
type: 'EMAIL'
|
46
63
|
)
|
47
64
|
|
48
|
-
|
49
|
-
|
65
|
+
# Caso ocorra algum problema na criação, um erro será lançado
|
66
|
+
# Veja abaixo (Classes de errors) quais erros que podem ser lançados
|
67
|
+
pay_key = Bs2Api::Payment::Key.new(pix_key).call
|
50
68
|
|
51
|
-
|
52
|
-
|
53
|
-
CPF
|
54
|
-
CNPJ
|
55
|
-
PHONE
|
56
|
-
EMAIL
|
57
|
-
EVP (Chave aleatória)
|
58
|
-
```
|
69
|
+
pay_key.payment.id
|
70
|
+
=> "96f0b3c4-4c76-4a7a-9933-9c9f86df7490" # pagamentoId gerado no BS2
|
59
71
|
|
72
|
+
pay_key.payment.merchant_id
|
73
|
+
=> "E710278662021061618144401750781P" # endToEndId gerado no BS2
|
60
74
|
|
61
|
-
|
75
|
+
```
|
76
|
+
|
77
|
+
### Inicia ordem de Transferência PIX via: Manual
|
62
78
|
|
63
79
|
```ruby
|
64
80
|
account = Bs2Api::Entities::Account.new(
|
65
|
-
bank_code:
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
type: 'ContaCorrente'
|
81
|
+
bank_code: "218",
|
82
|
+
agency: "0993",
|
83
|
+
number: "042312",
|
84
|
+
type: "ContaCorrente" # ContaCorrente, ContaSalario ou Poupanca
|
70
85
|
)
|
71
86
|
|
72
87
|
customer = Bs2Api::Entities::Customer.new(
|
73
|
-
document:
|
74
|
-
type:
|
75
|
-
name:
|
88
|
+
document: "88899988811",
|
89
|
+
type: "CPF",
|
90
|
+
name: "Rick Sanches",
|
91
|
+
business_name: "Nome fantasia" # Utilizar apenas se for type CNPJ
|
76
92
|
)
|
77
93
|
|
78
|
-
|
79
|
-
account: account,
|
94
|
+
receiver_bank = Bs2Api::Entities::Bank.new(
|
95
|
+
account: account,
|
80
96
|
customer: customer
|
81
97
|
)
|
82
98
|
|
83
|
-
|
99
|
+
pay_manual = Bs2Api::Payment::Manual.new(receiver_bank).call
|
100
|
+
|
101
|
+
pay_manual.payment.id
|
102
|
+
=> "96f0b3c4-4c76-4a7a-9933-9c9f86df7490" # UUID gerado no BS2
|
103
|
+
|
104
|
+
pay_manual.payment.merchantId
|
105
|
+
=> "E710278662021061618144401750781P" # endToEndId gerado no BS2
|
84
106
|
```
|
85
107
|
|
86
|
-
###
|
108
|
+
### Confirmar ordem de transferência
|
109
|
+
Após criar um Payment é necessário confirmar, nessa etapa o dinheiro é de fato transferido.
|
110
|
+
Nessa etapa é necessário **informar o valor** que deseja ser transferido.
|
87
111
|
|
88
|
-
##### Payment
|
89
112
|
```ruby
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
payment
|
94
|
-
|
95
|
-
payment.
|
96
|
-
|
97
|
-
|
98
|
-
payment.
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
"pagador"=>{
|
128
|
-
"ispb"=>"71027866",
|
129
|
-
"conta"=>{
|
130
|
-
"banco"=>"218",
|
131
|
-
"bancoNome"=>"BCO BS2 S.A.",
|
132
|
-
"agencia"=>"0001",
|
133
|
-
"numero"=>"3134806",
|
134
|
-
"tipo"=>"ContaCorrente"
|
135
|
-
},
|
136
|
-
"pessoa"=>{
|
137
|
-
"documento"=>"25215188000116",
|
138
|
-
"tipoDocumento"=>"CNPJ",
|
139
|
-
"nome"=>"Teste Automatizado",
|
140
|
-
"nomeFantasia"=>nil
|
141
|
-
}
|
142
|
-
}
|
143
|
-
}
|
144
|
-
```
|
113
|
+
|
114
|
+
# Ambos modelos de criação da ordem de pagamento possuem o mesmo objeto payment
|
115
|
+
# podendo ser utilizado da mesma forma nos dois casos:
|
116
|
+
# pay_key.payment ou pay_manual.payment
|
117
|
+
|
118
|
+
payment = pay_key.payment
|
119
|
+
amount = 10.50
|
120
|
+
|
121
|
+
confirmation = Bs2Api::Payment::Confirmation.new(payment, value: amount).call
|
122
|
+
|
123
|
+
# Caso a confirmação dê problema, um erro será lançado.
|
124
|
+
raise Bs2Api::Errors::ConfirmationError
|
125
|
+
|
126
|
+
# Caso nenhum erro seja lançado significa que foi sucesso. Você pode ter certeza com
|
127
|
+
confirmation.success?
|
128
|
+
```
|
129
|
+
|
130
|
+
### Classes de erros:
|
131
|
+
```ruby
|
132
|
+
# Todos erros herdam de:
|
133
|
+
Bs2Api::Errors::Base
|
134
|
+
|
135
|
+
# Errors possíveis de serem lançados
|
136
|
+
Bs2Api::Errors::BadRequest
|
137
|
+
Bs2Api::Errors::ConfirmationError
|
138
|
+
Bs2Api::Errors::InvalidCustomer
|
139
|
+
Bs2Api::Errors::InvalidPixKey
|
140
|
+
Bs2Api::Errors::MissingConfiguration
|
141
|
+
Bs2Api::Errors::ServerError
|
142
|
+
Bs2Api::Errors::Unauthorized
|
143
|
+
```
|
144
|
+
|
145
|
+
---
|
146
|
+
|
147
|
+
### Observações
|
148
|
+
- Método `call` retorna o próprio objeto
|
149
|
+
- Em caso de retorno diferente de sucesso na comunicação com a API do Bs2, um erro sempre será lançado.
|
data/bs2_api.gemspec
CHANGED
@@ -9,13 +9,15 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.email = ["kimpastro@gmail.com"]
|
10
10
|
|
11
11
|
spec.summary = "Integração com a API do BS2"
|
12
|
-
spec.description = "
|
13
|
-
spec.homepage = "https://github.com/
|
14
|
-
spec.required_ruby_version = "
|
12
|
+
spec.description = "Fazer transferências via PIX"
|
13
|
+
spec.homepage = "https://github.com/latamgateway/bs2_api"
|
14
|
+
spec.required_ruby_version = "~> 2.7", "< 3"
|
15
|
+
|
16
|
+
spec.license = "MIT"
|
15
17
|
|
16
18
|
spec.metadata["homepage_uri"] = spec.homepage
|
17
|
-
spec.metadata["source_code_uri"] = "https://github.com/
|
18
|
-
spec.metadata["changelog_uri"] = "https://github.com/
|
19
|
+
spec.metadata["source_code_uri"] = "https://github.com/latamgateway/bs2_api"
|
20
|
+
spec.metadata["changelog_uri"] = "https://github.com/latamgateway/bs2_api/blob/main/CHANGELOG.md"
|
19
21
|
|
20
22
|
# Specify which files should be added to the gem when it is released.
|
21
23
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
@@ -26,5 +28,16 @@ Gem::Specification.new do |spec|
|
|
26
28
|
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
27
29
|
spec.require_paths = ["lib"]
|
28
30
|
|
29
|
-
spec.add_dependency
|
30
|
-
|
31
|
+
spec.add_dependency("builder")
|
32
|
+
spec.add_dependency("bundler")
|
33
|
+
spec.add_dependency("rake")
|
34
|
+
spec.add_dependency("activesupport")
|
35
|
+
spec.add_dependency("httparty", "~> 0.18.1")
|
36
|
+
|
37
|
+
spec.add_development_dependency("pry-byebug", "~> 3.9")
|
38
|
+
spec.add_development_dependency("uuid", "~> 2.3", ">= 2.3.9")
|
39
|
+
spec.add_development_dependency("rspec", "~> 3.10")
|
40
|
+
spec.add_development_dependency("webmock", "~> 3.13")
|
41
|
+
spec.add_development_dependency("vcr", "~> 6.0")
|
42
|
+
spec.add_development_dependency("dotenv", "~> 2.7", ">= 2.7.6")
|
43
|
+
end
|
data/lib/bs2_api.rb
CHANGED
@@ -1,19 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
require
|
2
|
+
require "httparty"
|
3
3
|
require "active_support/core_ext/hash/indifferent_access"
|
4
|
+
require "active_support/core_ext/hash/except"
|
5
|
+
require "active_support/core_ext/object/to_query"
|
6
|
+
require "active_support/core_ext/object/blank"
|
4
7
|
|
5
8
|
require 'bs2_api/version'
|
6
9
|
require 'bs2_api/configuration'
|
7
10
|
|
8
|
-
require 'bs2_api/
|
9
|
-
require 'bs2_api/
|
11
|
+
require 'bs2_api/util/bank_service'
|
12
|
+
require 'bs2_api/util/response'
|
10
13
|
|
11
14
|
require 'bs2_api/errors/base'
|
12
15
|
require 'bs2_api/errors/invalid_pix_key'
|
16
|
+
require 'bs2_api/errors/invalid_bank'
|
17
|
+
require 'bs2_api/errors/invalid_customer'
|
13
18
|
require 'bs2_api/errors/missing_configuration'
|
14
19
|
require 'bs2_api/errors/unauthorized'
|
15
20
|
require 'bs2_api/errors/bad_request'
|
16
21
|
require 'bs2_api/errors/server_error'
|
22
|
+
require 'bs2_api/errors/confirmation_error'
|
23
|
+
require 'bs2_api/errors/missing_bank'
|
17
24
|
|
18
25
|
require 'bs2_api/entities/account'
|
19
26
|
require 'bs2_api/entities/bank'
|
@@ -24,14 +31,13 @@ require 'bs2_api/entities/pix_key'
|
|
24
31
|
require 'bs2_api/payment/base'
|
25
32
|
require 'bs2_api/payment/key'
|
26
33
|
require 'bs2_api/payment/manual'
|
34
|
+
require 'bs2_api/payment/confirmation'
|
27
35
|
|
28
36
|
require 'bs2_api/request/auth'
|
29
37
|
|
30
|
-
require 'bs2_api/util/bank_service'
|
31
|
-
|
32
38
|
module Bs2Api
|
33
39
|
ENDPOINT = {
|
34
|
-
production: 'https://api.bs2.com
|
40
|
+
production: 'https://api.bs2.com',
|
35
41
|
sandbox: 'https://apihmz.bancobonsucesso.com.br'
|
36
42
|
}
|
37
43
|
|
@@ -41,7 +47,7 @@ module Bs2Api
|
|
41
47
|
def configuration
|
42
48
|
@configuration ||= Configuration.new
|
43
49
|
end
|
44
|
-
|
50
|
+
|
45
51
|
def configure
|
46
52
|
yield(configuration)
|
47
53
|
end
|
@@ -53,7 +59,7 @@ module Bs2Api
|
|
53
59
|
def production?
|
54
60
|
env == 'production'
|
55
61
|
end
|
56
|
-
|
62
|
+
|
57
63
|
def sandbox?
|
58
64
|
env == 'sandbox'
|
59
65
|
end
|
@@ -62,4 +68,4 @@ module Bs2Api
|
|
62
68
|
configuration.env
|
63
69
|
end
|
64
70
|
end
|
65
|
-
end
|
71
|
+
end
|
@@ -13,17 +13,17 @@ module Bs2Api
|
|
13
13
|
|
14
14
|
def initialize(args = {})
|
15
15
|
@bank_code = args.fetch(:bank_code, nil)
|
16
|
-
@bank_name = args.fetch(:bank_name, nil)
|
17
16
|
@agency = args.fetch(:agency, nil)
|
18
17
|
@number = args.fetch(:number, nil)
|
19
18
|
@type = args.fetch(:type, nil)
|
19
|
+
@bank_name = get_bank_name
|
20
20
|
end
|
21
21
|
|
22
22
|
def to_hash
|
23
23
|
ActiveSupport::HashWithIndifferentAccess.new(
|
24
24
|
{
|
25
25
|
"banco": @bank_code,
|
26
|
-
"bancoNome":
|
26
|
+
"bancoNome": get_bank_name,
|
27
27
|
"agencia": @agency,
|
28
28
|
"numero": @number,
|
29
29
|
"tipo": @type
|
@@ -54,6 +54,11 @@ module Bs2Api
|
|
54
54
|
def saving?
|
55
55
|
@type == TYPES[:saving]
|
56
56
|
end
|
57
|
+
|
58
|
+
private
|
59
|
+
def get_bank_name
|
60
|
+
Bs2Api::Util::BankService.find_by_code(@bank_code)["name"]
|
61
|
+
end
|
57
62
|
end
|
58
63
|
end
|
59
64
|
end
|
data/lib/bs2_api/payment/base.rb
CHANGED
@@ -1,11 +1,18 @@
|
|
1
1
|
module Bs2Api
|
2
2
|
module Payment
|
3
3
|
class Base
|
4
|
+
attr_reader :payment
|
5
|
+
|
6
|
+
def initialize
|
7
|
+
raise NoMethodError, "Missing #{__method__} to #{self.class}"
|
8
|
+
end
|
9
|
+
|
4
10
|
def call
|
5
11
|
response = post_request
|
6
|
-
|
7
|
-
|
8
|
-
Bs2Api::Entities::Payment.from_response(response)
|
12
|
+
raise Bs2Api::Errors::BadRequest, ::Util::Response.parse_error(response) unless response.created?
|
13
|
+
|
14
|
+
@payment = Bs2Api::Entities::Payment.from_response(response)
|
15
|
+
self
|
9
16
|
end
|
10
17
|
|
11
18
|
private
|
@@ -25,21 +32,6 @@ module Bs2Api
|
|
25
32
|
Bs2Api::Request::Auth.token
|
26
33
|
end
|
27
34
|
|
28
|
-
def parse_error(response)
|
29
|
-
hash = JSON.parse(response.body)
|
30
|
-
message = "#{response.code}: "
|
31
|
-
|
32
|
-
if hash.is_a?(Array)
|
33
|
-
message << hash[0]["descricao"]
|
34
|
-
elsif hash.key?("error_description")
|
35
|
-
message << hash["error_description"]
|
36
|
-
else
|
37
|
-
message << hash.to_s
|
38
|
-
end
|
39
|
-
|
40
|
-
message
|
41
|
-
end
|
42
|
-
|
43
35
|
def payload
|
44
36
|
raise NoMethodError, "Missing #{__method__} to #{self.class}"
|
45
37
|
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Bs2Api
|
2
|
+
module Payment
|
3
|
+
class Confirmation < Base
|
4
|
+
attr_reader :success
|
5
|
+
|
6
|
+
def initialize payment, value: nil
|
7
|
+
raise Bs2Api::Errors::ConfirmationError, 'invalid payment' unless payment.present? && payment.is_a?(Bs2Api::Entities::Payment)
|
8
|
+
raise Bs2Api::Errors::ConfirmationError, 'invalid value' unless value.to_f.positive?
|
9
|
+
@payment = payment
|
10
|
+
|
11
|
+
@value = value.to_f
|
12
|
+
end
|
13
|
+
|
14
|
+
def call
|
15
|
+
response = post_request
|
16
|
+
raise Bs2Api::Errors::ConfirmationError, ::Util::Response.parse_error(response) unless response.accepted?
|
17
|
+
|
18
|
+
@success = true
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
def success?
|
23
|
+
!!@success
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
def payload
|
28
|
+
@payment.to_hash
|
29
|
+
.except!("pagamentoId", "endToEndId")
|
30
|
+
.merge("valor": @value)
|
31
|
+
end
|
32
|
+
|
33
|
+
def url
|
34
|
+
"#{Bs2Api.endpoint}/pix/direto/forintegration/v1/pagamentos/#{@payment.id}/confirmacao"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
data/lib/bs2_api/request/auth.rb
CHANGED
@@ -7,7 +7,9 @@ module Bs2Api
|
|
7
7
|
class BankService
|
8
8
|
class << self
|
9
9
|
def find_by_code code
|
10
|
-
bank_list.find {|b| b["code"] == code }
|
10
|
+
bank = bank_list.find {|b| b["code"] == code }
|
11
|
+
raise Bs2Api::Errors::MissingBank, 'Bank not registered into util/banks.yml file' if bank.blank?
|
12
|
+
bank
|
11
13
|
end
|
12
14
|
|
13
15
|
private
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Util
|
2
|
+
class Response
|
3
|
+
class << self
|
4
|
+
def parse_error res
|
5
|
+
hash = JSON.parse(res.body)
|
6
|
+
message = "#{res.code}: "
|
7
|
+
|
8
|
+
if hash.is_a?(Array)
|
9
|
+
message << hash[0]["descricao"]
|
10
|
+
elsif hash.key?("error_description")
|
11
|
+
message << hash["error_description"]
|
12
|
+
else
|
13
|
+
message << hash.to_s
|
14
|
+
end
|
15
|
+
|
16
|
+
message
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
data/lib/bs2_api/version.rb
CHANGED
metadata
CHANGED
@@ -1,36 +1,182 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bs2_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kim Pastro
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: builder
|
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
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
13
55
|
- !ruby/object:Gem::Dependency
|
14
56
|
name: activesupport
|
15
57
|
requirement: !ruby/object:Gem::Requirement
|
16
58
|
requirements:
|
17
|
-
- - "
|
59
|
+
- - ">="
|
18
60
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
20
66
|
- - ">="
|
21
67
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: httparty
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 0.18.1
|
23
76
|
type: :runtime
|
24
77
|
prerelease: false
|
25
78
|
version_requirements: !ruby/object:Gem::Requirement
|
26
79
|
requirements:
|
27
80
|
- - "~>"
|
28
81
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
82
|
+
version: 0.18.1
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: pry-byebug
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.9'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.9'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: uuid
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '2.3'
|
104
|
+
- - ">="
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: 2.3.9
|
107
|
+
type: :development
|
108
|
+
prerelease: false
|
109
|
+
version_requirements: !ruby/object:Gem::Requirement
|
110
|
+
requirements:
|
111
|
+
- - "~>"
|
112
|
+
- !ruby/object:Gem::Version
|
113
|
+
version: '2.3'
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: 2.3.9
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: rspec
|
119
|
+
requirement: !ruby/object:Gem::Requirement
|
120
|
+
requirements:
|
121
|
+
- - "~>"
|
122
|
+
- !ruby/object:Gem::Version
|
123
|
+
version: '3.10'
|
124
|
+
type: :development
|
125
|
+
prerelease: false
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - "~>"
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '3.10'
|
131
|
+
- !ruby/object:Gem::Dependency
|
132
|
+
name: webmock
|
133
|
+
requirement: !ruby/object:Gem::Requirement
|
134
|
+
requirements:
|
135
|
+
- - "~>"
|
136
|
+
- !ruby/object:Gem::Version
|
137
|
+
version: '3.13'
|
138
|
+
type: :development
|
139
|
+
prerelease: false
|
140
|
+
version_requirements: !ruby/object:Gem::Requirement
|
141
|
+
requirements:
|
142
|
+
- - "~>"
|
143
|
+
- !ruby/object:Gem::Version
|
144
|
+
version: '3.13'
|
145
|
+
- !ruby/object:Gem::Dependency
|
146
|
+
name: vcr
|
147
|
+
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirements:
|
149
|
+
- - "~>"
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '6.0'
|
152
|
+
type: :development
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
requirements:
|
156
|
+
- - "~>"
|
157
|
+
- !ruby/object:Gem::Version
|
158
|
+
version: '6.0'
|
159
|
+
- !ruby/object:Gem::Dependency
|
160
|
+
name: dotenv
|
161
|
+
requirement: !ruby/object:Gem::Requirement
|
162
|
+
requirements:
|
163
|
+
- - "~>"
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
version: '2.7'
|
166
|
+
- - ">="
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: 2.7.6
|
169
|
+
type: :development
|
170
|
+
prerelease: false
|
171
|
+
version_requirements: !ruby/object:Gem::Requirement
|
172
|
+
requirements:
|
173
|
+
- - "~>"
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '2.7'
|
30
176
|
- - ">="
|
31
177
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
33
|
-
description:
|
178
|
+
version: 2.7.6
|
179
|
+
description: Fazer transferências via PIX
|
34
180
|
email:
|
35
181
|
- kimpastro@gmail.com
|
36
182
|
executables: []
|
@@ -38,6 +184,7 @@ extensions: []
|
|
38
184
|
extra_rdoc_files: []
|
39
185
|
files:
|
40
186
|
- ".env.example"
|
187
|
+
- ".github/workflows/test.yml"
|
41
188
|
- ".gitignore"
|
42
189
|
- ".rspec"
|
43
190
|
- ".ruby-version"
|
@@ -60,35 +207,42 @@ files:
|
|
60
207
|
- lib/bs2_api/entities/pix_key.rb
|
61
208
|
- lib/bs2_api/errors/bad_request.rb
|
62
209
|
- lib/bs2_api/errors/base.rb
|
210
|
+
- lib/bs2_api/errors/confirmation_error.rb
|
211
|
+
- lib/bs2_api/errors/invalid_bank.rb
|
63
212
|
- lib/bs2_api/errors/invalid_customer.rb
|
64
213
|
- lib/bs2_api/errors/invalid_pix_key.rb
|
214
|
+
- lib/bs2_api/errors/missing_bank.rb
|
65
215
|
- lib/bs2_api/errors/missing_configuration.rb
|
66
216
|
- lib/bs2_api/errors/server_error.rb
|
67
217
|
- lib/bs2_api/errors/unauthorized.rb
|
68
|
-
- lib/bs2_api/initializers/hash.rb
|
69
|
-
- lib/bs2_api/initializers/object.rb
|
70
218
|
- lib/bs2_api/payment/base.rb
|
219
|
+
- lib/bs2_api/payment/confirmation.rb
|
71
220
|
- lib/bs2_api/payment/key.rb
|
72
221
|
- lib/bs2_api/payment/manual.rb
|
73
222
|
- lib/bs2_api/request/auth.rb
|
74
223
|
- lib/bs2_api/util/bank_service.rb
|
75
224
|
- lib/bs2_api/util/banks.yml
|
225
|
+
- lib/bs2_api/util/response.rb
|
76
226
|
- lib/bs2_api/version.rb
|
77
|
-
homepage: https://github.com/
|
78
|
-
licenses:
|
227
|
+
homepage: https://github.com/latamgateway/bs2_api
|
228
|
+
licenses:
|
229
|
+
- MIT
|
79
230
|
metadata:
|
80
|
-
homepage_uri: https://github.com/
|
81
|
-
source_code_uri: https://github.com/
|
82
|
-
changelog_uri: https://github.com/
|
231
|
+
homepage_uri: https://github.com/latamgateway/bs2_api
|
232
|
+
source_code_uri: https://github.com/latamgateway/bs2_api
|
233
|
+
changelog_uri: https://github.com/latamgateway/bs2_api/blob/main/CHANGELOG.md
|
83
234
|
post_install_message:
|
84
235
|
rdoc_options: []
|
85
236
|
require_paths:
|
86
237
|
- lib
|
87
238
|
required_ruby_version: !ruby/object:Gem::Requirement
|
88
239
|
requirements:
|
89
|
-
- - "
|
240
|
+
- - "~>"
|
241
|
+
- !ruby/object:Gem::Version
|
242
|
+
version: '2.7'
|
243
|
+
- - "<"
|
90
244
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
245
|
+
version: '3'
|
92
246
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
247
|
requirements:
|
94
248
|
- - ">="
|