ruby_fints 0.0.3 → 0.0.4

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: '046070118a12bf407ebbc6d300d43a616c4c35a8'
4
- data.tar.gz: 1d25318affcfaf97965fe9b9ebcbd031da4010d7
3
+ metadata.gz: 11d1bcb250d24626e917803cca2cdfb4b39d04e1
4
+ data.tar.gz: d744254e59447312f943a4227b8276ca96b0cb52
5
5
  SHA512:
6
- metadata.gz: e751448855bf9f5b0763233671f022a7d724c3bd9f50aa8f9307d386b172e2d4cda3c27da04b42121117e575cfb34a977b2f3e6a94f66f0111e93dc35eb14979
7
- data.tar.gz: 1f0819503b91715b67b3a698c4b0b26350d8cde134abfef5143c806497745682efa64a3c79b3ec95e79a980dfa135bc7da84bb4a920a52864c2ea585ae103747
6
+ metadata.gz: 7229878143c1cb15a0b1183e115c21aa669b5591c537d98c9deb0e19ae0e9d9d4641427b3740f8104cd1261a36db9e368914cb09bb267ef40896b55973e37df2
7
+ data.tar.gz: d93a1fa1f7bc1f09b3c8aca544dfdccad4264e5b89ec3bb9722c72c4b877e8320bc7928e3aaad648b0bdcc467f473f49a17d1d5415e87c79dd8102732df18789
@@ -1,7 +1,8 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.2.7
5
- - 2.3.4
6
- - 2.4.1
4
+ - 2.2.9
5
+ - 2.3.7
6
+ - 2.4.4
7
+ - 2.5.1
7
8
  before_install: gem install bundler -v 1.14.6
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
 
@@ -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
 
@@ -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
- response = HTTParty.post(@url, body: data, headers: {'Content-Type' => 'text/plain', })
12
- if response.code < 200 || response.code > 299
13
- raise ConnectionError, "Bad status code #{response.code}"
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
@@ -1,4 +1,4 @@
1
1
  module FinTS
2
2
  GEM_NAME = 'ruby_fints'
3
- VERSION = '0.0.3'
3
+ VERSION = '0.0.4'
4
4
  end
@@ -1,5 +1,5 @@
1
1
  require 'base64'
2
- require 'httparty'
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'
@@ -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'
@@ -7,4 +7,4 @@ require 'ruby_fints'
7
7
  require 'minitest/autorun'
8
8
  require 'webmock/minitest'
9
9
  require 'delorean'
10
- require 'mocha/mini_test'
10
+ require 'mocha/minitest'
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.3
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-02-02 00:00:00.000000000 Z
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