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/README.md CHANGED
@@ -1,238 +1,407 @@
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
- Initialize your client credentials
27
-
28
- ```ruby
29
- Fintecture.app_id = 'your_app_id'
30
- Fintecture.app_secret = 'your_app_secret'
31
- Fintecture.private_key = %q(your_private_key)
32
- ```
33
-
34
-
35
- #### Environments
36
-
37
- By default `sandbox` is the initial environment, but you can change to sandbox by doing
38
-
39
- ```ruby
40
- Fintecture.environment = 'sandbox'
41
- ```
42
-
43
- You can also see the available environments
44
-
45
- Fintecture::ENVIRONMENTS
46
- => ["sandbox", "production"]
47
-
48
- ### Authentication
49
-
50
-
51
- #### Access token
52
-
53
- ```ruby
54
- Fintecture::Pis.get_access_token
55
- ```
56
-
57
- ### Connect
58
-
59
- #### Get connect URL
60
- ```ruby
61
- payment_attrs = {
62
- amount: 123,
63
- currency: 'EUR',
64
- communication: 'Thanks Mom!',
65
- execution_date: '2021-09-23',
66
- beneficiary: {
67
- name: "Bob Smith",
68
- iban: "FR1420041010050500013M02606",
69
- swift_bic: "BANKFRXXXXX",
70
- street: "road of somewhere",
71
- number: "2",
72
- complement:"",
73
- city: "Paris",
74
- zip: "93160",
75
- country: "FR",
76
- form: "",
77
- incorporation: ""
78
- },
79
- debited_account_id: 'FR1420041010050500013M02606',
80
- debited_account_type: 'iban',
81
- end_to_end_id: '5f78e902907e4209aa8df63659b05d24',
82
- scheme: 'AUTO',
83
- customer_full_name: 'John Doe',
84
- customer_email: 'john.doe@email.com',
85
- customer_phone: '666777888',
86
- customer_phone_prefix: '',
87
- customer_ip: '127.0.0.1',
88
- customer_form: '',
89
- customer_incorporation: '',
90
- customer_address: {
91
- street: 'Main St.',
92
- number: '123',
93
- complement: '2nd floor',
94
- city: 'Paris',
95
- zip: '75000',
96
- country: 'fr'
97
- },
98
- redirect_uri: 'http://www.google.fr',
99
- origin_uri: 'http://example.com/checkout?session=123',
100
- state: 'somestate'
101
- }
102
- tokens = Fintecture::Pis.get_access_token
103
-
104
- connect_response = Fintecture::Pis.get_connect tokens['access_token'], payment_attrs
105
- connect_response_body = JSON.parse connect_response.body
106
- url = connect_response_body['meta']['url']
107
- ```
108
- Explanation of each field:
109
-
110
- * amount: **[mandatory]** The amount of the payment initiation request. Min 1.00 and Max is variable based on bank's policy.
111
- * currency: **[mandatory]** The currency of the payment initiation request. Currently, only EUR and GBP is supported.
112
- * communication: **[optional]** A message sent to the beneficiary of the payment and visible on his bank statement. In the context of ecommerce payment collection, the order reference is inputted here (with an optional prefer ex: REF#23444)
113
- * execution_date: **[optional]** A future date to execute the payment. If the execution_date field is omitted, the payment is to be sent immediately.
114
- * beneficiary: **[optional]** The beneficiary of the payment. It has the following structure:
115
- * name: **[optional]** The beneficiary name
116
- * iban: **[optional]** The beneficiary iban
117
- * swift_bic: **[optional]** The beneficiary swift or bic code
118
- * street: **[optional]** The beneficiary address street name
119
- * number: **[optional]** The beneficiary address number
120
- * complement: **[optional]** Complement information to the beneficiary address
121
- * city: **[optional]** The beneficiary address city
122
- * zip: **[optional]** The beneficiary address zip code
123
- * country: **[optional]** The beneficiary country code (2 letters)
124
- * form: **[optional]**
125
- * incorporation: **[optional]**
126
- * debited_account_id: **[optional]** Predefine the account which which the payment will be done
127
- * debited_account_type: **[mandatory if debited_account_id]** "internal" or "iban", "bban".
128
- * end_to_end_id: **[optional]** A unique ID given by the creator of the payment and send to the bank. By default de session_id is used.
129
- * scheme: **[optional]** The payment scheme to use. Default: AUTO (automatic selection), SEPA, INSTANT_SEPA
130
- * customer_full_name: **[mandatory]** The full name of the payer
131
- * customer_email: **[mandatory]** The email of the payer
132
- * customer_phone: **[optional]** The phone of the payer
133
- * customer_phone_prefix: **[optional]**
134
- * customer_ip: **[mandatory]** The ip address of the payer
135
- * customer_address: **[optional]** The address of the payer. It has the following structure:
136
- * street: **[optional]** The address street name
137
- * number: **[optional]** The address number
138
- * complement: **[optional]** Complement information to the address
139
- * city: **[optional]** The address city*
140
- * zip: **[optional]** The address zip code
141
- * country: **[optional]** The country code (2 letters)
142
- * redirect_uri: **[mandatory]** The callback URL to which the customer is redirected after authentication with his bank
143
- * origin_uri: **[optional]** A URL to which the customer will be redirected if he wants to exit Fintecture Connect
144
- * state: **[optional]** A state parameter which is sent back on callback
145
-
146
- #### Get Request-to-pay
147
-
148
- ```ruby
149
- payment_attrs = {
150
- x_language: 'fr',
151
- amount: 123,
152
- currency: 'EUR',
153
- communication: 'Thanks Mom!',
154
- customer_full_name: 'John Doe',
155
- customer_email: 'john.doe@email.com',
156
- customer_phone: '666777888',
157
- customer_phone_prefix: '+33',
158
- customer_address: {
159
- street: 'Main St.',
160
- number: '123',
161
- city: 'Paris',
162
- zip: '75000',
163
- country: 'fr'
164
- },
165
- expirary: 86400,
166
- cc: 'exemple@gmail.com',
167
- bcc: 'exemple@gmail.com',
168
- redirect_uri: 'http://www.google.fr'
169
- }
170
- tokens = Fintecture::Pis.get_access_token
171
-
172
- request_to_pay_response = Fintecture::Pis.request_to_pay @tokens['access_token'], payment_attrs
173
- request_to_pay_response_body = JSON.parse request_to_pay_response.body
174
- meta = request_to_pay_response_body['meta']
175
- ```
176
- Explanation of each field:
177
-
178
- * x_language: **[mandatory]**
179
- * amount: **[mandatory]** The amount of the payment initiation request. Min 1.00 and Max is variable based on bank's policy.
180
- * currency: **[mandatory]** The currency of the payment initiation request. Currently, only EUR and GBP is supported.
181
- * communication: **[optional]** A message sent to the beneficiary of the payment and visible on his bank statement. In the context of ecommerce payment collection, the order reference is inputted here (with an optional prefer ex: REF#23444)
182
- * customer_full_name: **[mandatory]** The full name of the payer
183
- * customer_email: **[mandatory]** The email of the payer
184
- * customer_phone: **[mandatory]** The phone of the payer
185
- * customer_phone_prefix: **[mandatory]**
186
- * customer_address: **[optional]** The address of the payer. It has the following structure:
187
- * street: **[optional]** The address street name
188
- * number: **[optional]** The address number
189
- * city: **[optional]** The address city*
190
- * zip: **[optional]** The address zip code
191
- * country: **[optional]** The country code (2 letters)
192
- * expirary: **[optional]** The number of seconds of the validity of the request to pay, by default 86400
193
- * cc: **[optional]** The CC email to receive a copy (If multiple emails, the emails must be concatenated with a comma.)
194
- * bcc: **[optional]** The BCC email to receive a copy (If multiple emails, the emails must be concatenated with a comma.)
195
- * redirect_uri: **[optional]** The callback URL to which the customer is redirected after authentication with his bank
196
-
197
-
198
-
199
-
200
- #### Get a specific payment
201
-
202
- ```ruby
203
- payment_response = Fintecture::Pis.get_payments @tokens['access_token'], @session_id
204
- payment_response_body = JSON.parse payment_response.body
205
-
206
- verified = (payment_response_body['meta']['status'] === 'payment_created')
207
- ```
208
-
209
- If the payment was success, the status of the response (_payment_response_body['meta']['status']_) should be **payment_created**
210
-
211
- #### Get payments
212
-
213
- ```ruby
214
- payments_response = Fintecture::Pis.get_payments @tokens['access_token']
215
- payments_response_body = JSON.parse payments_response.body
216
- payments_array = payment_response_body["data"]
217
- ```
218
-
219
- If the payment was success, the status of the response (_payment_response_body['meta']['status']_) should be **payment_created**
220
-
221
-
222
- ## Development
223
-
224
- 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.
225
-
226
- 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).
227
-
228
- ## Contributing
229
-
230
- 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.
231
-
232
- ## License
233
-
234
- 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).
235
-
236
- ## Code of Conduct
237
-
238
- 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 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)
125
+ # session_id: string
126
+ # amount: number
127
+
128
+ response = pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 5.75
129
+ ```
130
+ If the amount is not specified, refund the total
131
+
132
+ #### POST /request-to-pay
133
+ Documentation => https://docs.fintecture.com/v2/#post-post-post-request-to-pay
134
+ - An example of the JSON payload in the right column in "Request Body" section
135
+ - An exemple of response in the right column in "Request Body" section
136
+ - The definitions of each field in the "Body Parameters" section
137
+ - The definition of x_language field in the "Header Parameters" section
138
+
139
+ ```ruby
140
+ # refund (payload, x_language, redirect_uri = nil)
141
+ # payload: {}
142
+ # x_language: string
143
+ # redirect_uri: string
144
+
145
+ response = pis_client.request_to_pay payload, 'fr', "https://www.my-redirect-uri.fr"
146
+ ```
147
+
148
+ #### GET /settlements
149
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-settlements
150
+ - An exemple of response in the right column in "Request Body" section
151
+
152
+ ```ruby
153
+ # settlements (settlement_id = nil, include_payments = false)
154
+ # settlement_id: string
155
+ # include_payments: boolean
156
+
157
+ response = pis_client.settlements
158
+ OR
159
+ response = pis_client.settlements "127335fdeb073e0eb2313ba0bd71ad44"
160
+ OR
161
+ response = pis_client.settlements "127335fdeb073e0eb2313ba0bd71ad44", true
162
+ ```
163
+
164
+ ## AIS
165
+ AIS client properties
166
+ ```ruby
167
+ ais_client.app_id
168
+ ais_client.app_secret
169
+ ais_client.private_key
170
+ ais_client.environment
171
+ ais_client.token
172
+ ais_client.refresh_token
173
+ ais_client.token_expires_in
174
+ ```
175
+ #### GET /connect
176
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-connect
177
+ - An exemple of response in the right column in "Request Body" section
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
+ Documentation => https://docs.fintecture.com/v2/#post-post-post-oauth-accesstoken
195
+
196
+ This method return the token and store it in the client for future requests
197
+ ```ruby
198
+ ais_client.generate_token code
199
+ ```
200
+
201
+ #### Refresh token
202
+ Documentation => https://docs.fintecture.com/v2/#post-post-post-oauth-refreshtoken
203
+
204
+ This method return the token and store it in the client for future requests
205
+ If you do not pass the refreshtoken as a parameter, the client refreshtoken will be used
206
+ ```ruby
207
+ # generate_refresh_token (refresh_token = nil)
208
+ # refresh_token: string
209
+
210
+ ais_client.generate_refresh_token
211
+ ```
212
+
213
+ #### GET /authorize
214
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-authorize
215
+ - An exemple of response in the right column in "Request Body" section
216
+ - The definition of "x_psu_id" and "x_psu_ip_address" fields in the "Header Parameters" section
217
+
218
+ ```ruby
219
+ # authorize (app_id_auth: false, provider_id:, redirect_uri:, state: nil, x_psu_id: nil, x_psu_ip_address: nil)
220
+ # app_id_auth: boolean
221
+ # provider_id: string
222
+ # redirect_uri: string
223
+ # state: string
224
+ # x_psu_id: string
225
+ # x_psu_ip_address: string
226
+
227
+ 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"
228
+ ```
229
+
230
+ #### GET /authorize/decoupled
231
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-authorize-decoupled
232
+ - An exemple of response in the right column in "Request Body" section
233
+
234
+ ```ruby
235
+ # authorize_decoupled (app_id_auth: false, provider_id:, polling_id:)
236
+ # app_id_auth: boolean
237
+ # provider_id: string
238
+ # polling_id: string
239
+
240
+ response = ais_client.authorize_decoupled app_id_auth: false, provider_id: "agfbfr", polling_id: "1234"
241
+ ```
242
+
243
+ #### GET /accounts
244
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-accounts
245
+ - An exemple of response in the right column in "Request Body" section
246
+
247
+ ```ruby
248
+ # accounts (customer_id:, account_id: nil, remove_nulls: nil, withBalances: nil)
249
+ # customer_id: string
250
+ # account_id: string
251
+ # remove_nulls: boolean
252
+ # withBalances: boolean
253
+
254
+ response = ais_client.accounts customer_id: customer_id, account_id: nil, remove_nulls: nil, withBalances: nil
255
+ ```
256
+
257
+ #### GET /transactions
258
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-transactions
259
+ - An exemple of response in the right column in "Request Body" section
260
+
261
+ ```ruby
262
+ # transactions (customer_id:, account_id:, remove_nulls: nil, convert_dates: nil, filters: nil)
263
+ # customer_id: string
264
+ # account_id: string
265
+ # remove_nulls: boolean
266
+ # convert_dates: boolean
267
+ # filters: {}
268
+
269
+ transactions_filters = {
270
+ "filter[date_to]": "2020-01-01",
271
+ 'filter[date_from]': "max" # Date or 'max'
272
+ }
273
+ response = ais_client.transactions customer_id: customer_id, account_id: "b71722204d1a3f5ecd895", remove_nulls: true, convert_dates: true, filters: transactions_filters
274
+ ```
275
+
276
+ #### GET /accountholders
277
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-accountholders
278
+ - An exemple of response in the right column in "Request Body" section
279
+
280
+ ```ruby
281
+ # account_holders (customer_id:, remove_nulls: nil)
282
+ # customer_id: string
283
+ # remove_nulls: boolean
284
+
285
+ response = ais_client.account_holders customer_id: customer_id, remove_nulls: true
286
+ ```
287
+
288
+ #### DELETE /customer
289
+ Documentation => https://docs.fintecture.com/v2/#delete-delete-delete-customer
290
+ - An exemple of response in the right column in "Request Body" section
291
+
292
+ ```ruby
293
+ # account_holders (customer_id:)
294
+ # customer_id: string
295
+
296
+ response = ais_client.delete_customer customer_id: customer_id
297
+ ```
298
+ ## RESSOURCES
299
+ Use the PIS client to get ressources. The "generate_token" step is not needed for this calls
300
+
301
+ #### GET /providers
302
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-providers
303
+ - An exemple of response in the right column in "Request Body" section
304
+
305
+ ```ruby
306
+ # providers (provider_id: nil, paramsProviders: nil)
307
+ # provider_id: string
308
+ # paramsProviders: string
309
+
310
+ paramsProviders = {
311
+ 'filter[country]': 'FR',
312
+ 'filter[pis]': 'SEPA',
313
+ 'filter[ais]': 'Accounts',
314
+ 'filter[psu_type]': 'retail',
315
+ 'filter[auth_model]': 'redirect',
316
+ 'sort[name]': 'DESC',
317
+ 'sort[full_name]': 'DESC',
318
+ 'sort[country]': 'DESC',
319
+ 'sort[provider_id]': 'DESC'
320
+ }
321
+ response = pis_client.providers provider_id: 'agfbfr', paramsProviders: paramsProviders
322
+ ```
323
+
324
+ #### GET /applications
325
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-applications
326
+ - An exemple of response in the right column in "Request Body" section
327
+
328
+ ```ruby
329
+ # applications ()
330
+
331
+ response = pis_client.applications
332
+ ```
333
+
334
+ #### GET /testaccounts
335
+ Documentation => https://docs.fintecture.com/v2/#get-get-get-testaccounts
336
+ - An exemple of response in the right column in "Request Body" section
337
+
338
+ ```ruby
339
+ # test_accounts (provider_id = nil)
340
+ # provider_id: string
341
+
342
+ response = pis_client.test_accounts 'agfbfr'
343
+ ```
344
+
345
+ ## API Errors handling
346
+ Hash version
347
+ ```ruby
348
+ begin
349
+ pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 1
350
+ rescue => e
351
+ error = JSON.parse e.to_s
352
+ puts error
353
+ end
354
+ ```
355
+
356
+ ```ruby
357
+ {
358
+ "type"=>"Fintecture api",
359
+ "status"=>401,
360
+ "errors"=>[
361
+ {
362
+ "code"=>"invalid_token",
363
+ "title"=>"Invalid Token",
364
+ "message"=>"The token is either invalid or expired."
365
+ }
366
+ ],
367
+ "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"
368
+ }
369
+ ```
370
+ Text version
371
+ ```ruby
372
+ begin
373
+ pis_client.refund "7f47d3675f5d4964bc416b43af63b06e", 1
374
+ rescue => e
375
+ error = JSON.parse e.to_s
376
+ puts error['error_string']
377
+ end
378
+ ```
379
+
380
+ ```ruby
381
+ Fintecture server errors :
382
+ status: 401
383
+ code: unauthorized
384
+ id : 2adb9e35-ff0d-4477-959e-b1b1a7d7c812
385
+
386
+ code: invalid_token
387
+ title: Invalid Token
388
+ message: The token is either invalid or expired.
389
+
390
+ ```
391
+ ## Development
392
+
393
+ 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.
394
+
395
+ 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).
396
+
397
+ ## Contributing
398
+
399
+ 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.
400
+
401
+ ## License
402
+
403
+ 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).
404
+
405
+ ## Code of Conduct
406
+
407
+ 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).