inter_api 1.2.4 → 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: 5bce60cbe6d272a616ad453ededf92866fb10a330c185a61b5702552e7af4eec
4
- data.tar.gz: 546c96cb7632dcab75ca7a0f1fddc8d45ef41bf3be2a9f785ea6384dc056676f
3
+ metadata.gz: 916894b13dfca9706d937b33783c82abadfa0b38cd8e453c16cf38722cbf91bd
4
+ data.tar.gz: cfe2a096a7ff9b744e30710f750caac01a29b32d84e8bbe9a55d2d062650967f
5
5
  SHA512:
6
- metadata.gz: d1ba5f3f4f6cde8345c8caf9587cdfe15258aa3be0180c6daeee1002f03b6c76cf16cb7256b56113784dd1a953daa695292a64cbb47c143c99983b9e99553cef
7
- data.tar.gz: 1a1432eeb41ab959c7304f8f01694f147de1610ed1fa0410eada7a95df7c5e89c4eff845f9e4f13ec31e17231023a295252ad61cdaf661abbe975d9219115c7c
6
+ metadata.gz: c7767f24ea9c94da6f4fba3e5a8e11b5314999a897fcd04c36470dcf8bf5c9da6154ebdc4fb8501cf339c3746c6f3d86e2ae9aadfbb1379b37268751de7b4151
7
+ data.tar.gz: 3d2be806b3bc8c4ce6323bebc0a64d19ed2050e373ef785da9d9292b690016843cdb8c76a7a0e618a597f857751bb5a12c90500113ad615611dc7eb67d68aa1d
@@ -5,8 +5,8 @@ module InterApi
5
5
  SAVE_RESPONSES = true
6
6
 
7
7
  attr_reader :crt, :key, :client_id, :client_secret, :chave_pix, :conta_corrente, :scopes
8
- attr_accessor :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", 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)
10
10
  @crt = crt
11
11
  @key = key
12
12
  @client_id = client_id
@@ -14,14 +14,31 @@ module InterApi
14
14
  @chave_pix = chave_pix
15
15
  @conta_corrente = conta_corrente
16
16
  @scopes = scopes
17
- @token = token
17
+ @access_token= access_token
18
18
  @token_expires_at = token_expires_at
19
- if @token.nil? || @token_expires_at < Time.now
20
- authenticate!
21
- end
22
19
  end
23
20
 
24
- 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
25
42
  headers = {
26
43
  "Content-Type" => "application/x-www-form-urlencoded"
27
44
  }
@@ -31,18 +48,18 @@ module InterApi
31
48
  grant_type: "client_credentials",
32
49
  scope: @scopes
33
50
  }
34
- response = post("/oauth/v2/token", headers: headers, sslcert: @crt, sslkey: @key, body: body) { |response| validate_response(response, "access_token") }
35
- @token = response.json["access_token"]
36
- @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
37
54
  end
38
55
 
39
56
  def get_payment_request(payment_id)
40
- get_request("/pix/v2/cob/#{payment_id}", headers: build_headers, sslcert: @crt, sslkey: @key)
57
+ get("/pix/v2/cob/#{payment_id}")
41
58
  end
42
59
 
43
60
  def get_payment(payment_id)
44
- response = get("/pix/v2/cob/#{payment_id}", headers: build_headers, sslcert: @crt, sslkey: @key) { |response| validate_response(response, "txid") }
45
- InterApi::Payment.new(response.json, self)
61
+ response = get("/pix/v2/cob/#{payment_id}")
62
+ InterApi::Payment.new(response, self)
46
63
  end
47
64
 
48
65
  def create_payment_request(**args_body)
@@ -59,7 +76,7 @@ module InterApi
59
76
  solicitacaoPagador: args_body[:solicitacao_pagador],
60
77
  infoAdicionais: args_body[:info_adicionais]
61
78
  }
62
- post_request("/pix/v2/cob", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body))
79
+ post("/pix/v2/cob", body:)
63
80
  end
64
81
 
65
82
  def create_payment(amount:, payer_tax_id: nil, payer_name: nil, expiration: 3600, solicitacao_pagador: nil, info_adicionais: [])
@@ -77,22 +94,21 @@ module InterApi
77
94
  }
78
95
  body[:devedor] = build_devedor(payer_tax_id, payer_name) if payer_tax_id && payer_name
79
96
 
80
- response = post("/pix/v2/cob", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body)) { |response| validate_response(response, "txid") }
81
- InterApi::Payment.new(response.json, self)
97
+ response = post("/pix/v2/cob", body:)
98
+ InterApi::Payment.new(response, self)
82
99
  end
83
100
 
84
101
  def update_payment_request(payment_id, body)
85
- 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:)
86
103
  end
87
104
 
88
105
  def update_payment(payment_id, body)
89
- response = patch("/pix/v2/cob/#{payment_id}", headers: build_headers, sslcert: @crt, sslkey: @key, body: JSON.dump(body)) { |response| validate_response(response, "txid") }
90
- InterApi::Payment.new(response.json, self)
106
+ response = patch("/pix/v2/cob/#{payment_id}", body:)
107
+ InterApi::Payment.new(response, self)
91
108
  end
92
109
 
93
110
  def get_refund(end_to_end_id, id)
94
- response = get("/pix/v2/pix/#{end_to_end_id}/devolucao/#{id}", headers: build_headers, sslcert: @crt, sslkey: @key) { |response| validate_response(response, "id") }
95
- response.json
111
+ get("/pix/v2/pix/#{end_to_end_id}/devolucao/#{id}")
96
112
  end
97
113
 
98
114
  def refund_payment(end_to_end_id, amount, refund_nature, description)
@@ -102,20 +118,18 @@ module InterApi
102
118
  natureza: refund_nature,
103
119
  descricao: description
104
120
  }
105
- 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") }
106
- response.json
121
+ put("/pix/v2/pix/#{end_to_end_id}/devolucao/#{id}", body:)
107
122
  end
108
123
 
109
124
  def update_webhook(url)
110
125
  body = {
111
126
  webhookUrl: url
112
127
  }
113
- 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:)
114
129
  end
115
130
 
116
131
  def get_webhook
117
- response = get("/pix/v2/webhook/#{@chave_pix}", headers: build_headers, sslcert: @crt, sslkey: @key) { |response| validate_response(response, "webhookUrl") }
118
- response.json
132
+ get("/pix/v2/webhook/#{@chave_pix}")
119
133
  end
120
134
 
121
135
  private
@@ -128,18 +142,5 @@ module InterApi
128
142
  "nome" => payer_name
129
143
  }
130
144
  end
131
-
132
- def build_headers
133
- {
134
- "x-conta-corrente" => @conta_corrente,
135
- "Authorization" => "Bearer #{@token}",
136
- "Content-Type" => "application/json"
137
- }
138
- end
139
-
140
- def validate_response(response, required_response_key)
141
- puts response.json unless response.success?
142
- ![500, 429].include?(response.code) || response.json.dig(*required_response_key)
143
- end
144
145
  end
145
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.4"
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.4
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-25 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