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 +4 -4
- data/lib/inter_api/client_production.rb +41 -39
- data/lib/inter_api/payment.rb +43 -19
- data/lib/inter_api/version.rb +1 -1
- data/lib/inter_api.rb +1 -3
- metadata +3 -7
- data/lib/inter_api/payment_error.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 916894b13dfca9706d937b33783c82abadfa0b38cd8e453c16cf38722cbf91bd
|
4
|
+
data.tar.gz: cfe2a096a7ff9b744e30710f750caac01a29b32d84e8bbe9a55d2d062650967f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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 :
|
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",
|
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
|
-
@
|
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
|
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
|
34
|
-
@
|
35
|
-
@token_expires_at = Time.now + response.
|
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
|
-
|
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}"
|
44
|
-
InterApi::Payment.new(response
|
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
|
-
|
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",
|
80
|
-
InterApi::Payment.new(response
|
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
|
-
|
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}",
|
89
|
-
InterApi::Payment.new(response
|
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
|
-
|
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
|
-
|
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}",
|
128
|
+
put("/pix/v2/webhook/#{@chave_pix}", body:)
|
113
129
|
end
|
114
130
|
|
115
131
|
def get_webhook
|
116
|
-
|
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
|
data/lib/inter_api/payment.rb
CHANGED
@@ -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
|
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.
|
8
|
-
@end_to_end_id =
|
9
|
-
@devolucoes =
|
10
|
-
@copia_e_cola = response.
|
11
|
-
@status = response.
|
12
|
-
@solicitacao = response
|
13
|
-
@info_adicionais = response.
|
14
|
-
@valor_original = response.
|
15
|
-
@valor_pago =
|
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 =
|
20
|
-
@devedor_tax_id =
|
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.
|
66
|
-
Time.new(@response.
|
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.
|
71
|
-
Time.new(@response.
|
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
|
76
|
-
Time.new(@response.
|
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
|
data/lib/inter_api/version.rb
CHANGED
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
|
-
|
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:
|
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:
|
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.
|
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
|