fintecture 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +18 -17
  3. data/.rspec +3 -3
  4. data/.travis.yml +7 -7
  5. data/CODE_OF_CONDUCT.md +74 -74
  6. data/Gemfile +8 -8
  7. data/Gemfile.lock +59 -59
  8. data/LICENSE.txt +674 -674
  9. data/README.md +405 -408
  10. data/Rakefile +8 -8
  11. data/bin/console +15 -15
  12. data/bin/setup +8 -8
  13. data/exemples/ais.rb +53 -53
  14. data/exemples/config_ais.json +7 -7
  15. data/exemples/config_pis.json +5 -5
  16. data/exemples/pis.rb +148 -148
  17. data/exemples/ressources.rb +23 -23
  18. data/fintecture.gemspec +44 -44
  19. data/lib/fintecture/ais_client.rb +94 -94
  20. data/lib/fintecture/api/ais/account_holders.rb +61 -61
  21. data/lib/fintecture/api/ais/accounts.rb +63 -63
  22. data/lib/fintecture/api/ais/authorize.rb +72 -72
  23. data/lib/fintecture/api/ais/authorize_decoupled.rb +68 -68
  24. data/lib/fintecture/api/ais/connect.rb +65 -65
  25. data/lib/fintecture/api/ais/delete_customer.rb +53 -53
  26. data/lib/fintecture/api/ais/transactions.rb +64 -64
  27. data/lib/fintecture/api/auth/authentication.rb +78 -78
  28. data/lib/fintecture/api/pis/connect.rb +84 -77
  29. data/lib/fintecture/api/pis/initiate.rb +52 -52
  30. data/lib/fintecture/api/pis/payments.rb +54 -48
  31. data/lib/fintecture/api/pis/refund.rb +67 -67
  32. data/lib/fintecture/api/pis/request_to_pay.rb +63 -63
  33. data/lib/fintecture/api/pis/settlements.rb +50 -50
  34. data/lib/fintecture/api/ressources/applications.rb +57 -57
  35. data/lib/fintecture/api/ressources/providers.rb +61 -61
  36. data/lib/fintecture/api/ressources/test_accounts.rb +60 -60
  37. data/lib/fintecture/base_url.rb +26 -26
  38. data/lib/fintecture/endpoints/ais.rb +17 -17
  39. data/lib/fintecture/endpoints/authentication.rb +13 -13
  40. data/lib/fintecture/endpoints/pis.rb +16 -16
  41. data/lib/fintecture/endpoints/ressources.rb +13 -13
  42. data/lib/fintecture/exceptions.rb +48 -75
  43. data/lib/fintecture/faraday/authentication/connection.rb +140 -140
  44. data/lib/fintecture/pis_client.rb +100 -100
  45. data/lib/fintecture/utils/constants.rb +11 -11
  46. data/lib/fintecture/utils/crypto.rb +75 -75
  47. data/lib/fintecture/utils/date.rb +15 -15
  48. data/lib/fintecture/utils/validation.rb +32 -32
  49. data/lib/fintecture/version.rb +5 -5
  50. data/lib/fintecture.rb +65 -65
  51. metadata +12 -6
data/README.md CHANGED
@@ -1,408 +1,405 @@
1
- # Fintecture
2
-
3
- Fintecture is connected with most European banks and enables a user to initiate a payment directly from their bank account. This results to a bank transfer sent from the user's bank account directly to your bank account, skipping all intermediaries. Within the SEPA region, transfers take between 10 seconds to 1 business day to arrive on your bank account. No hidden fees. Check out [our website](https://fintecture.com/).
4
-
5
- ## Installation
6
-
7
- Add this line to your application's Gemfile:
8
-
9
- ```ruby
10
- gem 'fintecture'
11
- ```
12
-
13
-
14
- And then execute:
15
-
16
- $ bundle
17
-
18
- Or install it yourself as:
19
-
20
- $ gem install fintecture
21
-
22
- ## Usage
23
-
24
- Get started by subscribing to a free developer account. Join today to get access to our sandbox by registering on the [developer console](https://console.fintecture.com) by creating your first sets of API Keys. When creating an account, specify you are an ECOMMERCE. When you’re ready to deploy to production, just go through the Activation Form in your console. Once the Fintecture Team activates your account, you’ll be ready to start receiving real bank transfers directly on the bank account specified during activation.
25
-
26
- By default `sandbox` is the initial environment, but you can change to sandbox by doing
27
-
28
- Initialize your PIS client
29
-
30
- ```ruby
31
- pis_client = Fintecture::PisClient.new({
32
- environment: 'sandbox', # => ["sandbox", "test", "production"]
33
- app_id: 'your_app_id',
34
- app_secret: 'your_app_secret',
35
- private_key: %q(your_private_key)
36
- })
37
- ```
38
-
39
-
40
-
41
- Initialize your AIS client
42
-
43
- ```ruby
44
- ais_client = Fintecture::AisClient.new({
45
- environment: 'sandbox', # => ["sandbox", "test", "production"]
46
- app_id: 'your_app_id',
47
- app_secret: 'your_app_secret',
48
- private_key: %q(your_private_key)
49
- })
50
- ```
51
-
52
-
53
-
54
- ## PIS
55
- PIS client properties
56
- ```ruby
57
- pis_client.app_id
58
- pis_client.app_secret
59
- pis_client.private_key
60
- pis_client.environment
61
- pis_client.token
62
- pis_client.token_expires_in
63
- ```
64
-
65
- #### Access token
66
- This method return the token and store it in the client for future requests
67
- ```ruby
68
- pis_client.generate_token
69
- ```
70
-
71
-
72
- #### POST /connect
73
- Documentation => https://docs.fintecture.com/v2/#post-post-post-connect
74
- - An example of the JSON payload in the right column in "Request Body" section
75
- - An exemple of response in the right column in "Request Body" section
76
- - The definitions of each field in the "Body Parameters" section
77
-
78
- ```ruby
79
- # connect (payload, state, redirect_uri = nil, origin_uri = nil)
80
- # payload: {}
81
- # state: string
82
- # redirect_uri: string
83
- # origin_uri: string
84
-
85
- response = pis_client.connect payload, "my-state", "https://www.my-redirect-uri.fr", "https://www.my-origine-uri.fr"
86
- ```
87
-
88
-
89
- #### POST /initiate
90
- Documentation => https://docs.fintecture.com/v2/#post-post-post-initiate
91
- - An example of the JSON payload in the right column in "Request Body" section
92
- - An exemple of response in the right column in "Request Body" section
93
- - The definitions of each field in the "Body Parameters" section
94
-
95
- ```ruby
96
- # initiate (payload, provider_id, redirect_uri, state = nil)
97
- # payload: {}
98
- # provider_id: string
99
- # redirect_uri: string
100
- # state: string
101
-
102
- response = pis_client.initiate payload, "cmcifrpp", "https://www.my-redirect-uri.fr", "my-state"
103
- ```
104
-
105
- #### GET /payments
106
- Documentation => https://docs.fintecture.com/v2/#get-get-get-payments
107
- - An exemple of response in the right column in "Request Body" section
108
-
109
- ```ruby
110
- # payments (session_id = nil)
111
- # session_id: string
112
-
113
- response = pis_client.payments "7f47d3675f5d4964bc416b43af63b06e"
114
- OR
115
- response = pis_client.payments
116
- ```
117
- This endpoint returns the details of all transfers or of a specific transfer
118
-
119
- #### POST /refund
120
- Documentation => https://docs.fintecture.com/v2/#post-post-post-refund
121
- - An exemple of response in the right column in "Request Body" section
122
-
123
- ```ruby
124
- # refund (session_id, amount = nil, user_id = nil))
125
- # session_id: string
126
- # amount: number
127
- # user_id: string
128
-
129
- response = pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 5.75, "8886aaa4-527d-4253-8951-a07d8bf4cf52"
130
- ```
131
- If the amount is not specified, refund the total
132
-
133
- #### POST /request-to-pay
134
- Documentation => https://docs.fintecture.com/v2/#post-post-post-request-to-pay
135
- - An example of the JSON payload in the right column in "Request Body" section
136
- - An exemple of response in the right column in "Request Body" section
137
- - The definitions of each field in the "Body Parameters" section
138
- - The definition of x_language field in the "Header Parameters" section
139
-
140
- ```ruby
141
- # refund (payload, x_language, redirect_uri = nil)
142
- # payload: {}
143
- # x_language: string
144
- # redirect_uri: string
145
-
146
- response = pis_client.request_to_pay payload, 'fr', "https://www.my-redirect-uri.fr"
147
- ```
148
-
149
- #### GET /settlements
150
- Documentation => https://docs.fintecture.com/v2/#get-get-get-settlements
151
- - An exemple of response in the right column in "Request Body" section
152
-
153
- ```ruby
154
- # settlements (settlement_id = nil, include_payments = false)
155
- # settlement_id: string
156
- # include_payments: boolean
157
-
158
- response = pis_client.settlements
159
- OR
160
- response = pis_client.settlements "127335fdeb073e0eb2313ba0bd71ad44"
161
- OR
162
- response = pis_client.settlements "127335fdeb073e0eb2313ba0bd71ad44", true
163
- ```
164
-
165
- ## AIS
166
- AIS client properties
167
- ```ruby
168
- ais_client.app_id
169
- ais_client.app_secret
170
- ais_client.private_key
171
- ais_client.environment
172
- ais_client.token
173
- ais_client.refresh_token
174
- ais_client.token_expires_in
175
- ```
176
- #### GET /connect
177
- Documentation => https://docs.fintecture.com/v2/#get-get-get-connect
178
- - An exemple of response in the right column in "Request Body" section
179
-
180
- ```ruby
181
- # connect (state, redirect_uri, scope = nil)
182
- # state: string
183
- # redirect_uri: string
184
- # scope: string
185
-
186
- response = ais_client.connect "my-state", "https://www.my-redirect-uri.fr"
187
- ```
188
- When you follow the returned url, you'll be redirect with "customer_id" & "code" parameters
189
- ```ruby
190
- customer_id = "fa51058b5f8306f1e048f1adda5488a9"
191
- code = "f66ec660b0bbd2797bf6847fb4b98454"
192
- ```
193
-
194
- #### Access token
195
- Documentation => https://docs.fintecture.com/v2/#post-post-post-oauth-accesstoken
196
-
197
- This method return the token and store it in the client for future requests
198
- ```ruby
199
- ais_client.generate_token code
200
- ```
201
-
202
- #### Refresh token
203
- Documentation => https://docs.fintecture.com/v2/#post-post-post-oauth-refreshtoken
204
-
205
- This method return the token and store it in the client for future requests
206
- If you do not pass the refreshtoken as a parameter, the client refreshtoken will be used
207
- ```ruby
208
- # generate_refresh_token (refresh_token = nil)
209
- # refresh_token: string
210
-
211
- ais_client.generate_refresh_token
212
- ```
213
-
214
- #### GET /authorize
215
- Documentation => https://docs.fintecture.com/v2/#get-get-get-authorize
216
- - An exemple of response in the right column in "Request Body" section
217
- - The definition of "x_psu_id" and "x_psu_ip_address" fields in the "Header Parameters" section
218
-
219
- ```ruby
220
- # authorize (app_id_auth: false, provider_id:, redirect_uri:, state: nil, x_psu_id: nil, x_psu_ip_address: nil)
221
- # app_id_auth: boolean
222
- # provider_id: string
223
- # redirect_uri: string
224
- # state: string
225
- # x_psu_id: string
226
- # x_psu_ip_address: string
227
-
228
- response = ais_client.authorize app_id_auth: false, provider_id: "agfbfr", redirect_uri: "https://www.google.fr", state: "ok", x_psu_id: "123456", x_psu_ip_address: "192.168.1.1"
229
- ```
230
-
231
- #### GET /authorize/decoupled
232
- Documentation => https://docs.fintecture.com/v2/#get-get-get-authorize-decoupled
233
- - An exemple of response in the right column in "Request Body" section
234
-
235
- ```ruby
236
- # authorize_decoupled (app_id_auth: false, provider_id:, polling_id:)
237
- # app_id_auth: boolean
238
- # provider_id: string
239
- # polling_id: string
240
-
241
- response = ais_client.authorize_decoupled app_id_auth: false, provider_id: "agfbfr", polling_id: "1234"
242
- ```
243
-
244
- #### GET /accounts
245
- Documentation => https://docs.fintecture.com/v2/#get-get-get-accounts
246
- - An exemple of response in the right column in "Request Body" section
247
-
248
- ```ruby
249
- # accounts (customer_id:, account_id: nil, remove_nulls: nil, withBalances: nil)
250
- # customer_id: string
251
- # account_id: string
252
- # remove_nulls: boolean
253
- # withBalances: boolean
254
-
255
- response = ais_client.accounts customer_id: customer_id, account_id: nil, remove_nulls: nil, withBalances: nil
256
- ```
257
-
258
- #### GET /transactions
259
- Documentation => https://docs.fintecture.com/v2/#get-get-get-transactions
260
- - An exemple of response in the right column in "Request Body" section
261
-
262
- ```ruby
263
- # transactions (customer_id:, account_id:, remove_nulls: nil, convert_dates: nil, filters: nil)
264
- # customer_id: string
265
- # account_id: string
266
- # remove_nulls: boolean
267
- # convert_dates: boolean
268
- # filters: {}
269
-
270
- transactions_filters = {
271
- "filter[date_to]": "2020-01-01",
272
- 'filter[date_from]': "max" # Date or 'max'
273
- }
274
- response = ais_client.transactions customer_id: customer_id, account_id: "b71722204d1a3f5ecd895", remove_nulls: true, convert_dates: true, filters: transactions_filters
275
- ```
276
-
277
- #### GET /accountholders
278
- Documentation => https://docs.fintecture.com/v2/#get-get-get-accountholders
279
- - An exemple of response in the right column in "Request Body" section
280
-
281
- ```ruby
282
- # account_holders (customer_id:, remove_nulls: nil)
283
- # customer_id: string
284
- # remove_nulls: boolean
285
-
286
- response = ais_client.account_holders customer_id: customer_id, remove_nulls: true
287
- ```
288
-
289
- #### DELETE /customer
290
- Documentation => https://docs.fintecture.com/v2/#delete-delete-delete-customer
291
- - An exemple of response in the right column in "Request Body" section
292
-
293
- ```ruby
294
- # account_holders (customer_id:)
295
- # customer_id: string
296
-
297
- response = ais_client.delete_customer customer_id: customer_id
298
- ```
299
- ## RESSOURCES
300
- Use the PIS client to get ressources. The "generate_token" step is not needed for this calls
301
-
302
- #### GET /providers
303
- Documentation => https://docs.fintecture.com/v2/#get-get-get-providers
304
- - An exemple of response in the right column in "Request Body" section
305
-
306
- ```ruby
307
- # providers (provider_id: nil, paramsProviders: nil)
308
- # provider_id: string
309
- # paramsProviders: string
310
-
311
- paramsProviders = {
312
- 'filter[country]': 'FR',
313
- 'filter[pis]': 'SEPA',
314
- 'filter[ais]': 'Accounts',
315
- 'filter[psu_type]': 'retail',
316
- 'filter[auth_model]': 'redirect',
317
- 'sort[name]': 'DESC',
318
- 'sort[full_name]': 'DESC',
319
- 'sort[country]': 'DESC',
320
- 'sort[provider_id]': 'DESC'
321
- }
322
- response = pis_client.providers provider_id: 'agfbfr', paramsProviders: paramsProviders
323
- ```
324
-
325
- #### GET /applications
326
- Documentation => https://docs.fintecture.com/v2/#get-get-get-applications
327
- - An exemple of response in the right column in "Request Body" section
328
-
329
- ```ruby
330
- # applications ()
331
-
332
- response = pis_client.applications
333
- ```
334
-
335
- #### GET /testaccounts
336
- Documentation => https://docs.fintecture.com/v2/#get-get-get-testaccounts
337
- - An exemple of response in the right column in "Request Body" section
338
-
339
- ```ruby
340
- # test_accounts (provider_id = nil)
341
- # provider_id: string
342
-
343
- response = pis_client.test_accounts 'agfbfr'
344
- ```
345
-
346
- ## API Errors handling
347
- Hash version
348
- ```ruby
349
- begin
350
- pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 1
351
- rescue => e
352
- error = JSON.parse e.to_s
353
- puts error
354
- end
355
- ```
356
-
357
- ```ruby
358
- {
359
- "type"=>"Fintecture api",
360
- "status"=>401,
361
- "errors"=>[
362
- {
363
- "code"=>"invalid_token",
364
- "title"=>"Invalid Token",
365
- "message"=>"The token is either invalid or expired."
366
- }
367
- ],
368
- "error_string"=>"\nFintecture server errors : \n status: 401 \n code: unauthorized\n id : 3006ddbf-2f97-44d8-9f63-35711b78e8a6\n\n code: invalid_token\n title: Invalid Token\n message: The token is either invalid or expired.\n\n"
369
- }
370
- ```
371
- Text version
372
- ```ruby
373
- begin
374
- pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 1
375
- rescue => e
376
- error = JSON.parse e.to_s
377
- puts error['error_string']
378
- end
379
- ```
380
-
381
- ```ruby
382
- Fintecture server errors :
383
- status: 401
384
- code: unauthorized
385
- id : 2adb9e35-ff0d-4477-959e-b1b1a7d7c812
386
-
387
- code: invalid_token
388
- title: Invalid Token
389
- message: The token is either invalid or expired.
390
-
391
- ```
392
- ## Development
393
-
394
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
395
-
396
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
397
-
398
- ## Contributing
399
-
400
- Bug reports and pull requests are welcome on GitHub at https://github.com/Fintecture/fintecture-sdk-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
401
-
402
- ## License
403
-
404
- The gem is available as open source under the terms of the [GPL-3.0 License](http://www.gnu.org/licenses/gpl-3.0.txt).
405
-
406
- ## Code of Conduct
407
-
408
- Everyone interacting in the Fintecture project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/Fintecture/fintecture-sdk-ruby/blob/master/CODE_OF_CONDUCT.md).
1
+ # Fintecture
2
+
3
+ Fintecture is connected with most European banks and enables a user to initiate a payment directly from their bank account. This results to a bank transfer sent from the user's bank account directly to your bank account, skipping all intermediaries. Within the SEPA region, transfers take between 10 seconds to 1 business day to arrive on your bank account. No hidden fees. Check out [our website](https://fintecture.com/).
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ ```ruby
10
+ gem 'fintecture'
11
+ ```
12
+
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install fintecture
21
+
22
+ ## Usage
23
+
24
+ Get started by subscribing to a free developer account. Join today to get access to our sandbox by registering on the [developer console](https://console.fintecture.com) by creating your first sets of API Keys. When creating an account, specify you are an ECOMMERCE. When you’re ready to deploy to production, just go through the Activation Form in your console. Once the Fintecture Team activates your account, you’ll be ready to start receiving real bank transfers directly on the bank account specified during activation.
25
+
26
+ By default `sandbox` is the initial environment, but you can change to production when initializing your PIS or AIS client:
27
+
28
+ ### Initialize your PIS client
29
+
30
+ ```ruby
31
+ pis_client = Fintecture::PisClient.new({
32
+ environment: 'sandbox', # => ["sandbox", "test", "production"]
33
+ app_id: 'your_app_id',
34
+ app_secret: 'your_app_secret',
35
+ private_key: %q(your_private_key)
36
+ })
37
+ ```
38
+
39
+
40
+
41
+ ### Initialize your AIS client
42
+
43
+ ```ruby
44
+ ais_client = Fintecture::AisClient.new({
45
+ environment: 'sandbox', # => ["sandbox", "test", "production"]
46
+ app_id: 'your_app_id',
47
+ app_secret: 'your_app_secret',
48
+ private_key: %q(your_private_key)
49
+ })
50
+ ```
51
+
52
+
53
+
54
+ ## PIS
55
+
56
+ PIS client properties
57
+ ```ruby
58
+ pis_client.app_id
59
+ pis_client.app_secret
60
+ pis_client.private_key
61
+ pis_client.environment
62
+ pis_client.token
63
+ pis_client.token_expires_in
64
+ ```
65
+
66
+ ### Access token
67
+ This method return the token and store it in the client for future requests
68
+ ```ruby
69
+ pis_client.generate_token
70
+ ```
71
+
72
+
73
+ ### POST /connect
74
+
75
+ Creates a connect session for a PSU to initiate a payment.
76
+
77
+ Documentation:
78
+ - https://doc.fintecture.com/reference/createpisv2connect
79
+
80
+ ```ruby
81
+ # connect (payload, state, redirect_uri = nil, origin_uri = nil, with_virtualbeneficiary: false)
82
+ # payload: {}
83
+ # state: string
84
+ # redirect_uri: string
85
+ # origin_uri: string
86
+
87
+ response = pis_client.connect payload, "my-state", "https://www.my-redirect-uri.fr", "https://www.my-origine-uri.fr", with_virtualbeneficiary: true
88
+ ```
89
+
90
+ ### GET /payments
91
+
92
+ Get the details of all transfers or of a specific transfer, with virtual beneficiary information if required.
93
+
94
+ Documentation:
95
+ - Get all payments: https://doc.fintecture.com/reference/getpisv2payments
96
+ - Get a specific payment: https://doc.fintecture.com/reference/getpaymentsession
97
+
98
+ ```ruby
99
+ # payments (session_id = nil, with_virtualbeneficiary: false)
100
+ # session_id: string
101
+
102
+ response = pis_client.payments
103
+ # OR
104
+ response = pis_client.payments "7f47d3675f5d4964bc416b43af63b06e"
105
+ # OR
106
+ response = pis_client.payments "7f47d3675f5d4964bc416b43af63b06e", with_virtualbeneficiary: true
107
+ ```
108
+
109
+ ### POST /refund
110
+
111
+ Initiates a refund. If the amount is not specified, refunds the total.
112
+
113
+ Documentation:
114
+ - https://doc.fintecture.com/reference/createpisv2refund
115
+
116
+ ```ruby
117
+ # refund (session_id, amount = nil, user_id = nil))
118
+ # session_id: string
119
+ # amount: number
120
+ # user_id: string
121
+
122
+ response = pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 5.75, "8886aaa4-527d-4253-8951-a07d8bf4cf52"
123
+ ```
124
+
125
+ ### POST /request-to-pay
126
+
127
+ Creates a request to pay that merchant can then share by link, mail or sms to a customer for asynchronous payment.
128
+
129
+ Documentation:
130
+ - https://doc.fintecture.com/reference/createpisv2requesttopay
131
+
132
+ ```ruby
133
+ # refund (payload, x_language, redirect_uri = nil)
134
+ # payload: {}
135
+ # x_language: string
136
+ # redirect_uri: string
137
+
138
+ response = pis_client.request_to_pay payload, 'fr', "https://www.my-redirect-uri.fr"
139
+ ```
140
+
141
+ ### GET /settlements
142
+
143
+ Get the details of all settlements or of a specific settlement.
144
+
145
+ Documentation:
146
+ - Get all settlements: https://doc.fintecture.com/reference/getpisv2settlements
147
+ - Get a specific settlement: https://doc.fintecture.com/reference/getpisv2settlement
148
+
149
+ ```ruby
150
+ # settlements (settlement_id = nil, include_payments = false)
151
+ # settlement_id: string
152
+ # include_payments: boolean
153
+
154
+ response = pis_client.settlements
155
+ OR
156
+ response = pis_client.settlements "127335fdeb073e0eb2313ba0bd71ad44"
157
+ OR
158
+ response = pis_client.settlements "127335fdeb073e0eb2313ba0bd71ad44", true
159
+ ```
160
+
161
+ ## AIS
162
+ AIS client properties
163
+ ```ruby
164
+ ais_client.app_id
165
+ ais_client.app_secret
166
+ ais_client.private_key
167
+ ais_client.environment
168
+ ais_client.token
169
+ ais_client.refresh_token
170
+ ais_client.token_expires_in
171
+ ```
172
+ ### GET /connect
173
+
174
+ Get a connect session for a PSU to create a connection that will enable access to AIS features.
175
+
176
+ Documentation:
177
+ - https://doc.fintecture.com/reference/getaisv2connect
178
+
179
+ ```ruby
180
+ # connect (state, redirect_uri, scope = nil)
181
+ # state: string
182
+ # redirect_uri: string
183
+ # scope: string
184
+
185
+ response = ais_client.connect "my-state", "https://www.my-redirect-uri.fr"
186
+ ```
187
+ When you follow the returned url, you'll be redirect with "customer_id" & "code" parameters
188
+ ```ruby
189
+ customer_id = "fa51058b5f8306f1e048f1adda5488a9"
190
+ code = "f66ec660b0bbd2797bf6847fb4b98454"
191
+ ```
192
+
193
+ ### Access token
194
+
195
+ Returns the token and store it in the client for future requests.
196
+
197
+ Documentation:
198
+ - https://doc.fintecture.com/reference/createaccesstoken
199
+
200
+ ```ruby
201
+ ais_client.generate_token code
202
+ ```
203
+
204
+ ### Refresh token
205
+
206
+ Returns the token and store it in the client for future requests.
207
+ If you do not pass the refreshtoken as a parameter, the client refreshtoken will be used.
208
+
209
+ Documentation:
210
+ - https://doc.fintecture.com/reference/createrefreshtoken
211
+
212
+ ```ruby
213
+ # generate_refresh_token (refresh_token = nil)
214
+ # refresh_token: string
215
+
216
+ ais_client.generate_refresh_token
217
+ ```
218
+
219
+ ### GET /authorize
220
+
221
+ Authenticates your customer to their Bank for AIS access
222
+
223
+ Documentation:
224
+ - https://doc.fintecture.com/reference/getaisv1providerauthorization
225
+
226
+ ```ruby
227
+ # authorize (app_id_auth: false, provider_id:, redirect_uri:, state: nil, x_psu_id: nil, x_psu_ip_address: nil)
228
+ # app_id_auth: boolean
229
+ # provider_id: string
230
+ # redirect_uri: string
231
+ # state: string
232
+ # x_psu_id: string
233
+ # x_psu_ip_address: string
234
+
235
+ response = ais_client.authorize app_id_auth: false, provider_id: "agfbfr", redirect_uri: "https://www.google.fr", state: "ok", x_psu_id: "123456", x_psu_ip_address: "192.168.1.1"
236
+ ```
237
+
238
+ ### GET /accounts
239
+
240
+ Get all accounts linked to a specific AIS connection.
241
+
242
+ Documentation:
243
+ - https://doc.fintecture.com/reference/getaisv1customeraccounts
244
+
245
+ ```ruby
246
+ # accounts (customer_id:, account_id: nil, remove_nulls: nil, withBalances: nil)
247
+ # customer_id: string
248
+ # account_id: string
249
+ # remove_nulls: boolean
250
+ # withBalances: boolean
251
+
252
+ response = ais_client.accounts customer_id: customer_id, account_id: nil, remove_nulls: nil, withBalances: nil
253
+ ```
254
+
255
+ ### GET /transactions
256
+
257
+ Get all transactions linked to a specific AIS connection for a specific account.
258
+
259
+ Documentation:
260
+ - https://doc.fintecture.com/reference/getaisv1customeraccounttransactions
261
+
262
+ ```ruby
263
+ # transactions (customer_id:, account_id:, remove_nulls: nil, convert_dates: nil, filters: nil)
264
+ # customer_id: string
265
+ # account_id: string
266
+ # remove_nulls: boolean
267
+ # convert_dates: boolean
268
+ # filters: {}
269
+
270
+ transactions_filters = {
271
+ "filter[date_to]": "2020-01-01",
272
+ 'filter[date_from]': "max" # Date or 'max'
273
+ }
274
+ response = ais_client.transactions customer_id: customer_id, account_id: "b71722204d1a3f5ecd895", remove_nulls: true, convert_dates: true, filters: transactions_filters
275
+ ```
276
+
277
+ ### GET /accountholders
278
+
279
+ Retrieves all personal information of the client such as name, address and contact details for all the beneficiary owners.
280
+
281
+ Documentation:
282
+ - https://doc.fintecture.com/reference/getaisv1customeraccountholders
283
+
284
+ ```ruby
285
+ # account_holders (customer_id:, remove_nulls: nil)
286
+ # customer_id: string
287
+ # remove_nulls: boolean
288
+
289
+ response = ais_client.account_holders customer_id: customer_id, remove_nulls: true
290
+ ```
291
+
292
+ ### DELETE /customer
293
+
294
+ Deletes all active access tokens and all PSU data linked to requested connection.
295
+
296
+ Documentation:
297
+ - https://doc.fintecture.com/reference/deleteaisv1customer
298
+
299
+ ```ruby
300
+ # account_holders (customer_id:)
301
+ # customer_id: string
302
+
303
+ response = ais_client.delete_customer customer_id: customer_id
304
+ ```
305
+ ## RESSOURCES
306
+ Use the PIS client to get ressources. The "generate_token" step is not needed for this calls
307
+
308
+ ### GET /providers
309
+
310
+ Documentation:
311
+ - https://doc.fintecture.com/reference/getresv1providers
312
+
313
+ ```ruby
314
+ # providers (provider_id: nil, paramsProviders: nil)
315
+ # provider_id: string
316
+ # paramsProviders: string
317
+
318
+ paramsProviders = {
319
+ 'filter[country]': 'FR',
320
+ 'filter[pis]': 'SEPA',
321
+ 'filter[ais]': 'Accounts',
322
+ 'filter[psu_type]': 'retail',
323
+ 'filter[auth_model]': 'redirect',
324
+ 'sort[name]': 'DESC',
325
+ 'sort[full_name]': 'DESC',
326
+ 'sort[country]': 'DESC',
327
+ 'sort[provider_id]': 'DESC'
328
+ }
329
+ response = pis_client.providers provider_id: 'agfbfr', paramsProviders: paramsProviders
330
+ ```
331
+
332
+ ### GET /applications
333
+
334
+ Documentation:
335
+ - https://doc.fintecture.com/reference/getresv1applications
336
+
337
+ ```ruby
338
+ # applications ()
339
+
340
+ response = pis_client.applications
341
+ ```
342
+
343
+ ## API Errors handling
344
+ Hash version
345
+ ```ruby
346
+ begin
347
+ pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 1
348
+ rescue => e
349
+ error = JSON.parse e.to_s
350
+ puts error
351
+ end
352
+ ```
353
+
354
+ ```ruby
355
+ {
356
+ "type"=>"Fintecture api",
357
+ "status"=>401,
358
+ "errors"=>[
359
+ {
360
+ "code"=>"invalid_token",
361
+ "title"=>"Invalid Token",
362
+ "message"=>"The token is either invalid or expired."
363
+ }
364
+ ],
365
+ "error_string"=>"\nFintecture server errors : \n status: 401 \n code: unauthorized\n id : 3006ddbf-2f97-44d8-9f63-35711b78e8a6\n\n code: invalid_token\n title: Invalid Token\n message: The token is either invalid or expired.\n\n"
366
+ }
367
+ ```
368
+ Text version
369
+ ```ruby
370
+ begin
371
+ pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 1
372
+ rescue => e
373
+ error = JSON.parse e.to_s
374
+ puts error['error_string']
375
+ end
376
+ ```
377
+
378
+ ```ruby
379
+ Fintecture server errors :
380
+ status: 401
381
+ code: unauthorized
382
+ id : 2adb9e35-ff0d-4477-959e-b1b1a7d7c812
383
+
384
+ code: invalid_token
385
+ title: Invalid Token
386
+ message: The token is either invalid or expired.
387
+
388
+ ```
389
+ ## Development
390
+
391
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
392
+
393
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
394
+
395
+ ## Contributing
396
+
397
+ Bug reports and pull requests are welcome on GitHub at https://github.com/Fintecture/fintecture-sdk-ruby. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
398
+
399
+ ## License
400
+
401
+ The gem is available as open source under the terms of the [GPL-3.0 License](http://www.gnu.org/licenses/gpl-3.0.txt).
402
+
403
+ ## Code of Conduct
404
+
405
+ Everyone interacting in the Fintecture project’s codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/Fintecture/fintecture-sdk-ruby/blob/master/CODE_OF_CONDUCT.md).