ruby_fints 0.0.3 → 0.0.4
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 +4 -4
- data/.travis.yml +4 -3
- data/README.md +7 -0
- data/lib/fints/client.rb +45 -0
- data/lib/fints/helper.rb +8 -0
- data/lib/fints/https_connection.rb +8 -4
- data/lib/fints/segment/hksal.rb +27 -0
- data/lib/fints/version.rb +1 -1
- data/lib/ruby_fints.rb +2 -1
- data/ruby_fints.gemspec +0 -1
- data/test/test_helper.rb +1 -1
- metadata +3 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11d1bcb250d24626e917803cca2cdfb4b39d04e1
|
4
|
+
data.tar.gz: d744254e59447312f943a4227b8276ca96b0cb52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7229878143c1cb15a0b1183e115c21aa669b5591c537d98c9deb0e19ae0e9d9d4641427b3740f8104cd1261a36db9e368914cb09bb267ef40896b55973e37df2
|
7
|
+
data.tar.gz: d93a1fa1f7bc1f09b3c8aca544dfdccad4264e5b89ec3bb9722c72c4b877e8320bc7928e3aaad648b0bdcc467f473f49a17d1d5415e87c79dd8102732df18789
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -17,6 +17,7 @@ Banks tested:
|
|
17
17
|
* Sparkasse
|
18
18
|
* ING DiBa
|
19
19
|
* GLS Bank
|
20
|
+
* comdirect
|
20
21
|
|
21
22
|
Usage
|
22
23
|
-----
|
@@ -37,6 +38,12 @@ accounts = f.get_sepa_accounts
|
|
37
38
|
pp accounts
|
38
39
|
# [{iban: 'DE12345678901234567890', bic: 'ABCDEFGH1DEF', accountnumber: '123456790', subaccount: '', blz: '123456789'}]
|
39
40
|
|
41
|
+
balance = f.get_balance(accounts[0])
|
42
|
+
pp balance
|
43
|
+
# {:amount=>1234.56,
|
44
|
+
# :currency=>"EUR",
|
45
|
+
# :date=>#<Date: 2018-08-21 ((2458352j,0s,0n),+0s,2299161j)>}
|
46
|
+
|
40
47
|
statement = f.get_statement(accounts[0], Date.new(2017, 4, 3), Date.new(2017, 4, 4))
|
41
48
|
pp statement.map(&:data)
|
42
49
|
|
data/lib/fints/client.rb
CHANGED
@@ -40,6 +40,51 @@ module FinTS
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
def get_balance(account)
|
44
|
+
FinTS::Client.logger.info("Start fetching balance")
|
45
|
+
|
46
|
+
dialog = new_dialog
|
47
|
+
dialog.sync
|
48
|
+
dialog.init
|
49
|
+
|
50
|
+
msg = create_balance_message(dialog, account)
|
51
|
+
FinTS::Client.logger.debug("Send message: #{msg}")
|
52
|
+
resp = dialog.send_msg(msg)
|
53
|
+
dialog.send_end
|
54
|
+
|
55
|
+
# find segment and split up to balance part
|
56
|
+
seg = resp.find_segment('HISAL')
|
57
|
+
arr = Helper.split_for_data_elements(Helper.split_for_data_groups(seg)[4])
|
58
|
+
|
59
|
+
amount = arr[1].sub(',', '.').to_f
|
60
|
+
# 'C' for credit, 'D' for debit
|
61
|
+
amount *= -1 if arr[0] == 'D'
|
62
|
+
|
63
|
+
balance = {
|
64
|
+
amount: amount,
|
65
|
+
currency: arr[2],
|
66
|
+
date: Date.parse(arr[3])
|
67
|
+
}
|
68
|
+
|
69
|
+
FinTS::Client.logger.debug("Balance: #{balance}")
|
70
|
+
balance
|
71
|
+
end
|
72
|
+
|
73
|
+
def create_balance_message(dialog, account)
|
74
|
+
hversion = dialog.hksalversion
|
75
|
+
|
76
|
+
acc = if [4, 5, 6].include?(hversion)
|
77
|
+
[account[:accountnumber], account[:subaccount], '280', account[:blz]].join(':')
|
78
|
+
elsif hversion == 7
|
79
|
+
[account[:iban], account[:bic], account[:accountnumber], account[:subaccount], '280', account[:blz]].join(':')
|
80
|
+
else
|
81
|
+
raise ArgumentError, "Unsupported HKSAL version #{hversion}"
|
82
|
+
end
|
83
|
+
|
84
|
+
segment = Segment::HKSAL.new(3, hversion, acc)
|
85
|
+
new_message(dialog, [segment])
|
86
|
+
end
|
87
|
+
|
43
88
|
def get_statement(account, start_date, end_date)
|
44
89
|
FinTS::Client.logger.info("Start fetching from #{start_date} to #{end_date}")
|
45
90
|
|
data/lib/fints/helper.rb
CHANGED
@@ -13,5 +13,13 @@ module FinTS
|
|
13
13
|
mt940 = Cmxl.parse(processed_data)
|
14
14
|
mt940.flat_map(&:transactions)
|
15
15
|
end
|
16
|
+
|
17
|
+
def self.split_for_data_groups(seg)
|
18
|
+
seg.split(/\+(?<!\?\+)/)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.split_for_data_elements(deg)
|
22
|
+
deg.split(/:(?<!\?:)/)
|
23
|
+
end
|
16
24
|
end
|
17
25
|
end
|
@@ -1,16 +1,20 @@
|
|
1
1
|
module FinTS
|
2
2
|
class HTTPSConnection
|
3
3
|
def initialize(url)
|
4
|
-
@url = url
|
4
|
+
@url = URI(url)
|
5
5
|
end
|
6
6
|
|
7
7
|
def send_msg(msg)
|
8
8
|
message_string = msg.to_s.encode('iso-8859-1')
|
9
9
|
FinTS::Client.logger.debug("<< #{message_string}")
|
10
10
|
data = Base64.encode64(message_string)
|
11
|
-
|
12
|
-
|
13
|
-
|
11
|
+
|
12
|
+
response = Net::HTTP.start(@url.host, @url.port, use_ssl: @url.scheme == 'https') do |http|
|
13
|
+
http.post(@url.path, data, {'Content-Type' => 'text/plain'})
|
14
|
+
end
|
15
|
+
code = response.code.to_i
|
16
|
+
if code < 200 || code > 299
|
17
|
+
raise ConnectionError, "Bad status code #{code}"
|
14
18
|
end
|
15
19
|
res = Base64.decode64(response.body).force_encoding('iso-8859-1').encode('utf-8')
|
16
20
|
FinTS::Client.logger.debug(">> #{res}")
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module FinTS
|
2
|
+
module Segment
|
3
|
+
# HKSAL (Kontosaldo)
|
4
|
+
# Refs: http://www.hbci-zka.de/dokumente/spezifikation_deutsch/fintsv3/FinTS_3.0_Messages_Geschaeftsvorfaelle_2015-08-07_final_version.pdf
|
5
|
+
# Section C.2.1.2
|
6
|
+
class HKSAL < BaseSegment
|
7
|
+
def initialize(segno, version, account)
|
8
|
+
@version = version
|
9
|
+
data = [
|
10
|
+
account,
|
11
|
+
'N'
|
12
|
+
]
|
13
|
+
super(segno, data)
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def type
|
19
|
+
'HKSAL'
|
20
|
+
end
|
21
|
+
|
22
|
+
def version
|
23
|
+
@version
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
data/lib/fints/version.rb
CHANGED
data/lib/ruby_fints.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'base64'
|
2
|
-
require '
|
2
|
+
require 'net/http'
|
3
3
|
require 'cmxl'
|
4
4
|
require 'logger'
|
5
5
|
require_relative 'fints/client'
|
@@ -17,6 +17,7 @@ require_relative 'fints/segment/base_segment'
|
|
17
17
|
require_relative 'fints/segment/hkend'
|
18
18
|
require_relative 'fints/segment/hkidn'
|
19
19
|
require_relative 'fints/segment/hkkaz'
|
20
|
+
require_relative 'fints/segment/hksal'
|
20
21
|
require_relative 'fints/segment/hkspa'
|
21
22
|
require_relative 'fints/segment/hksyn'
|
22
23
|
require_relative 'fints/segment/hkvvb'
|
data/ruby_fints.gemspec
CHANGED
@@ -13,7 +13,6 @@ Gem::Specification.new do |s|
|
|
13
13
|
s.description = %q{FinTS (formerly known as HBCI) is a protocol to programmatically interface with German banks. This gem is a translation of https://github.com/raphaelm/python-fints into Ruby.}
|
14
14
|
|
15
15
|
s.add_runtime_dependency 'cmxl', '~> 0.2'
|
16
|
-
s.add_runtime_dependency 'httparty', '~> 0.10'
|
17
16
|
s.add_development_dependency 'rake'
|
18
17
|
s.add_development_dependency 'minitest'
|
19
18
|
s.add_development_dependency 'webmock'
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby_fints
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marvin Killing
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-
|
11
|
+
date: 2018-08-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cmxl
|
@@ -24,20 +24,6 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0.2'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: httparty
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.10'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0.10'
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: rake
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,6 +137,7 @@ files:
|
|
151
137
|
- lib/fints/segment/hkend.rb
|
152
138
|
- lib/fints/segment/hkidn.rb
|
153
139
|
- lib/fints/segment/hkkaz.rb
|
140
|
+
- lib/fints/segment/hksal.rb
|
154
141
|
- lib/fints/segment/hkspa.rb
|
155
142
|
- lib/fints/segment/hksyn.rb
|
156
143
|
- lib/fints/segment/hkvvb.rb
|