inter_api 1.2.3 → 2.0.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b16927cab5cbef58521c8dcbda0c7f232d77a92cb8102a571a39639b573fc66
4
- data.tar.gz: de0502e2c542643bd4d7aa1cb6cb8685dbb162a89ba0831be466aaf835eb400b
3
+ metadata.gz: 916894b13dfca9706d937b33783c82abadfa0b38cd8e453c16cf38722cbf91bd
4
+ data.tar.gz: cfe2a096a7ff9b744e30710f750caac01a29b32d84e8bbe9a55d2d062650967f
5
5
  SHA512:
6
- metadata.gz: fac2bc9176127181e0b0b8f9425fc1afd6b9291ee46242cb32ef870002b156a3509bf67decde0ff97e792f99731e1a3cd56be102ea0e626b913feb8088027caa
7
- data.tar.gz: 447b42862434eaa83a883df26634cad516767dfafa61b8bbd16e24bb4b0a4adf13dd19aba9384dd863c781c064ca9e1175611d5f14b353344a77793001a516b8
6
+ metadata.gz: c7767f24ea9c94da6f4fba3e5a8e11b5314999a897fcd04c36470dcf8bf5c9da6154ebdc4fb8501cf339c3746c6f3d86e2ae9aadfbb1379b37268751de7b4151
7
+ data.tar.gz: 3d2be806b3bc8c4ce6323bebc0a64d19ed2050e373ef785da9d9292b690016843cdb8c76a7a0e618a597f857751bb5a12c90500113ad615611dc7eb67d68aa1d
@@ -2,10 +2,11 @@ module InterApi
2
2
  class ClientProduction < Ac::Base
3
3
  BASE_URL = "https://cdpj.partners.bancointer.com.br/"
4
4
  MAX_RETIES = 2
5
+ SAVE_RESPONSES = true
5
6
 
6
7
  attr_reader :crt, :key, :client_id, :client_secret, :chave_pix, :conta_corrente, :scopes
7
- attr_accessor :token, :token_expires_at
8
- def initialize(crt:, key:, client_id:, client_secret:, chave_pix:, conta_corrente:, scopes: "cobv.write cobv.read cob.write cob.read pix.write pix.read webhook.read webhook.write", token: nil, token_expires_at: nil)
8
+ attr_accessor :access_token, :token_expires_at
9
+ def initialize(crt:, key:, client_id:, client_secret:, chave_pix:, conta_corrente:, scopes: "cobv.write cobv.read cob.write cob.read pix.write pix.read webhook.read webhook.write", access_token: nil, token_expires_at: nil)
9
10
  @crt = crt
10
11
  @key = key
11
12
  @client_id = client_id
@@ -13,14 +14,31 @@ module InterApi
13
14
  @chave_pix = chave_pix
14
15
  @conta_corrente = conta_corrente
15
16
  @scopes = scopes
16
- @token = token
17
+ @access_token= access_token
17
18
  @token_expires_at = token_expires_at
18
- if @token.nil? || @token_expires_at < Time.now
19
- authenticate!
20
- end
21
19
  end
22
20
 
23
- def authenticate!
21
+ def access_token
22
+ authorize if should_refresh?
23
+ @access_token
24
+ end
25
+
26
+ def should_refresh?
27
+ @access_token.blank? || @token_expires_at&.past?
28
+ end
29
+
30
+ def default_options
31
+ {
32
+ sslcert: crt,
33
+ sslkey: key,
34
+ headers: {
35
+ "Content-Type" => "application/json",
36
+ "x-conta-corrente" => @conta_corrente
37
+ }
38
+ }
39
+ end
40
+
41
+ def authorize
24
42
  headers = {
25
43
  "Content-Type" => "application/x-www-form-urlencoded"
26
44
  }
@@ -30,18 +48,18 @@ module InterApi
30
48
  grant_type: "client_credentials",
31
49
  scope: @scopes
32
50
  }
33
- response = post("/oauth/v2/token", headers: headers, sslcert: @crt, sslkey: @key, body: body) { |response| validate_response(response, "access_token") }
34
- @token = response.json["access_token"]
35
- @token_expires_at = Time.now + response.json["expires_in"]
51
+ response = post("/oauth/v2/token", headers:, body:, skip_authentication: true)
52
+ @access_token = response.access_token
53
+ @token_expires_at = Time.now + response.expires_in
36
54
  end
37
55
 
38
56
  def get_payment_request(payment_id)
39
- get_request("/pix/v2/cob/#{payment_id}", headers: build_headers, sslcert: @crt, sslkey: @key)
57
+ get("/pix/v2/cob/#{payment_id}")
40
58
  end
41
59
 
42
60
  def get_payment(payment_id)
43
- response = get("/pix/v2/cob/#{payment_id}", headers: build_headers, sslcert: @crt, sslkey: @key) { |response| validate_response(response, "txid") }
44
- InterApi::Payment.new(response.json, self)
61
+ response = get("/pix/v2/cob/#{payment_id}")
62
+ InterApi::Payment.new(response, self)
45
63
  end
46
64
 
47
65
  def create_payment_request(**args_body)
@@ -58,7 +76,7 @@ module InterApi
58
76
  solicitacaoPagador: args_body[:solicitacao_pagador],
59
77
  infoAdicionais: args_body[:info_adicionais]
60
78
  }
61
- post_request("/pix/v2/cob", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body))
79
+ post("/pix/v2/cob", body:)
62
80
  end
63
81
 
64
82
  def create_payment(amount:, payer_tax_id: nil, payer_name: nil, expiration: 3600, solicitacao_pagador: nil, info_adicionais: [])
@@ -76,22 +94,21 @@ module InterApi
76
94
  }
77
95
  body[:devedor] = build_devedor(payer_tax_id, payer_name) if payer_tax_id && payer_name
78
96
 
79
- response = post("/pix/v2/cob", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body)) { |response| validate_response(response, "txid") }
80
- InterApi::Payment.new(response.json, self)
97
+ response = post("/pix/v2/cob", body:)
98
+ InterApi::Payment.new(response, self)
81
99
  end
82
100
 
83
101
  def update_payment_request(payment_id, body)
84
- patch_request("/pix/v2/cob/#{payment_id}", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body))
102
+ patch("/pix/v2/cob/#{payment_id}", body:)
85
103
  end
86
104
 
87
105
  def update_payment(payment_id, body)
88
- response = patch("/pix/v2/cob/#{payment_id}", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body)) { |response| validate_response(response, "txid") }
89
- InterApi::Payment.new(response.json, self)
106
+ response = patch("/pix/v2/cob/#{payment_id}", body:)
107
+ InterApi::Payment.new(response, self)
90
108
  end
91
109
 
92
110
  def get_refund(end_to_end_id, id)
93
- response = get("/pix/v2/pix/#{end_to_end_id}/devolucao/#{id}", headers: build_headers, sslcert: @crt, sslkey: @key) { |response| validate_response(response, "id") }
94
- response.json
111
+ get("/pix/v2/pix/#{end_to_end_id}/devolucao/#{id}")
95
112
  end
96
113
 
97
114
  def refund_payment(end_to_end_id, amount, refund_nature, description)
@@ -101,20 +118,18 @@ module InterApi
101
118
  natureza: refund_nature,
102
119
  descricao: description
103
120
  }
104
- response = put("/pix/v2/pix/#{end_to_end_id}/devolucao/#{id}", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body)) { |response| validate_response(response, "id") }
105
- response.json
121
+ put("/pix/v2/pix/#{end_to_end_id}/devolucao/#{id}", body:)
106
122
  end
107
123
 
108
124
  def update_webhook(url)
109
125
  body = {
110
126
  webhookUrl: url
111
127
  }
112
- put("/pix/v2/webhook/#{@chave_pix}", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body)) { |response| response.success? }
128
+ put("/pix/v2/webhook/#{@chave_pix}", body:)
113
129
  end
114
130
 
115
131
  def get_webhook
116
- response = get("/pix/v2/webhook/#{@chave_pix}", headers: build_headers, sslcert: @crt, sslkey: @key) { |response| validate_response(response, "webhookUrl") }
117
- response.json
132
+ get("/pix/v2/webhook/#{@chave_pix}")
118
133
  end
119
134
 
120
135
  private
@@ -127,18 +142,5 @@ module InterApi
127
142
  "nome" => payer_name
128
143
  }
129
144
  end
130
-
131
- def build_headers
132
- {
133
- "x-conta-corrente" => @conta_corrente,
134
- "Authorization" => "Bearer #{@token}",
135
- "Content-Type" => "application/json"
136
- }
137
- end
138
-
139
- def validate_response(response, required_response_key)
140
- puts response.json unless response.success?
141
- ![500, 429].include?(response.code) || response.json.dig(*required_response_key)
142
- end
143
145
  end
144
146
  end
@@ -1,24 +1,23 @@
1
1
  module InterApi
2
2
  class Payment
3
- attr_reader :response, :txid, :end_to_end_id, :devolucoes, :copia_e_cola, :status, :solicitacao, :info_adicionais, :valor_original, :valor_pago, :criacao, :expiracao, :pago_em, :devedor_nome, :devedor_tax_id, :internal_error
3
+ attr_reader :response, :txid, :end_to_end_id, :devolucoes, :copia_e_cola, :status, :solicitacao, :info_adicionais, :valor_original, :valor_pago, :criacao, :expiracao, :pago_em, :devedor_nome, :devedor_tax_id
4
4
  def initialize(response, client)
5
5
  @client = client
6
6
  @response = response
7
- @txid = response.dig("txid")
8
- @end_to_end_id = response.dig("pix", 0, "endToEndId")
9
- @devolucoes = response.dig("pix", 0, "devolucoes")
10
- @copia_e_cola = response.dig("pixCopiaECola")
11
- @status = response.dig("status")
12
- @solicitacao = response.dig("solicitacaoPagador")
13
- @info_adicionais = response.dig("infoAdicionais")
14
- @valor_original = response.dig("valor", "original")
15
- @valor_pago = response.dig("pix", 0, "valor")
7
+ @txid = response.txid
8
+ @end_to_end_id = end_to_end
9
+ @devolucoes = devolutions
10
+ @copia_e_cola = response.pixCopiaECola
11
+ @status = response.status
12
+ @solicitacao = response["solicitacaoPagador"]
13
+ @info_adicionais = response.infoAdicionais
14
+ @valor_original = response.valor.original
15
+ @valor_pago = total_paid
16
16
  @criacao = creation_date
17
17
  @expiracao = expiration_date
18
18
  @pago_em = paid_date
19
- @devedor_nome = response.dig("devedor", "nome")
20
- @devedor_tax_id = response.dig("devedor", "cpf") || response.dig("devedor", "cnpj")
21
- @internal_error = PaymentError.new(response).internal_error
19
+ @devedor_nome = debtor_name
20
+ @devedor_tax_id = debtor_tax_id
22
21
  end
23
22
 
24
23
  def paid? external_value = nil
@@ -62,18 +61,43 @@ module InterApi
62
61
  private
63
62
 
64
63
  def creation_date
65
- return nil unless @response.dig("calendario", "criacao")
66
- Time.new(@response.dig("calendario", "criacao"))
64
+ return nil unless @response.calendario.criacao
65
+ Time.new(@response.calendario.criacao)
67
66
  end
68
67
 
69
68
  def expiration_date
70
- return nil unless @response.dig("calendario", "criacao")
71
- Time.new(@response.dig("calendario", "criacao")) + @response.dig("calendario", "expiracao")
69
+ return nil unless @response.calendario.criacao
70
+ Time.new(@response.calendario.criacao) + @response.calendario.expiracao
72
71
  end
73
72
 
74
73
  def paid_date
75
- return nil unless @response.dig("pix", 0, "horario")
76
- Time.new(@response.dig("pix", 0, "horario"))
74
+ return nil unless @response["pix"] && @response.pix.any? && @response.pix[0].horario
75
+ Time.new(@response.pix[0].horario)
76
+ end
77
+
78
+ def debtor_name
79
+ return nil unless @response["devedor"]
80
+ @response.devedor.nome
81
+ end
82
+
83
+ def debtor_tax_id
84
+ return nil unless @response["devedor"]
85
+ @response.devedor.cpf || @response.devedor.cnpj
86
+ end
87
+
88
+ def end_to_end
89
+ return nil unless @response["pix"] && @response.pix.any?
90
+ @response.pix[0].endToEndId
91
+ end
92
+
93
+ def devolutions
94
+ return nil unless @response["pix"] && @response.pix.any?
95
+ @response.pix[0].devolucoes
96
+ end
97
+
98
+ def total_paid
99
+ return nil unless @response["pix"] && @response.pix.any?
100
+ @response.pix[0].valor
77
101
  end
78
102
  end
79
103
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module InterApi
4
- VERSION = "1.2.3"
4
+ VERSION = "2.0.0"
5
5
  end
data/lib/inter_api.rb CHANGED
@@ -9,7 +9,6 @@ require "ac"
9
9
  require_relative "inter_api/version"
10
10
  require "inter_api/client_production"
11
11
  require "inter_api/payment"
12
- require "inter_api/payment_error"
13
12
 
14
13
  module InterApi
15
14
  Typhoeus::Config.timeout = 10
@@ -23,8 +22,7 @@ module InterApi
23
22
  body = {
24
23
  valor: format("%.2f", amount)
25
24
  }
26
- response = post("/pix/v2/cob/pagar/#{payment_id}", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body)) { |response| validate_response(response, "e2e") }
27
- response.json
25
+ post("/pix/v2/cob/pagar/#{payment_id}", body:)
28
26
  end
29
27
  end
30
28
 
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: inter_api
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.3
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Todas Essas Coisas
8
- autorequire:
9
8
  bindir: exe
10
9
  cert_chain: []
11
- date: 2024-10-18 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: ac
@@ -82,7 +81,6 @@ files:
82
81
  - lib/inter_api.rb
83
82
  - lib/inter_api/client_production.rb
84
83
  - lib/inter_api/payment.rb
85
- - lib/inter_api/payment_error.rb
86
84
  - lib/inter_api/version.rb
87
85
  - sig/inter_api.rbs
88
86
  homepage: https://github.com/todasessascoisas/inter_api
@@ -92,7 +90,6 @@ metadata:
92
90
  homepage_uri: https://github.com/todasessascoisas/inter_api
93
91
  source_code_uri: https://github.com/todasessascoisas/inter_api
94
92
  changelog_uri: https://github.com/todasessascoisas/inter_api
95
- post_install_message:
96
93
  rdoc_options: []
97
94
  require_paths:
98
95
  - lib
@@ -107,8 +104,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
107
104
  - !ruby/object:Gem::Version
108
105
  version: '0'
109
106
  requirements: []
110
- rubygems_version: 3.5.16
111
- signing_key:
107
+ rubygems_version: 3.6.9
112
108
  specification_version: 4
113
109
  summary: ''
114
110
  test_files: []
@@ -1,25 +0,0 @@
1
- module InterApi
2
- class PaymentError
3
- STATUS_ERROR = [400, 403, 404, 503]
4
- attr_accessor :json_response
5
- def initialize json_response
6
- @json_response = json_response
7
- end
8
-
9
- def internal_error
10
- return nil unless json_response["violacoes"] || STATUS_ERROR.include?(json_response["status"])
11
- failed_message_error || rejected_message_error || "Pagamento recusado."
12
- end
13
-
14
- private
15
-
16
- def rejected_message_error
17
- "#{json_response["title"]} => #{json_response["detail"]}"
18
- end
19
-
20
- def failed_message_error
21
- return false unless json_response["violacoes"]
22
- "#{json_response["violacoes"][0]["razao"]} => #{json_response["violacoes"][0]["propriedade"]}"
23
- end
24
- end
25
- end