czech_banks_parser 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 90760afe5261a775da7b946a741ee042e2b5cd77
4
- data.tar.gz: 5cc2a10717afe03b300b1d9a3ff5aed07b36ceb1
3
+ metadata.gz: 02b6f09487b8f5996d133e6508414c3b87c837e4
4
+ data.tar.gz: a46b19f3a24957b2cc3f38f204a82efc4c20c85e
5
5
  SHA512:
6
- metadata.gz: ecdf88d215ded20ef1d3fd9053dd076099351cc11a21df63c68f5b8df18dd7dc21db61fb22ee58068397148ea12a8e90b940936655cefe168a0d945146e75b38
7
- data.tar.gz: 37bc9c921fce49d6a3863a814a833590d5d1466254d121385bba532aaab7cfd7b179f132c87161cb0b7f5df8cb82ea5d7ec1c52dd5f541b47e10d31f06b318f5
6
+ metadata.gz: 65d26cfa0eb74655f38c81bbea70776226a47cc1f12bac70fb05aa717140d68802272ac98b32aa16ece3d882a58cffec94baeb0700889030ef33422cd220ab92
7
+ data.tar.gz: 942d9c93d29a309e7be7b06658699e7ffaf07ac3f81c8dfeb450a5967e5a7bc55d9dbedbddf40148d6042664461067b43f54baf17d0fe3758ca67bf3f3e6fee2
data/.gitignore CHANGED
@@ -1,2 +1,2 @@
1
1
  .idea
2
- .gem
2
+ *.gem
data/README.md ADDED
@@ -0,0 +1,96 @@
1
+ Connect Czech banks FIO and CSAS with your Ruby application
2
+
3
+ # Initializing API
4
+
5
+ ### FIO:
6
+
7
+ ```ruby
8
+
9
+ token = 'sdiohsiodgsr75rg7e8r7gh' # FIO bank token
10
+
11
+ @parser = CzechBanksParser.new.connect(token, 'fio')
12
+
13
+ ```
14
+
15
+ ### CSAS:
16
+
17
+ ```ruby
18
+
19
+ token = 'sdiohsiodgsr75rg7e8r7gh' # CSAS Oauth2 refresh token
20
+
21
+ opts = {}
22
+ opts[:web_api_key] = CSAS_WEB_API_KEY
23
+ opts[:client_id] = CSAS_CLIENT_ID
24
+ opts[:secret] = CSAS_SECRET
25
+ otps[:mode] = 'production' # or sandbox
26
+
27
+ @parser = CzechBanksParser.new(opts).connect(token, 'csas')
28
+
29
+ ```
30
+
31
+
32
+ # Downloading transactions
33
+
34
+
35
+ ```ruby
36
+
37
+ date_from = Date.today - 1.week
38
+ date_to = Date.today
39
+ iban = 'CZ8788665897' # important only for CSAS
40
+
41
+ @parser.transactions(date_from, date_to, iban).each do |tr|
42
+ # output: {trans_id: tr[:id], variable_symbol: tr[:variable_symbol], date: tr[:date], amount: tr[:amount], currency: tr[:currency], from_account: tr[:account], bank: tr[:bank], name: tr[:name], message: tr[:message]}
43
+ end
44
+
45
+ ```
46
+
47
+ # Other
48
+
49
+ ### Obtaining CSAS refresh token
50
+
51
+ ```ruby
52
+
53
+ class BankTokensController < ApplicationController
54
+ load_resource :account
55
+ load_resource through: :account
56
+
57
+ def auth
58
+ config = parser.config(params[:state])
59
+ redirect_to "#{config[:auth_uri]}?state=profil&redirect_uri=#{callback_account_bank_tokens_url(@account)}&client_id=#{config[:client_id]}&response_type=code&access_type=offline"
60
+ end
61
+
62
+ def callback
63
+ config = parser.config('csas')
64
+ redirect_to "#{config[:token_uri]}?grant_type=authorization_code&code=#{params[:code]}&client_id=#{config[:client_id]}&client_secret=#{config[:secret]}&redirect_uri=#{get_token_account_bank_tokens_url(@account)}&state=csas"
65
+ end
66
+
67
+ def get_token
68
+ if params[:refresh_token].present?
69
+
70
+ ibans = parser.connect(params[:refresh_token], 'csas').ibans # get accounts ibans from CSAS
71
+
72
+ if ibans.include?(@account.bank_account.iban)
73
+ bt = @account.bank_tokens.new(bank: 'csas', token: params[:refresh_token], active: true)
74
+ bt.save!
75
+ redirect_to accounts_path, notice: t('bank_account_connected')
76
+ else
77
+ flash[:error] = t('no_iban_match', iban: @account.bank_account.iban, ibans: ibans.join(', '))
78
+ redirect_to accounts_path
79
+ end
80
+ end
81
+ end
82
+
83
+ private
84
+
85
+ def parser
86
+ CzechBanksParser.new({web_api_key: CSAS_WEB_API_KEY, client_id: CSAS_CLIENT_ID, secret: CSAS_SECRET})
87
+ end
88
+
89
+
90
+ end
91
+
92
+ ```
93
+
94
+ # About
95
+
96
+ &copy; Author: Richard Lapiš
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "czech_banks_parser"
3
- s.version = "0.0.1"
3
+ s.version = "0.0.2"
4
4
  s.default_executable = "czech_banks_parser"
5
5
  s.platform = Gem::Platform::RUBY
6
6
  s.required_ruby_version = '>= 2.0.0'
data/lib/banks/csas.rb CHANGED
@@ -9,19 +9,44 @@ module Banks
9
9
  end
10
10
 
11
11
  def accounts
12
- JSON.parse(RestClient.get(@config[:base_uri] + '/netbanking/my/accounts', headers), symbolize_names: true)[:accounts]
12
+ JSON.parse(RestClient.get(@config[:base_uri] + '/netbanking/my/accounts', headers), symbolize_keys: true)['accounts']
13
13
  end
14
14
 
15
15
  def ibans
16
- accounts.collect{|ac| ac[:accountno][:iban]}
16
+ accounts.collect{|ac| ac['accountno']['cz-iban']}
17
17
  end
18
18
 
19
19
  def transactions(time_start = nil, time_end = nil, iban = nil)
20
- url = @config[:base_uri] + '/netbanking/my/accounts/' + iban.to_s + '/transactions'
20
+ url = @config[:base_uri] + '/netbanking/cz/my/accounts/' + iban.to_s + '/transactions'
21
21
  url += "?dateStart=#{time_start.iso8601}" if time_start.present?
22
22
  url += "#{url =~ /\?/ ? '&' : '?'}dateEnd=#{time_end.iso8601}" if time_end.present?
23
23
 
24
- JSON.parse RestClient.get(url, headers), symbolize_names: true
24
+ # RestClient.log = 'stdout'
25
+
26
+ trans = []
27
+ transaction_get(url, trans, 0)
28
+ trans
29
+ end
30
+
31
+ def transaction_get(url, trans, page)
32
+ response = JSON.parse(RestClient.get(url+"&page=#{page}", headers), symbolize_keys: true)
33
+
34
+ response['transactions'].each do |tr|
35
+ trans << {
36
+ id: tr['id'],
37
+ date: tr['bookingDate'],
38
+ amount: tr['amount']['value'],
39
+ currency: tr['amount']['currency'],
40
+ account: "#{tr['accountParty']['accountPrefix']}#{tr['accountParty']['accountNumber']}/#{tr['accountParty']['bankCode']}",
41
+ bank: tr['accountParty']['iban'],
42
+ name: tr['accountParty']['partyInfo'],
43
+ variable_symbol: tr['variableSymbol'],
44
+ message: tr['payeeNote']
45
+ }
46
+ end
47
+
48
+ transaction_get(url, trans, response['nextPage']) if response['nextPage'] != response['pageNumber']
49
+ trans
25
50
  end
26
51
 
27
52
  private
@@ -31,8 +56,8 @@ module Banks
31
56
  end
32
57
 
33
58
  def get_token(token)
34
- response = RestClient.post @config[:token_uri], {grant_type: 'refresh_token', client_id: @config[:client_id], client_secret: @config[:secret], refresh_token: token}
35
- JSON.parse(response, symbolize_names: true)[:access_token]
59
+ response = RestClient.post @config[:token_uri], {grant_type: 'refresh_token', client_id: @config[:client_id], redirect_uri: '/', client_secret: @config[:secret], refresh_token: token}, content_type: 'application/x-www-form-urlencoded'
60
+ JSON.parse(response, symbolize_keys: true)['access_token']
36
61
  end
37
62
  end
38
63
  end
data/lib/banks/fio.rb CHANGED
@@ -6,7 +6,7 @@ module Banks
6
6
  @token = token
7
7
  end
8
8
 
9
- def transactions(time_start, time_end, iban)
9
+ def transactions(time_start, time_end, iban = nil)
10
10
  url = "#{@config[:base_uri]}/periods/#{@token}/#{time_start.strftime('%Y-%m-%d')}/#{time_end.strftime('%Y-%m-%d')}/transactions.json"
11
11
 
12
12
  trans = []
@@ -3,8 +3,11 @@ require 'banks/fio.rb'
3
3
  require 'banks/csas.rb'
4
4
 
5
5
  class CzechBanksParser
6
- def initialize(token, bank, opts = {})
6
+ def initialize(opts = {})
7
7
  @opts = opts
8
+ end
9
+
10
+ def connect(token, bank)
8
11
  case bank
9
12
  when 'csas' then Banks::Csas.new(token, config('csas'))
10
13
  when 'fio' then Banks::Fio.new(token, config('fio'))
@@ -16,9 +19,9 @@ class CzechBanksParser
16
19
  case state
17
20
  when 'csas'
18
21
  {
19
- base_uri: 'https://api.csas.cz/sandbox/webapi/api/v1',
20
- auth_uri: 'https://api.csas.cz/sandbox/widp/oauth2/auth',
21
- token_uri: 'https://api.csas.cz/sandbox/widp/oauth2/token',
22
+ base_uri: @opts[:mode] == 'production' ? '' : 'https://www.csast.csas.cz/webapi/api/v3',
23
+ auth_uri: @opts[:mode] == 'production' ? '' : 'https://www.csast.csas.cz/widp/oauth2/auth',
24
+ token_uri: @opts[:mode] == 'production' ? '' : 'https://www.csast.csas.cz/widp/oauth2/token',
22
25
  client_id: @opts[:client_id],
23
26
  secret: @opts[:secret],
24
27
  web_api_key: @opts[:web_api_key]
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: czech_banks_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Lapiš
@@ -14,20 +14,20 @@ dependencies:
14
14
  name: rest-client
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.6.7
20
- - - ">="
20
+ - - '>='
21
21
  - !ruby/object:Gem::Version
22
22
  version: 1.6.7
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - "~>"
27
+ - - ~>
28
28
  - !ruby/object:Gem::Version
29
29
  version: 1.6.7
30
- - - ">="
30
+ - - '>='
31
31
  - !ruby/object:Gem::Version
32
32
  version: 1.6.7
33
33
  description: A parser from Czech Banks API's - CSAS, FIO
@@ -36,7 +36,8 @@ executables: []
36
36
  extensions: []
37
37
  extra_rdoc_files: []
38
38
  files:
39
- - ".gitignore"
39
+ - .gitignore
40
+ - README.md
40
41
  - czech_banks_parser.gemspec
41
42
  - lib/banks/csas.rb
42
43
  - lib/banks/fio.rb
@@ -51,12 +52,12 @@ require_paths:
51
52
  - lib
52
53
  required_ruby_version: !ruby/object:Gem::Requirement
53
54
  requirements:
54
- - - ">="
55
+ - - '>='
55
56
  - !ruby/object:Gem::Version
56
57
  version: 2.0.0
57
58
  required_rubygems_version: !ruby/object:Gem::Requirement
58
59
  requirements:
59
- - - ">="
60
+ - - '>='
60
61
  - !ruby/object:Gem::Version
61
62
  version: '0'
62
63
  requirements: []