czech_banks_parser 0.0.1 → 0.0.2

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 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: []