fintecture 0.2.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +17 -19
  3. data/.rspec +3 -3
  4. data/.travis.yml +7 -7
  5. data/CODE_OF_CONDUCT.md +74 -74
  6. data/Gemfile +8 -6
  7. data/Gemfile.lock +59 -59
  8. data/LICENSE.txt +674 -674
  9. data/README.md +407 -238
  10. data/Rakefile +8 -6
  11. data/bin/console +15 -14
  12. data/bin/setup +8 -8
  13. data/exemples/ais.rb +53 -0
  14. data/exemples/config_ais.json +8 -0
  15. data/exemples/config_pis.json +6 -0
  16. data/exemples/pis.rb +148 -0
  17. data/exemples/ressources.rb +23 -0
  18. data/fintecture.gemspec +44 -43
  19. data/lib/fintecture/ais_client.rb +94 -0
  20. data/lib/fintecture/api/ais/account_holders.rb +61 -0
  21. data/lib/fintecture/api/ais/accounts.rb +63 -0
  22. data/lib/fintecture/api/ais/authorize.rb +72 -0
  23. data/lib/fintecture/api/ais/authorize_decoupled.rb +68 -0
  24. data/lib/fintecture/api/ais/connect.rb +65 -0
  25. data/lib/fintecture/api/ais/delete_customer.rb +53 -0
  26. data/lib/fintecture/api/ais/transactions.rb +64 -0
  27. data/lib/fintecture/{authentication.rb → api/auth/authentication.rb} +78 -76
  28. data/lib/fintecture/api/pis/connect.rb +77 -0
  29. data/lib/fintecture/api/pis/initiate.rb +52 -0
  30. data/lib/fintecture/api/pis/payments.rb +48 -0
  31. data/lib/fintecture/api/pis/refund.rb +67 -0
  32. data/lib/fintecture/api/pis/request_to_pay.rb +63 -0
  33. data/lib/fintecture/api/pis/settlements.rb +50 -0
  34. data/lib/fintecture/api/ressources/applications.rb +57 -0
  35. data/lib/fintecture/api/ressources/providers.rb +61 -0
  36. data/lib/fintecture/api/ressources/test_accounts.rb +60 -0
  37. data/lib/fintecture/base_url.rb +26 -0
  38. data/lib/fintecture/endpoints/ais.rb +17 -0
  39. data/lib/fintecture/{api/endpoints → endpoints}/authentication.rb +13 -13
  40. data/lib/fintecture/endpoints/pis.rb +16 -0
  41. data/lib/fintecture/endpoints/ressources.rb +13 -0
  42. data/lib/fintecture/exceptions.rb +72 -33
  43. data/lib/fintecture/faraday/authentication/connection.rb +140 -120
  44. data/lib/fintecture/pis_client.rb +100 -0
  45. data/lib/fintecture/utils/constants.rb +11 -14
  46. data/lib/fintecture/utils/crypto.rb +75 -78
  47. data/lib/fintecture/utils/date.rb +15 -15
  48. data/lib/fintecture/utils/validation.rb +32 -26
  49. data/lib/fintecture/version.rb +5 -3
  50. data/lib/fintecture.rb +65 -82
  51. metadata +35 -12
  52. data/lib/fintecture/api/base_url.rb +0 -29
  53. data/lib/fintecture/api/endpoints/pis.rb +0 -14
  54. data/lib/fintecture/connect.rb +0 -38
  55. data/lib/fintecture/pis.rb +0 -262
data/lib/fintecture.rb CHANGED
@@ -1,82 +1,65 @@
1
- require 'logger'
2
- require 'uri'
3
- require 'faraday'
4
-
5
- #ToRemove
6
- require 'openssl'
7
- require 'cgi'
8
-
9
- # Version
10
- require 'fintecture/version'
11
-
12
- # Modules
13
- require 'fintecture/connect'
14
- require 'fintecture/authentication'
15
-
16
- # Utilities
17
- require 'fintecture/utils/crypto'
18
-
19
- # Endpoints
20
- require 'fintecture/api/base_url'
21
- require 'fintecture/api/endpoints/authentication'
22
-
23
- # Connections
24
- require 'fintecture/faraday/authentication/connection'
25
-
26
-
27
- module Fintecture
28
- @log_level = nil
29
- @logger = nil
30
- @environment = 'sandbox'
31
-
32
- ENVIRONMENTS = %w[local test sandbox production].freeze
33
-
34
- class << self
35
- attr_accessor :app_id, :app_secret, :private_key
36
-
37
- def environment=(environment)
38
- environment = environment.downcase
39
-
40
- raise "#{environment} not a valid environment, options are [#{ENVIRONMENTS.join(', ')}]" unless ENVIRONMENTS.include?(environment)
41
-
42
- @environment = environment
43
- end
44
-
45
- def environment
46
- @environment
47
- end
48
-
49
- # Logging
50
- LEVEL_DEBUG = Logger::DEBUG
51
- LEVEL_ERROR = Logger::ERROR
52
- LEVEL_INFO = Logger::INFO
53
-
54
- def log_level
55
- @log_level
56
- end
57
-
58
- def log_level=(val)
59
- if val == "debug"
60
- val = LEVEL_DEBUG
61
- elsif val == "info"
62
- val = LEVEL_INFO
63
- end
64
-
65
- if !val.nil? && ![LEVEL_DEBUG, LEVEL_ERROR, LEVEL_INFO].include?(val)
66
- raise ArgumentError, 'log_level should only be set to `nil`, `debug` or `info`'
67
- end
68
- @log_level = val
69
- end
70
-
71
- def logger
72
- @logger
73
- end
74
-
75
- def logger=(val)
76
- @logger = val
77
- end
78
-
79
- end
80
- end
81
-
82
- Fintecture.log_level = ENV["FINTECTURE_LOG"] unless ENV["FINTECTURE_LOG"].nil?
1
+ # frozen_string_literal: true
2
+
3
+ require 'logger'
4
+ require 'uri'
5
+ require 'faraday'
6
+
7
+ # ToRemove
8
+ require 'openssl'
9
+ require 'cgi'
10
+
11
+ # Version
12
+ require 'fintecture/version'
13
+
14
+ # Modules
15
+ require 'fintecture/api/auth/authentication'
16
+
17
+ # Clients
18
+ require 'fintecture/pis_client'
19
+ require 'fintecture/ais_client'
20
+
21
+ # Utilities
22
+ require 'fintecture/utils/crypto'
23
+
24
+ # Endpoints
25
+ require 'fintecture/base_url'
26
+ require 'fintecture/endpoints/authentication'
27
+ require 'fintecture/endpoints/ais'
28
+ require 'fintecture/endpoints/pis'
29
+ require 'fintecture/endpoints/ressources'
30
+
31
+ # Connections
32
+ require 'fintecture/faraday/authentication/connection'
33
+
34
+ module Fintecture
35
+ @log_level = nil
36
+ @logger = nil
37
+
38
+ class << self
39
+ attr_accessor :logger
40
+ attr_reader :log_level
41
+
42
+ # Logging
43
+ LEVEL_DEBUG = Logger::DEBUG
44
+ LEVEL_ERROR = Logger::ERROR
45
+ LEVEL_INFO = Logger::INFO
46
+
47
+ def log_level=(val)
48
+ case val
49
+ when 'debug'
50
+ val = LEVEL_DEBUG
51
+ when 'info'
52
+ val = LEVEL_INFO
53
+ end
54
+
55
+ if !val.nil? && ![LEVEL_DEBUG, LEVEL_ERROR, LEVEL_INFO].include?(val)
56
+ raise ArgumentError, 'log_level should only be set to `nil`, `debug` or `info`'
57
+ end
58
+
59
+ @log_level = val
60
+ end
61
+ end
62
+ end
63
+
64
+ Fintecture.log_level = ENV['FINTECTURE_LOG'] unless ENV['FINTECTURE_LOG'].nil?
65
+ # TODO: Mettre a jour la gem sur le site de package
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fintecture
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.1
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Fintecture
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-09-29 00:00:00.000000000 Z
11
+ date: 2022-04-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -84,16 +84,39 @@ files:
84
84
  - Rakefile
85
85
  - bin/console
86
86
  - bin/setup
87
+ - exemples/ais.rb
88
+ - exemples/config_ais.json
89
+ - exemples/config_pis.json
90
+ - exemples/pis.rb
91
+ - exemples/ressources.rb
87
92
  - fintecture.gemspec
88
93
  - lib/fintecture.rb
89
- - lib/fintecture/api/base_url.rb
90
- - lib/fintecture/api/endpoints/authentication.rb
91
- - lib/fintecture/api/endpoints/pis.rb
92
- - lib/fintecture/authentication.rb
93
- - lib/fintecture/connect.rb
94
+ - lib/fintecture/ais_client.rb
95
+ - lib/fintecture/api/ais/account_holders.rb
96
+ - lib/fintecture/api/ais/accounts.rb
97
+ - lib/fintecture/api/ais/authorize.rb
98
+ - lib/fintecture/api/ais/authorize_decoupled.rb
99
+ - lib/fintecture/api/ais/connect.rb
100
+ - lib/fintecture/api/ais/delete_customer.rb
101
+ - lib/fintecture/api/ais/transactions.rb
102
+ - lib/fintecture/api/auth/authentication.rb
103
+ - lib/fintecture/api/pis/connect.rb
104
+ - lib/fintecture/api/pis/initiate.rb
105
+ - lib/fintecture/api/pis/payments.rb
106
+ - lib/fintecture/api/pis/refund.rb
107
+ - lib/fintecture/api/pis/request_to_pay.rb
108
+ - lib/fintecture/api/pis/settlements.rb
109
+ - lib/fintecture/api/ressources/applications.rb
110
+ - lib/fintecture/api/ressources/providers.rb
111
+ - lib/fintecture/api/ressources/test_accounts.rb
112
+ - lib/fintecture/base_url.rb
113
+ - lib/fintecture/endpoints/ais.rb
114
+ - lib/fintecture/endpoints/authentication.rb
115
+ - lib/fintecture/endpoints/pis.rb
116
+ - lib/fintecture/endpoints/ressources.rb
94
117
  - lib/fintecture/exceptions.rb
95
118
  - lib/fintecture/faraday/authentication/connection.rb
96
- - lib/fintecture/pis.rb
119
+ - lib/fintecture/pis_client.rb
97
120
  - lib/fintecture/utils/constants.rb
98
121
  - lib/fintecture/utils/crypto.rb
99
122
  - lib/fintecture/utils/date.rb
@@ -105,7 +128,7 @@ licenses:
105
128
  metadata:
106
129
  homepage_uri: http://fintecture.com
107
130
  source_code_uri: https://github.com/Fintecture/fintecture-sdk-ruby
108
- post_install_message:
131
+ post_install_message:
109
132
  rdoc_options: []
110
133
  require_paths:
111
134
  - lib
@@ -120,8 +143,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
143
  - !ruby/object:Gem::Version
121
144
  version: '0'
122
145
  requirements: []
123
- rubygems_version: 3.2.22
124
- signing_key:
146
+ rubygems_version: 3.2.32
147
+ signing_key:
125
148
  specification_version: 4
126
149
  summary: Short summary
127
150
  test_files: []
@@ -1,29 +0,0 @@
1
- module Fintecture
2
- module Api
3
- module BaseUrl
4
-
5
- FINTECTURE_OAUTH_URL = {
6
- local: 'http://localhost:3030/oauth',
7
- test: 'https://oauth-sandbox-test.fintecture.com/oauth',
8
- sandbox: 'https://api-sandbox.fintecture.com/oauth',
9
- production: 'https://api.fintecture.com/oauth'
10
- }
11
-
12
- FINTECTURE_API_URL = {
13
- local: 'http://localhost:3030',
14
- test: 'https://api-sandbox-test.fintecture.com',
15
- sandbox: 'https://api-sandbox.fintecture.com',
16
- production: 'https://api.fintecture.com'
17
- }
18
-
19
- FINTECTURE_CONNECT_URL = {
20
- local: 'http://localhost:4201',
21
- test: 'https://connect-test.fintecture.com',
22
- sandbox: 'https://connect-sandbox.fintecture.com',
23
- production: 'https://connect.fintecture.com'
24
- }
25
-
26
-
27
- end
28
- end
29
- end
@@ -1,14 +0,0 @@
1
- module Fintecture
2
- module Api
3
- module Endpoints
4
- module Pis
5
- PIS = 'pis/v2'
6
- PISPROVIDER = "#{PIS}/provider"
7
- PISCUSTOMER = "#{PIS}/customer"
8
- REQUEST_TO_PAY = "#{PIS}/request-to-pay"
9
- PAYMENTS = "#{PIS}/payments"
10
- CONNECT = "#{PIS}/connect"
11
- end
12
- end
13
- end
14
- end
@@ -1,38 +0,0 @@
1
- require 'base64'
2
- require 'json'
3
- require 'faraday'
4
- require 'fintecture/pis'
5
- require 'fintecture/utils/validation'
6
- require 'fintecture/exceptions'
7
- require 'fintecture/utils/date'
8
- require 'fintecture/utils/constants'
9
-
10
- module Fintecture
11
- class Connect
12
- class << self
13
-
14
-
15
-
16
- # Build the base of url
17
- def api_base_url
18
- Fintecture::Api::BaseUrl::FINTECTURE_API_URL[Fintecture.environment.to_sym]
19
- end
20
-
21
-
22
- private
23
-
24
-
25
-
26
-
27
- def as_json(element)
28
- return JSON(element.to_json) if element.is_a? Hash
29
-
30
- begin
31
- element.as_json
32
- rescue NoMethodError
33
- raise Fintecture::ValidationException.new("invalid parameter format, the parameter should be a Hash or an Object Model instead a #{element.class.name}")
34
- end
35
- end
36
- end
37
- end
38
- end
@@ -1,262 +0,0 @@
1
- require 'json'
2
- require 'faraday'
3
- require 'fintecture/api/endpoints/pis'
4
- require 'fintecture/api/base_url'
5
-
6
- module Fintecture
7
- class Pis
8
- class << self
9
-
10
-
11
-
12
-
13
- # ------------ PUBLIC METHODS ------------
14
- # Connect
15
- def get_connect(access_token = nil, payment_attrs = nil)
16
- # Build the request payload
17
- payload = build_payload_connect(as_json payment_attrs)
18
- # Do the _get_connect_request request
19
- _get_connect_request access_token, payload, payment_attrs
20
- end
21
-
22
- # Request_to_pay
23
- def request_to_pay(access_token = nil, payment_attrs = nil)
24
- # Build the request payload
25
- payload = build_payload_request_to_pay(as_json payment_attrs)
26
- # Do the _request_to_pay_request request
27
- _request_to_pay_request access_token, payload, payment_attrs
28
- end
29
-
30
- # Get_payments
31
- def get_payments(access_token = nil, session_id = nil)
32
- # Do the get_payments request
33
- _get_payments_request access_token, session_id
34
- end
35
-
36
- # Get_access_token
37
- def get_access_token
38
- # Do the get_access_token request
39
- response = Fintecture::Authentication.get_access_token
40
- JSON.parse response.body
41
- end
42
-
43
-
44
-
45
-
46
- private
47
- # ------------ REQUESTS ------------
48
- # Connect
49
- def _get_connect_request(access_token, payload, payment_attrs)
50
-
51
- # Get the url request
52
- url = connect_endpoint
53
-
54
- # Build uri params
55
- params = {}
56
- params['state'] = payment_attrs['state']
57
- params['redirect_uri'] = payment_attrs['redirect_uri'] if payment_attrs['redirect_uri']
58
- query_string = "?#{params.map{|key, value| "#{key}=#{value}"}.join('&')}"
59
-
60
- # Do connect request
61
- Fintecture::Faraday::Authentication::Connection.post(
62
- url: url + query_string,
63
- req_body: payload.to_json,
64
- custom_content_type: 'application/json',
65
- bearer: "Bearer #{access_token}",
66
- secure_headers: true
67
- )
68
- end
69
-
70
- # Request_to_pay
71
- def _request_to_pay_request(access_token, payload, payment_attrs)
72
-
73
- # Get the url request
74
- url = request_to_pay_endpoint
75
-
76
- additional_headers = {}
77
- additional_headers['x-language'] = payment_attrs[:x_language]
78
-
79
- # Do connect request
80
- Fintecture::Faraday::Authentication::Connection.post(
81
- url: url,
82
- req_body: payload.to_json,
83
- custom_content_type: 'application/json',
84
- bearer: "Bearer #{access_token}",
85
- secure_headers: true,
86
- additional_headers: additional_headers
87
- )
88
- end
89
-
90
- # Get_payments
91
- def _get_payments_request(access_token, session_id)
92
- url = payment_endpoint
93
-
94
- Fintecture::Faraday::Authentication::Connection.get(
95
- url: "#{url}/#{session_id}",
96
- custom_content_type: 'application/json',
97
- bearer: "Bearer #{access_token}",
98
- secure_headers: true
99
- )
100
- end
101
-
102
-
103
-
104
-
105
- # ------------ BUILD PAYLOADS ------------
106
- # Connect - Build the payload from payment_attrs
107
- def build_payload_connect(payment_attrs = nil)
108
- # Mandatory attributes
109
- attributes = {
110
- amount: payment_attrs['amount'].to_s,
111
- currency: payment_attrs['currency'],
112
- communication: payment_attrs['communication'],
113
- end_to_end_id: payment_attrs['end_to_end_id'] || Fintecture::Utils::Crypto.generate_uuid_only_chars
114
- }
115
-
116
- # Optionals attributes
117
- attributes['execution_date'] = payment_attrs['execution_date'] if payment_attrs['execution_date']
118
- attributes['debited_account_id'] = payment_attrs['debited_account_id'] if payment_attrs['debited_account_id']
119
- attributes['debited_account_type'] = payment_attrs['debited_account_type'] if payment_attrs['debited_account_type']
120
- attributes['scheme'] = payment_attrs['scheme'] if payment_attrs['scheme']
121
-
122
- # Mandatory attributes => beneficiary
123
- if payment_attrs['beneficiary']
124
- attributes['beneficiary'] = {
125
- name: payment_attrs['beneficiary']['name'],
126
- street: payment_attrs['beneficiary']['street'],
127
- zip: payment_attrs['beneficiary']['zip'],
128
- city: payment_attrs['beneficiary']['city'],
129
- country: payment_attrs['beneficiary']['country'],
130
- iban: payment_attrs['beneficiary']['iban'],
131
- swift_bic: payment_attrs['beneficiary']['swift_bic']
132
- }
133
-
134
- # Optionals attributes => beneficiary
135
- attributes['beneficiary']['number'] = payment_attrs['beneficiary']['number'] if payment_attrs['beneficiary']['number']
136
- attributes['beneficiary']['complement'] = payment_attrs['beneficiary']['complement'] if payment_attrs['beneficiary']['complement']
137
- attributes['beneficiary']['form'] = payment_attrs['beneficiary']['form'] if payment_attrs['beneficiary']['form']
138
- attributes['beneficiary']['incorporation'] = payment_attrs['beneficiary']['incorporation'] if payment_attrs['beneficiary']['incorporation']
139
- end
140
-
141
- # Mandatory meta data
142
- meta = {
143
- psu_name: payment_attrs['customer_full_name'],
144
- psu_email: payment_attrs['customer_email'],
145
- psu_phone: payment_attrs['customer_phone']
146
- }
147
-
148
- # Optionals meta data
149
- meta['psu_phone_prefix'] = payment_attrs['customer_phone_prefix'] if payment_attrs['customer_phone_prefix']
150
- meta['psu_ip'] = payment_attrs['customer_ip'] if payment_attrs['customer_ip']
151
-
152
- # Mandatory meta => psu_address
153
- meta['psu_address'] = {
154
- street: payment_attrs['customer_address']['street'],
155
- city: payment_attrs['customer_address']['city'],
156
- zip: payment_attrs['customer_address']['zip'],
157
- country: payment_attrs['customer_address']['country']
158
- }
159
-
160
- # Optionals meta => psu_address
161
- meta['psu_address']['number'] = payment_attrs['customer_address']['number'] if payment_attrs['customer_address']['number']
162
- meta['psu_address']['complement'] = payment_attrs['customer_address']['complement'] if payment_attrs['customer_address']['complement']
163
-
164
- # Return the payload
165
- {
166
- meta: meta,
167
- data: {
168
- type: 'PIS',
169
- attributes: attributes,
170
- }
171
- }
172
- end
173
-
174
- # Request_to_pay - Build the payload from payment_attrs
175
- def build_payload_request_to_pay(payment_attrs = nil)
176
- # Mandatory attributes
177
- attributes = {
178
- amount: payment_attrs['amount'],
179
- currency: payment_attrs['currency'],
180
- communication: payment_attrs['communication']
181
- }
182
-
183
- # Mandatory meta data
184
- meta = {
185
- psu_name: payment_attrs['customer_full_name'],
186
- psu_email: payment_attrs['customer_email'],
187
- psu_phone: payment_attrs['customer_phone'],
188
- psu_phone_prefix: payment_attrs['customer_phone_prefix']
189
- }
190
-
191
- # Optionals meta psu_address
192
- if payment_attrs['customer_address']
193
- meta['psu_address'] = {}
194
- meta['psu_address']['street'] = payment_attrs['customer_address']['street'] if payment_attrs['customer_address']['street']
195
- meta['psu_address']['number'] = payment_attrs['customer_address']['number'] if payment_attrs['customer_address']['number']
196
- meta['psu_address']['city'] = payment_attrs['customer_address']['city'] if payment_attrs['customer_address']['city']
197
- meta['psu_address']['zip'] = payment_attrs['customer_address']['zip'] if payment_attrs['customer_address']['zip']
198
- meta['psu_address']['country'] = payment_attrs['customer_address']['country'] if payment_attrs['customer_address']['country']
199
- end
200
-
201
- # Optionals meta data
202
- meta['expirary'] = payment_attrs['expirary'] if payment_attrs['expirary']
203
- meta['cc'] = payment_attrs['cc'] if payment_attrs['cc']
204
- meta['bcc'] = payment_attrs['bcc'] if payment_attrs['bcc']
205
-
206
-
207
- # Return the payload
208
- {
209
- meta: meta,
210
- data: {
211
- type: 'REQUEST_TO_PAY',
212
- attributes: attributes,
213
- }
214
- }
215
- end
216
-
217
-
218
-
219
-
220
- # ------------ API ENDPOINTS ------------
221
- # Request_to_pay
222
- def request_to_pay_endpoint
223
- "#{api_base_url}/#{Fintecture::Api::Endpoints::Pis::REQUEST_TO_PAY}"
224
- end
225
-
226
- # Payment
227
- def payment_endpoint
228
- "#{api_base_url}/#{Fintecture::Api::Endpoints::Pis::PAYMENTS}"
229
- end
230
-
231
- # Connect
232
- def connect_endpoint
233
- "#{api_base_url}/#{Fintecture::Api::Endpoints::Pis::CONNECT}"
234
- end
235
-
236
-
237
-
238
-
239
- # ------------ BASE URL ------------
240
- def base_url
241
- Fintecture::Api::BaseUrl::FINTECTURE_CONNECT_URL[Fintecture.environment.to_sym]
242
- end
243
-
244
- def api_base_url
245
- Fintecture::Api::BaseUrl::FINTECTURE_API_URL[Fintecture.environment.to_sym]
246
- end
247
-
248
-
249
-
250
- # ------------ TOOLS ------------
251
- def as_json(element)
252
- return JSON(element.to_json) if element.is_a? Hash
253
-
254
- begin
255
- element.as_json
256
- rescue NoMethodError
257
- raise Fintecture::ValidationException.new("invalid parameter format, the parameter should be a Hash or an Object Model instead a #{element.class.name}")
258
- end
259
- end
260
- end
261
- end
262
- end