bs2_api 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ac4d8162e93c876cdd61a6be56abde26d704a31797aef6b815274c98b8e5da29
4
- data.tar.gz: fc30a8fbac319e4b810dedac2582902a59ceeacc037f2e8a3f8fc2a8f3d87a1c
3
+ metadata.gz: e00122261c7f101e2aa06cd712a97dffc16c9217efff07c83eab99cff74110fe
4
+ data.tar.gz: fbbaae2c421c022b774601e94e10cc25cc2324770e7db7621c5bd6e173184e63
5
5
  SHA512:
6
- metadata.gz: 783bbec0c5ad81733d817f0958506bbfc300c75983256454d8f050e13ef7b00640ece3fb4d59858cf5aae36656435e7164893972f103a8f495661d10be5551b2
7
- data.tar.gz: c2e1e9df5dd5040ccebcf481e6e3bb649ab2dd134a3f0be4ed50014a1543cf0de67508de31809582ddf4a850bf7333970f6284394d905c94d6c0cd4168fa90c4
6
+ metadata.gz: 1c146dc459d908d337fd1920522d70498a985f5fac4a64f2daecc491b43436dbe462564a66d91467f90420edb0f2ed3390e88c9dd7af74d910d6cffe12ed7111
7
+ data.tar.gz: f4a492028c841aca65b635d6a12ba2dd9500b656fd3eae6dd7df88d0480b3104c5640ae5eb3bc8647ff453b18a04018e3bdae85e6afa917932ec5c57c6771795
@@ -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
@@ -1,4 +1,10 @@
1
- ## [Unreleased]
1
+ ## [0.3.1] - 2021-06-16
2
+
3
+ - Method Hash#to_query conflicting with Rails
4
+
5
+ ## [0.3.0] - 2021-06-16
6
+
7
+ - Confirmation, Adjust README.md
2
8
 
3
9
  ## [0.2.0] - 2021-06-15
4
10
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- bs2_api (0.3.0)
4
+ bs2_api (0.3.4)
5
5
  activesupport
6
6
  builder
7
7
  bundler
@@ -76,6 +76,7 @@ GEM
76
76
  zeitwerk (2.4.2)
77
77
 
78
78
  PLATFORMS
79
+ ruby
79
80
  x86_64-linux
80
81
 
81
82
  DEPENDENCIES
data/README.md CHANGED
@@ -1,3 +1,8 @@
1
+ [![CI status](https://github.com/latamgateway/bs2_api/actions/workflows/test.yml/badge.svg?branch=main)](https://github.com/latamgateway/bs2_api/actions/workflows/test.yml)
2
+ [![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/latamgateway/bs2_api.svg?style=flat-square)](http://github.com/latamgateway/bs2_api/releases)
3
+ [![Version](https://img.shields.io/gem/v/bs2_api.svg?style=flat-square)](https://rubygems.org/gems/bs2_api)
4
+ [![GitHub](https://img.shields.io/github/license/latamgateway/bs2_api?style=flat-square)](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
@@ -43,9 +48,9 @@ ou via initializer:
43
48
 
44
49
  ```ruby
45
50
  Bs2Api.configure do |config|
46
- config.client_id = 'you_bs2_client_id'
47
- config.client_secret = 'you_bs2_client_secret'
48
- config.pix_environment = 'sandbox' # ou production
51
+ config.client_id = 'you_bs2_client_id'
52
+ config.client_secret = 'you_bs2_client_secret'
53
+ config.env = 'sandbox' # ou production
49
54
  end
50
55
  ```
51
56
 
@@ -64,7 +69,7 @@ pay_key = Bs2Api::Payment::Key.new(pix_key).call
64
69
  pay_key.payment.id
65
70
  => "96f0b3c4-4c76-4a7a-9933-9c9f86df7490" # pagamentoId gerado no BS2
66
71
 
67
- pay_key.payment.merchantId
72
+ pay_key.payment.merchant_id
68
73
  => "E710278662021061618144401750781P" # endToEndId gerado no BS2
69
74
 
70
75
  ```
@@ -101,32 +106,33 @@ pay_manual.payment.merchantId
101
106
  ```
102
107
 
103
108
  ### Confirmar ordem de transferência
104
- ```ruby
105
- # Após criar um Payment é necessário confirmar
106
- # Nessa etapa o dinheiro é de fato transferido
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.
107
111
 
108
- # Tanto a ordem de transferência via chave ou manual tem o mesmo payment.
109
- # Caso tenha criado via chave no passo anterior:
110
- payment = pay_key.payment
112
+ ```ruby
111
113
 
112
- # Ou caso tenha criado a ordem via Manual no passo anterior:
113
- payment = pay_manual.payment
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
114
117
 
118
+ payment = pay_key.payment
115
119
  amount = 10.50
120
+
116
121
  confirmation = Bs2Api::Payment::Confirmation.new(payment, value: amount).call
117
122
 
118
- # Caso a confirmação de problema, um erro será lançado.
123
+ # Caso a confirmação problema, um erro será lançado.
119
124
  raise Bs2Api::Errors::ConfirmationError
120
125
 
121
- # Caso nenhum erro seja lançado (já é sucesso) porém, você pode ter certeza com
126
+ # Caso nenhum erro seja lançado significa que foi sucesso. Você pode ter certeza com
122
127
  confirmation.success?
123
128
  ```
124
- ---
129
+
125
130
  ### Classes de erros:
126
131
  ```ruby
127
132
  # Todos erros herdam de:
128
133
  Bs2Api::Errors::Base
129
134
 
135
+ # Errors possíveis de serem lançados
130
136
  Bs2Api::Errors::BadRequest
131
137
  Bs2Api::Errors::ConfirmationError
132
138
  Bs2Api::Errors::InvalidCustomer
@@ -134,9 +140,10 @@ Bs2Api::Errors::InvalidPixKey
134
140
  Bs2Api::Errors::MissingConfiguration
135
141
  Bs2Api::Errors::ServerError
136
142
  Bs2Api::Errors::Unauthorized
143
+ ```
137
144
 
138
- # Caso não queira tratar um erro em específico basta fazer rescue do Base
139
- rescue Bs2Api::Errors::Base => e
140
- puts "Erro: #{e.message}"
141
- end
142
- ```
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
@@ -10,12 +10,14 @@ Gem::Specification.new do |spec|
10
10
 
11
11
  spec.summary = "Integração com a API do BS2"
12
12
  spec.description = "Fazer transferências via PIX"
13
- spec.homepage = "https://github.com/kimpastro/bs2_api"
14
- spec.required_ruby_version = ">= 2.7.2"
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/kimpastro/bs2_api"
18
- spec.metadata["changelog_uri"] = "https://github.com/kimpastro/bs2_api/blob/main/CHANGELOG.md"
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.
data/lib/bs2_api.rb CHANGED
@@ -2,12 +2,14 @@
2
2
  require "httparty"
3
3
  require "active_support/core_ext/hash/indifferent_access"
4
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"
5
7
 
6
8
  require 'bs2_api/version'
7
9
  require 'bs2_api/configuration'
8
10
 
9
- require 'bs2_api/initializers/object'
10
- require 'bs2_api/initializers/hash'
11
+ require 'bs2_api/util/bank_service'
12
+ require 'bs2_api/util/response'
11
13
 
12
14
  require 'bs2_api/errors/base'
13
15
  require 'bs2_api/errors/invalid_pix_key'
@@ -33,11 +35,9 @@ require 'bs2_api/payment/confirmation'
33
35
 
34
36
  require 'bs2_api/request/auth'
35
37
 
36
- require 'bs2_api/util/bank_service'
37
-
38
38
  module Bs2Api
39
39
  ENDPOINT = {
40
- production: 'https://api.bs2.com:8443',
40
+ production: 'https://api.bs2.com',
41
41
  sandbox: 'https://apihmz.bancobonsucesso.com.br'
42
42
  }
43
43
 
@@ -47,7 +47,7 @@ module Bs2Api
47
47
  def configuration
48
48
  @configuration ||= Configuration.new
49
49
  end
50
-
50
+
51
51
  def configure
52
52
  yield(configuration)
53
53
  end
@@ -59,7 +59,7 @@ module Bs2Api
59
59
  def production?
60
60
  env == 'production'
61
61
  end
62
-
62
+
63
63
  def sandbox?
64
64
  env == 'sandbox'
65
65
  end
@@ -68,4 +68,4 @@ module Bs2Api
68
68
  configuration.env
69
69
  end
70
70
  end
71
- end
71
+ end
@@ -11,5 +11,7 @@ class Configuration
11
11
 
12
12
  def valid?
13
13
  raise Bs2Api::Errors::MissingConfiguration, 'Missing configuration credentials' if @client_id.blank? || @client_secret.blank?
14
+
15
+ true
14
16
  end
15
17
  end
@@ -9,7 +9,7 @@ module Bs2Api
9
9
 
10
10
  def call
11
11
  response = post_request
12
- raise Bs2Api::Errors::BadRequest, parse_error(response) unless response.created?
12
+ raise Bs2Api::Errors::BadRequest, ::Util::Response.parse_error(response) unless response.created?
13
13
 
14
14
  @payment = Bs2Api::Entities::Payment.from_response(response)
15
15
  self
@@ -32,21 +32,6 @@ module Bs2Api
32
32
  Bs2Api::Request::Auth.token
33
33
  end
34
34
 
35
- def parse_error(response)
36
- hash = JSON.parse(response.body)
37
- message = "#{response.code}: "
38
-
39
- if hash.is_a?(Array)
40
- message << hash[0]["descricao"]
41
- elsif hash.key?("error_description")
42
- message << hash["error_description"]
43
- else
44
- message << hash.to_s
45
- end
46
-
47
- message
48
- end
49
-
50
35
  def payload
51
36
  raise NoMethodError, "Missing #{__method__} to #{self.class}"
52
37
  end
@@ -13,12 +13,16 @@ module Bs2Api
13
13
 
14
14
  def call
15
15
  response = post_request
16
- raise Bs2Api::Errors::ConfirmationError, parse_error(response) unless response.accepted?
16
+ raise Bs2Api::Errors::ConfirmationError, ::Util::Response.parse_error(response) unless response.accepted?
17
17
 
18
18
  @success = true
19
19
  self
20
20
  end
21
21
 
22
+ def success?
23
+ !!@success
24
+ end
25
+
22
26
  private
23
27
  def payload
24
28
  @payment.to_hash
@@ -29,10 +33,6 @@ module Bs2Api
29
33
  def url
30
34
  "#{Bs2Api.endpoint}/pix/direto/forintegration/v1/pagamentos/#{@payment.id}/confirmacao"
31
35
  end
32
-
33
- def success?
34
- !!@success
35
- end
36
36
  end
37
37
  end
38
38
  end
@@ -39,7 +39,7 @@ module Bs2Api
39
39
  def body
40
40
  {
41
41
  grant_type: "client_credentials",
42
- scope: "pix.write%20pix.read"
42
+ scope: "pix.write pix.read"
43
43
  }.to_query
44
44
  end
45
45
 
@@ -49,4 +49,4 @@ module Bs2Api
49
49
  end
50
50
  end
51
51
  end
52
- end
52
+ end
@@ -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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Bs2Api
4
- VERSION = "0.3.0"
4
+ VERSION = "0.4.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bs2_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
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-16 00:00:00.000000000 Z
11
+ date: 2021-06-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: builder
@@ -184,6 +184,7 @@ extensions: []
184
184
  extra_rdoc_files: []
185
185
  files:
186
186
  - ".env.example"
187
+ - ".github/workflows/test.yml"
187
188
  - ".gitignore"
188
189
  - ".rspec"
189
190
  - ".ruby-version"
@@ -214,8 +215,6 @@ files:
214
215
  - lib/bs2_api/errors/missing_configuration.rb
215
216
  - lib/bs2_api/errors/server_error.rb
216
217
  - lib/bs2_api/errors/unauthorized.rb
217
- - lib/bs2_api/initializers/hash.rb
218
- - lib/bs2_api/initializers/object.rb
219
218
  - lib/bs2_api/payment/base.rb
220
219
  - lib/bs2_api/payment/confirmation.rb
221
220
  - lib/bs2_api/payment/key.rb
@@ -223,22 +222,27 @@ files:
223
222
  - lib/bs2_api/request/auth.rb
224
223
  - lib/bs2_api/util/bank_service.rb
225
224
  - lib/bs2_api/util/banks.yml
225
+ - lib/bs2_api/util/response.rb
226
226
  - lib/bs2_api/version.rb
227
- homepage: https://github.com/kimpastro/bs2_api
228
- licenses: []
227
+ homepage: https://github.com/latamgateway/bs2_api
228
+ licenses:
229
+ - MIT
229
230
  metadata:
230
- homepage_uri: https://github.com/kimpastro/bs2_api
231
- source_code_uri: https://github.com/kimpastro/bs2_api
232
- changelog_uri: https://github.com/kimpastro/bs2_api/blob/main/CHANGELOG.md
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
233
234
  post_install_message:
234
235
  rdoc_options: []
235
236
  require_paths:
236
237
  - lib
237
238
  required_ruby_version: !ruby/object:Gem::Requirement
238
239
  requirements:
239
- - - ">="
240
+ - - "~>"
241
+ - !ruby/object:Gem::Version
242
+ version: '2.7'
243
+ - - "<"
240
244
  - !ruby/object:Gem::Version
241
- version: 2.7.2
245
+ version: '3'
242
246
  required_rubygems_version: !ruby/object:Gem::Requirement
243
247
  requirements:
244
248
  - - ">="
@@ -1,9 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Hash
4
- def to_query
5
- keys.map do |key|
6
- "#{key}=#{self[key]}"
7
- end.join("&")
8
- end
9
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- class Object
4
- def blank?
5
- respond_to?(:empty?) ? !!empty? : !self
6
- end
7
-
8
- def present?
9
- !blank?
10
- end
11
- end