banklink_lv 0.0.4 → 1.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 +7 -0
- data/.DS_Store +0 -0
- data/.gitignore +1 -0
- data/Gemfile +2 -2
- data/Gemfile.lock +15 -78
- data/README.rdoc +18 -15
- data/Rakefile +2 -2
- data/banklink_lv.gemspec +9 -11
- data/init.rb +1 -1
- data/lib/{banklink_lv → banklink}/banklink.rb +13 -13
- data/lib/{banklink_lv → banklink}/base.rb +3 -3
- data/lib/{banklink_lv → banklink}/helper.rb +14 -14
- data/lib/{banklink_lv → banklink}/notification.rb +33 -37
- data/lib/banklink/swedbank.rb +27 -0
- data/lib/banklink/version.rb +3 -0
- data/lib/banklink.rb +20 -0
- data/test/banklink_helper_test.rb +4 -7
- data/test/banklink_notification_test.rb +4 -4
- data/test/database.yml +1 -1
- data/test/test_helper.rb +16 -14
- metadata +23 -53
- data/README +0 -71
- data/lib/banklink_lv/swedbank.rb +0 -49
- data/lib/banklink_lv/version.rb +0 -3
- data/lib/banklink_lv.rb +0 -27
- data/pkg/banklink_lv-0.0.3.gem +0 -0
- data/pkg/banklink_lv-0.0.4.gem +0 -0
- data/rails/init.rb +0 -1
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA1:
|
|
3
|
+
metadata.gz: f8ffa82dc6e5fb3d28a30670349fb52b6877c56a
|
|
4
|
+
data.tar.gz: ff9dc27db51a21c0f8682e978feec47c2116dcb1
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: fe37fe090c02338e868fc8b354414e67b322930f284495dd58527996584bafd8b6afc9c47c7d56a29c34d2bcb557159ebaefd555c75a10a5978d1860f4f792ba
|
|
7
|
+
data.tar.gz: 7f4715437ccb1435c9de41e4d890079bbe4eaee68885c0b6f4c6b42b51141ab7cc000668d595eb7bb7ed9002e6a58e08a3101454f3e4cb15934db77388cb410b
|
data/.DS_Store
ADDED
|
Binary file
|
data/.gitignore
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
/pkg
|
data/Gemfile
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
# Specify your gem's dependencies in
|
|
2
|
-
gemspec
|
|
1
|
+
# Specify your gem's dependencies in banklink.gemspec
|
|
2
|
+
gemspec
|
data/Gemfile.lock
CHANGED
|
@@ -1,88 +1,25 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
banklink_lv (
|
|
4
|
+
banklink_lv (1.0.2)
|
|
5
5
|
activesupport
|
|
6
|
-
rails
|
|
7
6
|
|
|
8
7
|
GEM
|
|
9
8
|
specs:
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
activesupport (= 3.2.13)
|
|
25
|
-
builder (~> 3.0.0)
|
|
26
|
-
activerecord (3.2.13)
|
|
27
|
-
activemodel (= 3.2.13)
|
|
28
|
-
activesupport (= 3.2.13)
|
|
29
|
-
arel (~> 3.0.2)
|
|
30
|
-
tzinfo (~> 0.3.29)
|
|
31
|
-
activeresource (3.2.13)
|
|
32
|
-
activemodel (= 3.2.13)
|
|
33
|
-
activesupport (= 3.2.13)
|
|
34
|
-
activesupport (3.2.13)
|
|
35
|
-
i18n (= 0.6.1)
|
|
36
|
-
multi_json (~> 1.0)
|
|
37
|
-
arel (3.0.2)
|
|
38
|
-
builder (3.0.4)
|
|
39
|
-
erubis (2.7.0)
|
|
40
|
-
hike (1.2.2)
|
|
41
|
-
i18n (0.6.1)
|
|
42
|
-
journey (1.0.4)
|
|
43
|
-
json (1.8.0)
|
|
44
|
-
mail (2.5.4)
|
|
45
|
-
mime-types (~> 1.16)
|
|
46
|
-
treetop (~> 1.4.8)
|
|
47
|
-
mime-types (1.23)
|
|
48
|
-
multi_json (1.7.3)
|
|
49
|
-
polyglot (0.3.3)
|
|
50
|
-
rack (1.4.5)
|
|
51
|
-
rack-cache (1.2)
|
|
52
|
-
rack (>= 0.4)
|
|
53
|
-
rack-ssl (1.3.3)
|
|
54
|
-
rack
|
|
55
|
-
rack-test (0.6.2)
|
|
56
|
-
rack (>= 1.0)
|
|
57
|
-
rails (3.2.13)
|
|
58
|
-
actionmailer (= 3.2.13)
|
|
59
|
-
actionpack (= 3.2.13)
|
|
60
|
-
activerecord (= 3.2.13)
|
|
61
|
-
activeresource (= 3.2.13)
|
|
62
|
-
activesupport (= 3.2.13)
|
|
63
|
-
bundler (~> 1.0)
|
|
64
|
-
railties (= 3.2.13)
|
|
65
|
-
railties (3.2.13)
|
|
66
|
-
actionpack (= 3.2.13)
|
|
67
|
-
activesupport (= 3.2.13)
|
|
68
|
-
rack-ssl (~> 1.3.2)
|
|
69
|
-
rake (>= 0.8.7)
|
|
70
|
-
rdoc (~> 3.4)
|
|
71
|
-
thor (>= 0.14.6, < 2.0)
|
|
72
|
-
rake (0.9.2.2)
|
|
73
|
-
rdoc (3.12.2)
|
|
74
|
-
json (~> 1.4)
|
|
75
|
-
sprockets (2.2.2)
|
|
76
|
-
hike (~> 1.2)
|
|
77
|
-
multi_json (~> 1.0)
|
|
78
|
-
rack (~> 1.0)
|
|
79
|
-
tilt (~> 1.1, != 1.3.0)
|
|
80
|
-
thor (0.18.1)
|
|
81
|
-
tilt (1.4.1)
|
|
82
|
-
treetop (1.4.12)
|
|
83
|
-
polyglot
|
|
84
|
-
polyglot (>= 0.3.1)
|
|
85
|
-
tzinfo (0.3.37)
|
|
9
|
+
activesupport (4.0.2)
|
|
10
|
+
i18n (~> 0.6, >= 0.6.4)
|
|
11
|
+
minitest (~> 4.2)
|
|
12
|
+
multi_json (~> 1.3)
|
|
13
|
+
thread_safe (~> 0.1)
|
|
14
|
+
tzinfo (~> 0.3.37)
|
|
15
|
+
atomic (1.1.14)
|
|
16
|
+
i18n (0.6.9)
|
|
17
|
+
minitest (4.7.5)
|
|
18
|
+
multi_json (1.8.4)
|
|
19
|
+
rake (10.1.1)
|
|
20
|
+
thread_safe (0.1.3)
|
|
21
|
+
atomic
|
|
22
|
+
tzinfo (0.3.38)
|
|
86
23
|
|
|
87
24
|
PLATFORMS
|
|
88
25
|
ruby
|
data/README.rdoc
CHANGED
|
@@ -2,6 +2,13 @@
|
|
|
2
2
|
|
|
3
3
|
Payment system integration for Latvian banks what uses banklink API.
|
|
4
4
|
|
|
5
|
+
== Changes in 1.0.0
|
|
6
|
+
|
|
7
|
+
* No test keys and certificates options.
|
|
8
|
+
* Remove Rails depedency.
|
|
9
|
+
* Refactured SwedbankLv to Swedbank
|
|
10
|
+
* Notification#transaction_id is comming from VK_REF. (not VK_T_NO anymore)
|
|
11
|
+
|
|
5
12
|
== Supported banks
|
|
6
13
|
|
|
7
14
|
Swedbank (Latvia)
|
|
@@ -17,19 +24,15 @@ Not yet in RubyGems
|
|
|
17
24
|
|
|
18
25
|
Insert this into your Gemfile
|
|
19
26
|
|
|
20
|
-
gem "banklink_lv", :
|
|
27
|
+
gem "banklink_lv", git: "artursbraucs/banklink"
|
|
21
28
|
|
|
22
29
|
=== Configurations
|
|
23
30
|
|
|
24
31
|
Insert this in your config file:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
SwedbankLv.test_private_key = File.read("#{Rails.root}/path/to/your_test_private_key")
|
|
31
|
-
SwedbankLv.test_bank_certificate = File.read("#{Rails.root}/path/to/test_bank_public_key")
|
|
32
|
-
SwedbankLv.test_url = "https://ib.swedbank.lv/banklink"
|
|
32
|
+
|
|
33
|
+
Swedbank.private_key = File.read("#{Rails.root}/path/to/your_private_key")
|
|
34
|
+
Swedbank.bank_certificate = File.read("#{Rails.root}/path/to/bank_public_key")
|
|
35
|
+
Swedbank.production_url = "https://ib.swedbank.lv/banklink"
|
|
33
36
|
|
|
34
37
|
Helper for view:
|
|
35
38
|
|
|
@@ -40,9 +43,9 @@ Helper for view:
|
|
|
40
43
|
options[:reference] = '454'
|
|
41
44
|
options[:message] = 'Testing banklink'
|
|
42
45
|
@helper = Banklink::Helper.new(TRANS_ID, YOUR_SENDER_ID, options)
|
|
43
|
-
|
|
46
|
+
|
|
44
47
|
Then create Notification controller for notify. Then you can notify:
|
|
45
|
-
|
|
48
|
+
|
|
46
49
|
notify = Banklink::Notification.new(request.raw_post)
|
|
47
50
|
@text
|
|
48
51
|
if notify.acknowledge
|
|
@@ -56,16 +59,16 @@ Then create Notification controller for notify. Then you can notify:
|
|
|
56
59
|
else
|
|
57
60
|
@text = "Stmx went wrong"
|
|
58
61
|
end
|
|
59
|
-
|
|
62
|
+
|
|
60
63
|
Thats all!
|
|
61
|
-
|
|
64
|
+
|
|
62
65
|
|
|
63
66
|
== Testing
|
|
64
67
|
|
|
65
|
-
You can run the tests from this gem with (inside the
|
|
68
|
+
You can run the tests from this gem with (inside the banklink directory):
|
|
66
69
|
|
|
67
70
|
rake
|
|
68
71
|
|
|
69
72
|
== Maintainer
|
|
70
73
|
|
|
71
|
-
This gem is maintained by {Arturs Braucs @
|
|
74
|
+
This gem is maintained by {Arturs Braucs @ Weby}[mailto:arturs@weby.lv]
|
data/Rakefile
CHANGED
|
@@ -7,10 +7,10 @@ require "bundler/gem_tasks"
|
|
|
7
7
|
desc 'Default: run unit tests.'
|
|
8
8
|
task :default => :test
|
|
9
9
|
|
|
10
|
-
desc 'Test the
|
|
10
|
+
desc 'Test the banklink plugin.'
|
|
11
11
|
Rake::TestTask.new(:test) do |t|
|
|
12
12
|
t.libs << 'lib'
|
|
13
13
|
t.libs << 'test'
|
|
14
14
|
t.pattern = 'test/**/*_test.rb'
|
|
15
15
|
t.verbose = true
|
|
16
|
-
end
|
|
16
|
+
end
|
data/banklink_lv.gemspec
CHANGED
|
@@ -1,28 +1,26 @@
|
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
|
2
2
|
$:.push File.expand_path("../lib", __FILE__)
|
|
3
|
-
require "
|
|
3
|
+
require "banklink/version"
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |s|
|
|
6
6
|
s.name = "banklink_lv"
|
|
7
|
-
s.version =
|
|
7
|
+
s.version = Banklink::VERSION
|
|
8
8
|
s.author = "Arturs Braucs"
|
|
9
|
-
s.email = ["arturs@
|
|
10
|
-
s.homepage = "https://github.com/
|
|
9
|
+
s.email = ["arturs@weby.lv"]
|
|
10
|
+
s.homepage = "https://github.com/artursbraucs/banklink"
|
|
11
11
|
s.platform = Gem::Platform::RUBY
|
|
12
12
|
s.summary = "Banklink integration in your website without active merchant (Latvia)"
|
|
13
13
|
s.require_path = "lib"
|
|
14
14
|
s.has_rdoc = false
|
|
15
|
-
s.extra_rdoc_files = ["README"]
|
|
16
|
-
|
|
15
|
+
s.extra_rdoc_files = ["README.rdoc"]
|
|
16
|
+
|
|
17
17
|
s.files = `git ls-files`.split("\n")
|
|
18
18
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
|
19
19
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
|
20
20
|
s.require_paths = ["lib"]
|
|
21
21
|
s.rubyforge_project = "banklink_lv"
|
|
22
|
-
|
|
22
|
+
|
|
23
23
|
s.add_development_dependency 'rake'
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
s.add_dependency "activesupport"
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
end
|
|
26
|
+
end
|
data/init.rb
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
require '
|
|
1
|
+
require 'banklink'
|
|
@@ -6,22 +6,22 @@ module Banklink
|
|
|
6
6
|
# when 'EYP' then SebEst
|
|
7
7
|
# when 'SAMPOPANK' then SampoEst
|
|
8
8
|
# when 'HP' then SwedbankEst
|
|
9
|
-
|
|
9
|
+
|
|
10
10
|
# Swedbank uses same sender id for different countries, currently can't detect Lithuanian
|
|
11
11
|
# use:
|
|
12
|
-
# notify =
|
|
13
|
-
#when 'HP' then
|
|
14
|
-
|
|
12
|
+
# notify = Swedbank::Notification.new(params)
|
|
13
|
+
#when 'HP' then Swedbank
|
|
14
|
+
|
|
15
15
|
#when '70440' then SebLtu
|
|
16
16
|
#when 'SMPOLT22' then DanskeLtu
|
|
17
17
|
#when 'SNORLT22' then SnorasLtu
|
|
18
18
|
#when '112029720' then DnbnordLtu
|
|
19
|
-
#when '70100' then UbLtu
|
|
20
|
-
|
|
19
|
+
#when '70100' then UbLtu
|
|
20
|
+
|
|
21
21
|
# else raise(ArgumentError, "unknown sender id: #{params['VK_SND_ID']}")
|
|
22
22
|
# end
|
|
23
23
|
#end
|
|
24
|
-
|
|
24
|
+
|
|
25
25
|
# Define required fields for each service message.
|
|
26
26
|
# We need to know this in order to calculate VK_MAC
|
|
27
27
|
# from a given hash of parameters.
|
|
@@ -87,7 +87,7 @@ module Banklink
|
|
|
87
87
|
'VK_REF',
|
|
88
88
|
'VK_MSG']
|
|
89
89
|
}
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
# Calculation using method VK_VERSION=008:
|
|
92
92
|
# VK_MAC is RSA signature of the request fields coded into BASE64.
|
|
93
93
|
# VK_MAC will be calculated using secret key of the sender using RSA. Signature will
|
|
@@ -106,7 +106,7 @@ module Banklink
|
|
|
106
106
|
def func_p(val)
|
|
107
107
|
sprintf("%03i", val.length)
|
|
108
108
|
end
|
|
109
|
-
|
|
109
|
+
|
|
110
110
|
# Generate a string to be signed out of service message parameters.
|
|
111
111
|
# p(x1 )|| x1|| p(x2 )|| x2 || ... ||p( xn )||xn
|
|
112
112
|
# || is string concatenation mark
|
|
@@ -121,15 +121,15 @@ module Banklink
|
|
|
121
121
|
end
|
|
122
122
|
str
|
|
123
123
|
end
|
|
124
|
-
|
|
124
|
+
|
|
125
125
|
def generate_signature(service_msg_number, sigparams)
|
|
126
126
|
# privkey = self.class.parent.get_private_key
|
|
127
|
-
privkey =
|
|
127
|
+
privkey = Swedbank.get_private_key
|
|
128
128
|
privkey.sign(OpenSSL::Digest::SHA1.new, generate_data_string(service_msg_number, sigparams))
|
|
129
129
|
end
|
|
130
|
-
|
|
130
|
+
|
|
131
131
|
def generate_mac(service_msg_number, sigparams)
|
|
132
132
|
Base64.encode64(generate_signature(service_msg_number, sigparams)).gsub(/\n/,'')
|
|
133
133
|
end
|
|
134
134
|
end
|
|
135
|
-
end
|
|
135
|
+
end
|
|
@@ -2,12 +2,12 @@ module Banklink #:nodoc:
|
|
|
2
2
|
class Helper
|
|
3
3
|
attr_reader :fields
|
|
4
4
|
include Banklink::Common
|
|
5
|
-
|
|
5
|
+
|
|
6
6
|
def initialize(order, account, options = {})
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
@options = options
|
|
9
9
|
@fields = {}
|
|
10
|
-
|
|
10
|
+
|
|
11
11
|
@options['VK_SND_ID'] = account
|
|
12
12
|
@options['VK_STAMP'] = order
|
|
13
13
|
@options['VK_AMOUNT'] = options[:amount]
|
|
@@ -16,7 +16,7 @@ module Banklink #:nodoc:
|
|
|
16
16
|
@options['VK_REF'] = options[:reference] || ""
|
|
17
17
|
@options['VK_MSG'] = options[:message]
|
|
18
18
|
@options['VK_LANG'] = options[:lang] if options[:lang]
|
|
19
|
-
|
|
19
|
+
|
|
20
20
|
if options[:service_msg_number]
|
|
21
21
|
@service_msg_number = options.delete(:service_msg_number)
|
|
22
22
|
else
|
|
@@ -29,12 +29,12 @@ module Banklink #:nodoc:
|
|
|
29
29
|
add_return_url_field
|
|
30
30
|
add_lang_field
|
|
31
31
|
end
|
|
32
|
-
|
|
33
|
-
|
|
32
|
+
|
|
33
|
+
|
|
34
34
|
def form_fields
|
|
35
35
|
@fields
|
|
36
36
|
end
|
|
37
|
-
|
|
37
|
+
|
|
38
38
|
def self.mapping(attribute, options = {})
|
|
39
39
|
self.mappings ||= {}
|
|
40
40
|
self.mappings[attribute] = options
|
|
@@ -49,11 +49,11 @@ module Banklink #:nodoc:
|
|
|
49
49
|
# Signature used to validate previous parameters
|
|
50
50
|
add_field('VK_MAC', generate_mac(@service_msg_number, form_fields))
|
|
51
51
|
end
|
|
52
|
-
|
|
52
|
+
|
|
53
53
|
def add_return_url_field
|
|
54
54
|
add_field('VK_RETURN', @options['VK_RETURN'])
|
|
55
55
|
end
|
|
56
|
-
|
|
56
|
+
|
|
57
57
|
def add_lang_field
|
|
58
58
|
if @options['VK_LANG']
|
|
59
59
|
add_field(vk_lang_param, @options['VK_LANG'])
|
|
@@ -65,7 +65,7 @@ module Banklink #:nodoc:
|
|
|
65
65
|
def add_charset_field
|
|
66
66
|
add_field vk_charset_param, vk_charset
|
|
67
67
|
end
|
|
68
|
-
|
|
68
|
+
|
|
69
69
|
def add_required_params
|
|
70
70
|
required_params = Banklink.required_service_params[@service_msg_number]
|
|
71
71
|
required_params.each do |param|
|
|
@@ -82,7 +82,7 @@ module Banklink #:nodoc:
|
|
|
82
82
|
def vk_charset_param
|
|
83
83
|
'VK_ENCODING'
|
|
84
84
|
end
|
|
85
|
-
|
|
85
|
+
|
|
86
86
|
def vk_lang
|
|
87
87
|
'LAT'
|
|
88
88
|
end
|
|
@@ -108,10 +108,10 @@ module Banklink #:nodoc:
|
|
|
108
108
|
private
|
|
109
109
|
# Iconv converter to convert from utf8 to
|
|
110
110
|
# the charset the bank api expects.
|
|
111
|
-
|
|
111
|
+
|
|
112
112
|
def encode_to_utf8 string
|
|
113
113
|
string.encode('UTF-8', :invalid => :replace, :replace => '').encode('UTF-8')
|
|
114
114
|
end
|
|
115
|
-
|
|
115
|
+
|
|
116
116
|
end
|
|
117
|
-
end
|
|
117
|
+
end
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
module Banklink
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
class Notification
|
|
4
4
|
include Banklink::Common
|
|
5
5
|
attr_accessor :params
|
|
6
6
|
attr_accessor :raw
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
# set this to an array in the subclass, to specify which IPs are allowed to send requests
|
|
9
9
|
attr_accessor :production_ips
|
|
10
10
|
|
|
@@ -18,80 +18,80 @@ module Banklink
|
|
|
18
18
|
(gross.to_f * 100.0).round
|
|
19
19
|
end
|
|
20
20
|
|
|
21
|
-
# This combines the gross and currency and returns a proper Money object.
|
|
21
|
+
# This combines the gross and currency and returns a proper Money object.
|
|
22
22
|
# this requires the money library located at http://dist.leetsoft.com/api/money
|
|
23
23
|
def amount
|
|
24
24
|
return gross_cents
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
# reset the notification.
|
|
27
|
+
# reset the notification.
|
|
28
28
|
def empty!
|
|
29
29
|
@params = Hash.new
|
|
30
|
-
@raw = ""
|
|
30
|
+
@raw = ""
|
|
31
31
|
end
|
|
32
|
-
|
|
32
|
+
|
|
33
33
|
# Check if the request comes from an official IP
|
|
34
34
|
def valid_sender?(ip)
|
|
35
35
|
return true if Rails.env == :test || production_ips.blank?
|
|
36
36
|
production_ips.include?(ip)
|
|
37
37
|
end
|
|
38
|
-
|
|
38
|
+
|
|
39
39
|
# A helper method to parse the raw post of the request & return
|
|
40
40
|
# the right Notification subclass based on the sender id.
|
|
41
41
|
#def self.get_notification(http_raw_data)
|
|
42
42
|
# params = ActiveMerchant::Billing::Integrations::Notification.new(http_raw_data).params
|
|
43
43
|
# Banklink.get_class(params)::Notification.new(http_raw_data)
|
|
44
44
|
#end
|
|
45
|
-
|
|
45
|
+
|
|
46
46
|
def get_data_string
|
|
47
47
|
generate_data_string(params['VK_SERVICE'], params)
|
|
48
48
|
end
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
def bank_signature_valid?(bank_signature, service_msg_number, sigparams)
|
|
51
|
-
|
|
51
|
+
Swedbank.get_bank_public_key.verify(OpenSSL::Digest::SHA1.new, bank_signature, generate_data_string(service_msg_number, sigparams))
|
|
52
52
|
end
|
|
53
|
-
|
|
53
|
+
|
|
54
54
|
def complete?
|
|
55
55
|
params['VK_SERVICE'] == '1101'
|
|
56
56
|
end
|
|
57
|
-
|
|
57
|
+
|
|
58
58
|
def wait?
|
|
59
59
|
params['VK_SERVICE'] == '1201'
|
|
60
60
|
end
|
|
61
|
-
|
|
61
|
+
|
|
62
62
|
def failed?
|
|
63
63
|
params['VK_SERVICE'] == '1901'
|
|
64
64
|
end
|
|
65
|
-
|
|
65
|
+
|
|
66
66
|
def currency
|
|
67
67
|
params['VK_CURR']
|
|
68
68
|
end
|
|
69
|
-
|
|
69
|
+
|
|
70
70
|
# The order id we passed to the form helper.
|
|
71
71
|
def item_id
|
|
72
72
|
params['VK_STAMP']
|
|
73
73
|
end
|
|
74
|
-
|
|
74
|
+
|
|
75
75
|
def transaction_id
|
|
76
|
-
params['
|
|
76
|
+
params['VK_REF']
|
|
77
77
|
end
|
|
78
|
-
|
|
78
|
+
|
|
79
79
|
def sender_name
|
|
80
80
|
params['VK_SND_NAME']
|
|
81
81
|
end
|
|
82
|
-
|
|
82
|
+
|
|
83
83
|
def sender_bank_account
|
|
84
84
|
params['VK_SND_ACC']
|
|
85
85
|
end
|
|
86
|
-
|
|
86
|
+
|
|
87
87
|
def reciever_name
|
|
88
88
|
params['VK_REC_NAME']
|
|
89
89
|
end
|
|
90
|
-
|
|
90
|
+
|
|
91
91
|
def reciever_bank_account
|
|
92
92
|
params['VK_REC_ACC']
|
|
93
93
|
end
|
|
94
|
-
|
|
94
|
+
|
|
95
95
|
# When was this payment received by the client.
|
|
96
96
|
# We're expecting a dd.mm.yyyy format.
|
|
97
97
|
def received_at
|
|
@@ -100,36 +100,36 @@ module Banklink
|
|
|
100
100
|
day, month, year = *date.split('.').map(&:to_i)
|
|
101
101
|
Date.civil(year, month, day)
|
|
102
102
|
end
|
|
103
|
-
|
|
103
|
+
|
|
104
104
|
def signature
|
|
105
105
|
Base64.decode64(params['VK_MAC'])
|
|
106
106
|
end
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
# The money amount we received, string.
|
|
109
109
|
def gross
|
|
110
110
|
params['VK_AMOUNT']
|
|
111
111
|
end
|
|
112
|
-
|
|
112
|
+
|
|
113
113
|
# Was this a test transaction?
|
|
114
114
|
def test?
|
|
115
115
|
params['VK_REC_ID'] == 'testvpos'
|
|
116
116
|
end
|
|
117
|
-
|
|
117
|
+
|
|
118
118
|
# TODO what should be here?
|
|
119
119
|
def status
|
|
120
120
|
complete? ? 'Completed' : 'Failed'
|
|
121
121
|
end
|
|
122
|
-
|
|
122
|
+
|
|
123
123
|
# If our request was sent automatically by the bank (true) or manually
|
|
124
124
|
# by the user triggering the callback by pressing a "return" button (false).
|
|
125
125
|
def automatic?
|
|
126
126
|
params['VK_AUTO'].upcase == 'Y'
|
|
127
127
|
end
|
|
128
|
-
|
|
128
|
+
|
|
129
129
|
def success?
|
|
130
130
|
acknowledge && complete?
|
|
131
131
|
end
|
|
132
|
-
|
|
132
|
+
|
|
133
133
|
# We don't actually acknowledge the notification by making another request ourself,
|
|
134
134
|
# instead, we check the notification by checking the signature that came with the notification.
|
|
135
135
|
# This method has to be called when handling the notification & deciding whether to process the order.
|
|
@@ -146,22 +146,18 @@ module Banklink
|
|
|
146
146
|
def acknowledge
|
|
147
147
|
bank_signature_valid?(signature, params['VK_SERVICE'], params)
|
|
148
148
|
end
|
|
149
|
-
|
|
150
|
-
|
|
149
|
+
|
|
150
|
+
|
|
151
151
|
private
|
|
152
152
|
|
|
153
153
|
# Take the posted data and move the relevant data into a hash
|
|
154
154
|
def parse(post)
|
|
155
155
|
@raw = post.to_s
|
|
156
|
-
|
|
157
|
-
for line in @raw.split('&')
|
|
156
|
+
for line in @raw.split('&')
|
|
158
157
|
key, value = *line.scan( %r{^([A-Za-z0-9_.]+)\=(.*)$} ).flatten
|
|
159
158
|
params[key] = CGI.unescape(value)
|
|
160
|
-
|
|
161
|
-
puts "<#{key}> #{params[key]}"
|
|
162
159
|
end
|
|
163
|
-
puts "======================="
|
|
164
160
|
end
|
|
165
161
|
end
|
|
166
162
|
end
|
|
167
|
-
|
|
163
|
+
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
module Swedbank
|
|
2
|
+
|
|
3
|
+
# Raw X509 certificate of the bank, string format.
|
|
4
|
+
mattr_accessor :bank_certificate
|
|
5
|
+
# RSA public key of the bank, taken from the X509 certificate of the bank. OpenSSL container.
|
|
6
|
+
def self.get_bank_public_key
|
|
7
|
+
cert = self.bank_certificate
|
|
8
|
+
OpenSSL::X509::Certificate.new(cert.gsub(/ /, '')).public_key
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
mattr_accessor :private_key
|
|
12
|
+
# Our RSA private key. OpenSSL container.
|
|
13
|
+
def self.get_private_key
|
|
14
|
+
private_key = self.private_key
|
|
15
|
+
OpenSSL::PKey::RSA.new(private_key.gsub(/ /, ''))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
mattr_accessor :service_url
|
|
19
|
+
def self.service_url
|
|
20
|
+
self.service_url
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.notification(post)
|
|
24
|
+
Notification.new(post)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
data/lib/banklink.rb
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
require 'banklink/version'
|
|
2
|
+
|
|
3
|
+
require "base64"
|
|
4
|
+
require "active_support/dependencies"
|
|
5
|
+
|
|
6
|
+
require 'net/http'
|
|
7
|
+
require 'net/https'
|
|
8
|
+
require 'uri'
|
|
9
|
+
|
|
10
|
+
require 'digest'
|
|
11
|
+
require 'digest/md5'
|
|
12
|
+
require 'openssl'
|
|
13
|
+
|
|
14
|
+
require 'cgi'
|
|
15
|
+
|
|
16
|
+
require 'banklink/banklink'
|
|
17
|
+
require 'banklink/base'
|
|
18
|
+
require 'banklink/helper'
|
|
19
|
+
require 'banklink/swedbank'
|
|
20
|
+
require 'banklink/notification'
|
|
@@ -4,7 +4,7 @@ require File.dirname(__FILE__) + '/test_helper'
|
|
|
4
4
|
|
|
5
5
|
class BanklinkHelperTest < Test::Unit::TestCase
|
|
6
6
|
include Banklink
|
|
7
|
-
|
|
7
|
+
|
|
8
8
|
def test_should_create_fields_for_1002
|
|
9
9
|
options = {}
|
|
10
10
|
options[:amount] = '1.55'
|
|
@@ -12,12 +12,9 @@ class BanklinkHelperTest < Test::Unit::TestCase
|
|
|
12
12
|
options[:return] = 'http://default/'
|
|
13
13
|
options[:reference] = '54'
|
|
14
14
|
options[:message] = 'Pay for smtx'
|
|
15
|
-
|
|
15
|
+
|
|
16
16
|
helper = Helper.new(300, '300', options)
|
|
17
|
-
helper.form_fields.each do |field, value|
|
|
18
|
-
puts "<#{field}> #{value}"
|
|
19
|
-
end
|
|
20
17
|
assert_equal 12, helper.form_fields.size
|
|
21
18
|
end
|
|
22
|
-
|
|
23
|
-
end
|
|
19
|
+
|
|
20
|
+
end
|
|
@@ -8,7 +8,7 @@ class BanklinkNotificationTest < Test::Unit::TestCase
|
|
|
8
8
|
def setup
|
|
9
9
|
@swedbank = Banklink::Notification.new(http_raw_data)
|
|
10
10
|
end
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
# TODO: fix test
|
|
13
13
|
def test_acknowledgement
|
|
14
14
|
assert_equal false, @swedbank.acknowledge
|
|
@@ -18,7 +18,7 @@ class BanklinkNotificationTest < Test::Unit::TestCase
|
|
|
18
18
|
assert_equal true, @swedbank.complete?
|
|
19
19
|
assert_equal 'Completed', @swedbank.status
|
|
20
20
|
assert_equal "88", @swedbank.item_id
|
|
21
|
-
assert_equal "
|
|
21
|
+
assert_equal "123", @swedbank.transaction_id
|
|
22
22
|
assert_equal '33', @swedbank.gross
|
|
23
23
|
assert_equal "EEK", @swedbank.currency
|
|
24
24
|
assert_equal '26.11.2007', @swedbank.received_at.strftime("%d.%m.%Y")
|
|
@@ -39,5 +39,5 @@ class BanklinkNotificationTest < Test::Unit::TestCase
|
|
|
39
39
|
def http_raw_data
|
|
40
40
|
"VK_SERVICE=1101&VK_VERSION=008&VK_SND_ID=EYP&VK_REC_ID=testvpos&VK_STAMP=88&VK_T_NO=2774&VK_AMOUNT=33&VK_CURR=EEK&VK_REC_ACC=10002050618003&VK_REC_NAME=ALLAS+ALLAR&VK_SND_ACC=10010046155012&VK_SND_NAME=t%C3%B5%C3%B5ger+%2C+Le%C3%B5p%C3%A4%C3%B6ld%C5%BE%C5%BD%C5%A1%C5%A0&VK_REF=123&VK_MSG=Porgandid&VK_T_DATE=26.11.2007&VK_MAC=LyCZRncu%2F%2BOi5nwzOkI6C9UMFohN6tSl3tLFyIJyNp2lGKBrDKZ2H8b%2BadU3XalzS7MwnAj8r%2FRhLpbsGNE5ysNyM4CKkSrsVzxoXbt9%2BB1foH9Rlp9LCeoR2H774f8UcMe9RVsE%2B%2BZfrEZzzXYyR1PXDCVOShQOAxlD9pbh8nk%3D&VK_LANG=EST&VK_RETURN=http%3A%2F%2F90.190.110.154%2Fseb_est%2Fnotify&VK_AUTO=N&VK_CHARSET=UTF-8&keel=EST&appname=UN3MIN&act=UPOSTEST2"
|
|
41
41
|
end
|
|
42
|
-
|
|
43
|
-
end
|
|
42
|
+
|
|
43
|
+
end
|
data/test/database.yml
CHANGED
data/test/test_helper.rb
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
# encoding: utf-8
|
|
2
2
|
|
|
3
|
-
ENV['RAILS_ENV'] = 'test'
|
|
4
|
-
ENV['RAILS_ROOT'] ||= File.dirname(__FILE__) + '/../../../..'
|
|
5
|
-
|
|
3
|
+
# ENV['RAILS_ENV'] = 'test'
|
|
4
|
+
#ENV['RAILS_ROOT'] ||= File.dirname(__FILE__) + '/../../../..'
|
|
5
|
+
|
|
6
6
|
require 'test/unit'
|
|
7
|
+
require 'banklink'
|
|
7
8
|
# require File.expand_path(File.join(ENV['RAILS_ROOT'], 'config/environment.rb'))
|
|
8
9
|
|
|
9
|
-
require File.dirname(__FILE__) + '/../rails/init'
|
|
10
|
+
# require File.dirname(__FILE__) + '/../rails/init'
|
|
11
|
+
|
|
10
12
|
|
|
11
13
|
# default params
|
|
12
|
-
PARAMS_1002 = {'VK_SERVICE' => 'foo', 'VK_VERSION' => 'bar', 'VK_SND_ID' => 'goo', 'VK_STAMP' => 'tooboo', 'VK_AMOUNT' => '10565', 'VK_CURR' => 'LVL', 'VK_REF' => 'dsa', 'VK_MSG' => 'Āžēīū'}
|
|
14
|
+
PARAMS_1002 = {'VK_SERVICE' => 'foo', 'VK_VERSION' => 'bar', 'VK_SND_ID' => 'goo', 'VK_STAMP' => 'tooboo', 'VK_AMOUNT' => '10565', 'VK_CURR' => 'LVL', 'VK_REF' => 'dsa', 'VK_MSG' => 'Āžēīū'}
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
Swedbank.private_key = <<EOF
|
|
15
17
|
-----BEGIN RSA PRIVATE KEY-----
|
|
16
18
|
MIICXAIBAAKBgQC+AROlXiRvi1T7Q9fAh0Lw73szAn26mqfKDqd6Bdplq3v+gVWC
|
|
17
19
|
3v0+bgtfNakRE/UVYOxEA0z0viqRpKzPuNy8OstTMe8fFKs19NW8lBYik6NzJ4Bk
|
|
@@ -29,7 +31,7 @@ m3gFeXEBgzGn9UOd6xIAp0p7A1XVBN8XzDMa09gSOks=
|
|
|
29
31
|
-----END RSA PRIVATE KEY-----
|
|
30
32
|
EOF
|
|
31
33
|
|
|
32
|
-
|
|
34
|
+
Swedbank.bank_certificate = <<EOF
|
|
33
35
|
-----BEGIN CERTIFICATE-----
|
|
34
36
|
MIIDRTCCAq6gAwIBAgIBADANBgkqhkiG9w0BAQQFADB7MQswCQYDVQQGEwJFRTEO
|
|
35
37
|
MAwGA1UECBMFSGFyanUxEDAOBgNVBAcTB1RhbGxpbm4xDDAKBgNVBAoTA0VZUDEL
|
|
@@ -52,14 +54,14 @@ C82uR/wUZJDw9kj+R1O46/byG8yA+S9FVw==
|
|
|
52
54
|
-----END CERTIFICATE-----
|
|
53
55
|
EOF
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
+
Swedbank.service_url = 'https://banklink.lv'
|
|
58
|
+
|
|
57
59
|
def load_schema
|
|
58
60
|
config = YAML::load(IO.read(File.dirname(__FILE__) + '/database.yml'))
|
|
59
61
|
ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
|
|
60
|
-
|
|
62
|
+
|
|
61
63
|
db_adapter = ENV['DB']
|
|
62
|
-
|
|
64
|
+
|
|
63
65
|
# no db passed, try one of these fine config-free DBs before bombing.
|
|
64
66
|
db_adapter ||=
|
|
65
67
|
begin
|
|
@@ -73,11 +75,11 @@ def load_schema
|
|
|
73
75
|
rescue MissingSourceFile
|
|
74
76
|
end
|
|
75
77
|
end
|
|
76
|
-
|
|
78
|
+
|
|
77
79
|
if db_adapter.nil?
|
|
78
80
|
raise "No DB Adapter selected. Pass the DB= option to pick one, or install Sqlite or Sqlite3."
|
|
79
81
|
end
|
|
80
|
-
|
|
82
|
+
|
|
81
83
|
ActiveRecord::Base.establish_connection(config[db_adapter])
|
|
82
84
|
load(File.dirname(__FILE__) + "/schema.rb")
|
|
83
|
-
end
|
|
85
|
+
end
|
metadata
CHANGED
|
@@ -1,90 +1,67 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: banklink_lv
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
5
|
-
prerelease:
|
|
4
|
+
version: 1.0.2
|
|
6
5
|
platform: ruby
|
|
7
6
|
authors:
|
|
8
7
|
- Arturs Braucs
|
|
9
8
|
autorequire:
|
|
10
9
|
bindir: bin
|
|
11
10
|
cert_chain: []
|
|
12
|
-
date:
|
|
11
|
+
date: 2014-02-18 00:00:00.000000000 Z
|
|
13
12
|
dependencies:
|
|
14
13
|
- !ruby/object:Gem::Dependency
|
|
15
14
|
name: rake
|
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
|
17
|
-
none: false
|
|
18
16
|
requirements:
|
|
19
|
-
- -
|
|
17
|
+
- - ">="
|
|
20
18
|
- !ruby/object:Gem::Version
|
|
21
19
|
version: '0'
|
|
22
20
|
type: :development
|
|
23
21
|
prerelease: false
|
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
25
|
-
none: false
|
|
26
23
|
requirements:
|
|
27
|
-
- -
|
|
24
|
+
- - ">="
|
|
28
25
|
- !ruby/object:Gem::Version
|
|
29
26
|
version: '0'
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
|
31
28
|
name: activesupport
|
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
|
33
|
-
none: false
|
|
34
30
|
requirements:
|
|
35
|
-
- -
|
|
31
|
+
- - ">="
|
|
36
32
|
- !ruby/object:Gem::Version
|
|
37
33
|
version: '0'
|
|
38
34
|
type: :runtime
|
|
39
35
|
prerelease: false
|
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
41
|
-
none: false
|
|
42
37
|
requirements:
|
|
43
|
-
- -
|
|
44
|
-
- !ruby/object:Gem::Version
|
|
45
|
-
version: '0'
|
|
46
|
-
- !ruby/object:Gem::Dependency
|
|
47
|
-
name: rails
|
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
|
49
|
-
none: false
|
|
50
|
-
requirements:
|
|
51
|
-
- - ! '>='
|
|
52
|
-
- !ruby/object:Gem::Version
|
|
53
|
-
version: '0'
|
|
54
|
-
type: :runtime
|
|
55
|
-
prerelease: false
|
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
57
|
-
none: false
|
|
58
|
-
requirements:
|
|
59
|
-
- - ! '>='
|
|
38
|
+
- - ">="
|
|
60
39
|
- !ruby/object:Gem::Version
|
|
61
40
|
version: '0'
|
|
62
41
|
description:
|
|
63
42
|
email:
|
|
64
|
-
- arturs@
|
|
43
|
+
- arturs@weby.lv
|
|
65
44
|
executables: []
|
|
66
45
|
extensions: []
|
|
67
46
|
extra_rdoc_files:
|
|
68
|
-
- README
|
|
47
|
+
- README.rdoc
|
|
69
48
|
files:
|
|
49
|
+
- ".DS_Store"
|
|
50
|
+
- ".gitignore"
|
|
70
51
|
- Gemfile
|
|
71
52
|
- Gemfile.lock
|
|
72
53
|
- MIT-LICENSE
|
|
73
|
-
- README
|
|
74
54
|
- README.rdoc
|
|
75
55
|
- Rakefile
|
|
76
56
|
- banklink_lv.gemspec
|
|
77
57
|
- init.rb
|
|
78
|
-
- lib/
|
|
79
|
-
- lib/
|
|
80
|
-
- lib/
|
|
81
|
-
- lib/
|
|
82
|
-
- lib/
|
|
83
|
-
- lib/
|
|
84
|
-
- lib/
|
|
85
|
-
- pkg/banklink_lv-0.0.3.gem
|
|
86
|
-
- pkg/banklink_lv-0.0.4.gem
|
|
87
|
-
- rails/init.rb
|
|
58
|
+
- lib/banklink.rb
|
|
59
|
+
- lib/banklink/banklink.rb
|
|
60
|
+
- lib/banklink/base.rb
|
|
61
|
+
- lib/banklink/helper.rb
|
|
62
|
+
- lib/banklink/notification.rb
|
|
63
|
+
- lib/banklink/swedbank.rb
|
|
64
|
+
- lib/banklink/version.rb
|
|
88
65
|
- test/banklink_common_test.rb
|
|
89
66
|
- test/banklink_helper_test.rb
|
|
90
67
|
- test/banklink_notification_test.rb
|
|
@@ -93,35 +70,28 @@ files:
|
|
|
93
70
|
- test/schema.rb
|
|
94
71
|
- test/string_utf8_test.rb
|
|
95
72
|
- test/test_helper.rb
|
|
96
|
-
homepage: https://github.com/
|
|
73
|
+
homepage: https://github.com/artursbraucs/banklink
|
|
97
74
|
licenses: []
|
|
75
|
+
metadata: {}
|
|
98
76
|
post_install_message:
|
|
99
77
|
rdoc_options: []
|
|
100
78
|
require_paths:
|
|
101
79
|
- lib
|
|
102
80
|
required_ruby_version: !ruby/object:Gem::Requirement
|
|
103
|
-
none: false
|
|
104
81
|
requirements:
|
|
105
|
-
- -
|
|
82
|
+
- - ">="
|
|
106
83
|
- !ruby/object:Gem::Version
|
|
107
84
|
version: '0'
|
|
108
|
-
segments:
|
|
109
|
-
- 0
|
|
110
|
-
hash: 296864345537664305
|
|
111
85
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
|
-
none: false
|
|
113
86
|
requirements:
|
|
114
|
-
- -
|
|
87
|
+
- - ">="
|
|
115
88
|
- !ruby/object:Gem::Version
|
|
116
89
|
version: '0'
|
|
117
|
-
segments:
|
|
118
|
-
- 0
|
|
119
|
-
hash: 296864345537664305
|
|
120
90
|
requirements: []
|
|
121
91
|
rubyforge_project: banklink_lv
|
|
122
|
-
rubygems_version:
|
|
92
|
+
rubygems_version: 2.2.2
|
|
123
93
|
signing_key:
|
|
124
|
-
specification_version:
|
|
94
|
+
specification_version: 4
|
|
125
95
|
summary: Banklink integration in your website without active merchant (Latvia)
|
|
126
96
|
test_files:
|
|
127
97
|
- test/banklink_common_test.rb
|
data/README
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
= Swedbank Banklink
|
|
2
|
-
|
|
3
|
-
Payment system integration for Latvian banks what uses banklink API.
|
|
4
|
-
|
|
5
|
-
== Supported banks
|
|
6
|
-
|
|
7
|
-
Swedbank (Latvia)
|
|
8
|
-
Swedbank (Estonia)
|
|
9
|
-
|
|
10
|
-
== Installation
|
|
11
|
-
|
|
12
|
-
=== From Ruby Gems
|
|
13
|
-
|
|
14
|
-
Not yet in RubyGems
|
|
15
|
-
|
|
16
|
-
=== From Git
|
|
17
|
-
|
|
18
|
-
Insert this into your Gemfile
|
|
19
|
-
|
|
20
|
-
gem "banklink_lv", :git => 'git://github.com/CreativeMobile/Banklink-LV.git'
|
|
21
|
-
|
|
22
|
-
=== Configurations
|
|
23
|
-
|
|
24
|
-
Insert this in your config file:
|
|
25
|
-
|
|
26
|
-
SwedbankLv.private_key = File.read("#{Rails.root}/path/to/your_private_key")
|
|
27
|
-
SwedbankLv.bank_certificate = File.read("#{Rails.root}/path/to/bank_public_key")
|
|
28
|
-
SwedbankLv.production_url = "https://ib.swedbank.lv/banklink"
|
|
29
|
-
|
|
30
|
-
SwedbankLv.test_private_key = File.read("#{Rails.root}/path/to/your_test_private_key")
|
|
31
|
-
SwedbankLv.test_bank_certificate = File.read("#{Rails.root}/path/to/test_bank_public_key")
|
|
32
|
-
SwedbankLv.test_url = "https://ib.swedbank.lv/banklink"
|
|
33
|
-
|
|
34
|
-
Helper for view:
|
|
35
|
-
|
|
36
|
-
options = {}
|
|
37
|
-
options[:amount] = '0.01'
|
|
38
|
-
options[:currency] = 'LVL'
|
|
39
|
-
options[:return] = 'http://yourapp.com/'
|
|
40
|
-
options[:reference] = '454' # Use only for Latvian Swedbank, because Estonia has special requirements. More information here - http://www.pangaliit.ee/en/settlements-and-standards/reference-number-of-the-invoice
|
|
41
|
-
options[:message] = 'Testing banklink'
|
|
42
|
-
@helper = Banklink::Helper.new(TRANS_ID, YOUR_SENDER_ID, options)
|
|
43
|
-
|
|
44
|
-
Then create Notification controller for notify. Then you can notify:
|
|
45
|
-
|
|
46
|
-
notify = Banklink::Notification.new(request.raw_post)
|
|
47
|
-
@text
|
|
48
|
-
if notify.acknowledge
|
|
49
|
-
if notify.complete?
|
|
50
|
-
@text = "Thanks!"
|
|
51
|
-
elsif notify.failed?
|
|
52
|
-
@text = "You didn't paid!"
|
|
53
|
-
else
|
|
54
|
-
@text = "Wait or other status"
|
|
55
|
-
end
|
|
56
|
-
else
|
|
57
|
-
@text = "Stmx went wrong"
|
|
58
|
-
end
|
|
59
|
-
|
|
60
|
-
Thats all!
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
== Testing
|
|
64
|
-
|
|
65
|
-
You can run the tests from this gem with (inside the banklink_lv directory):
|
|
66
|
-
|
|
67
|
-
rake
|
|
68
|
-
|
|
69
|
-
== Maintainer
|
|
70
|
-
|
|
71
|
-
This gem is maintained by {Arturs Braucs @ Creative Mobile}[mailto:arturs@creo.mobi]
|
data/lib/banklink_lv/swedbank.rb
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
module SwedbankLv
|
|
2
|
-
|
|
3
|
-
# Raw X509 certificate of the bank, string format.
|
|
4
|
-
mattr_accessor :bank_certificate
|
|
5
|
-
mattr_accessor :test_bank_certificate
|
|
6
|
-
# RSA public key of the bank, taken from the X509 certificate of the bank. OpenSSL container.
|
|
7
|
-
def self.get_bank_public_key
|
|
8
|
-
if Rails.env == 'production'
|
|
9
|
-
cert = self.bank_certificate
|
|
10
|
-
else
|
|
11
|
-
cert = self.test_bank_certificate
|
|
12
|
-
end
|
|
13
|
-
OpenSSL::X509::Certificate.new(cert.gsub(/ /, '')).public_key
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
mattr_accessor :private_key
|
|
17
|
-
mattr_accessor :test_private_key
|
|
18
|
-
# Our RSA private key. OpenSSL container.
|
|
19
|
-
def self.get_private_key
|
|
20
|
-
if Rails.env == 'production'
|
|
21
|
-
private_key = self.private_key
|
|
22
|
-
else
|
|
23
|
-
private_key = self.test_private_key
|
|
24
|
-
end
|
|
25
|
-
OpenSSL::PKey::RSA.new(private_key.gsub(/ /, ''))
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
mattr_accessor :test_url
|
|
29
|
-
mattr_accessor :production_url
|
|
30
|
-
def self.service_url
|
|
31
|
-
mode = Rails.env
|
|
32
|
-
case mode
|
|
33
|
-
when 'production'
|
|
34
|
-
self.production_url
|
|
35
|
-
when 'test'
|
|
36
|
-
self.test_url
|
|
37
|
-
when 'development'
|
|
38
|
-
self.production_url
|
|
39
|
-
else
|
|
40
|
-
self.production_url
|
|
41
|
-
# raise StandardError, "Integration mode set to an invalid value: #{mode}"
|
|
42
|
-
end
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def self.notification(post)
|
|
46
|
-
Notification.new(post)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
end
|
data/lib/banklink_lv/version.rb
DELETED
data/lib/banklink_lv.rb
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
require 'banklink_lv/version'
|
|
2
|
-
|
|
3
|
-
require "rails"
|
|
4
|
-
require "active_support/dependencies"
|
|
5
|
-
|
|
6
|
-
require 'net/http'
|
|
7
|
-
require 'net/https'
|
|
8
|
-
require 'uri'
|
|
9
|
-
|
|
10
|
-
require 'digest'
|
|
11
|
-
require 'digest/md5'
|
|
12
|
-
require 'openssl'
|
|
13
|
-
|
|
14
|
-
require 'cgi'
|
|
15
|
-
|
|
16
|
-
require 'banklink_lv/banklink'
|
|
17
|
-
require 'banklink_lv/base'
|
|
18
|
-
require 'banklink_lv/helper'
|
|
19
|
-
require 'banklink_lv/swedbank'
|
|
20
|
-
require 'banklink_lv/notification'
|
|
21
|
-
|
|
22
|
-
%w{ models controllers helpers }.each do |dir|
|
|
23
|
-
path = File.join(File.dirname(__FILE__), 'app', dir)
|
|
24
|
-
$LOAD_PATH << path
|
|
25
|
-
# ActiveSupport::Dependencies.load_paths << path
|
|
26
|
-
# ActiveSupport::Dependencies.load_once_paths.delete(path)
|
|
27
|
-
end
|
data/pkg/banklink_lv-0.0.3.gem
DELETED
|
Binary file
|
data/pkg/banklink_lv-0.0.4.gem
DELETED
|
Binary file
|
data/rails/init.rb
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
require 'banklink_lv'
|