killbill-litle 1.0.14 → 1.1.0
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.
- data/README.md +3 -1
- data/VERSION +1 -1
- data/lib/litle/api.rb +34 -2
- data/lib/litle/config/application.rb +23 -4
- data/lib/litle/config/configuration.rb +4 -2
- data/lib/litle/models/litle_payment_method.rb +8 -9
- data/lib/litle/private_api.rb +13 -0
- data/pom.xml +1 -1
- data/spec/litle/base_plugin_spec.rb +50 -3
- metadata +2 -2
data/README.md
CHANGED
@@ -98,7 +98,9 @@ The plugin expects a `litle.yml` configuration file containing the following:
|
|
98
98
|
:username: 'your-username'
|
99
99
|
# Optional, if you are using PayPage
|
100
100
|
:secure_page_url: 'litle-secure-page-url'
|
101
|
-
:paypage_id:
|
101
|
+
:paypage_id:
|
102
|
+
:USD: 'litle-paypage-id-USD'
|
103
|
+
:EUR: 'litle-paypage-id-EURO'
|
102
104
|
:log_file: '/var/tmp/litle.log'
|
103
105
|
# Switch to false for production
|
104
106
|
:test: true
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
1.0
|
1
|
+
1.1.0
|
data/lib/litle/api.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
module Killbill::Litle
|
2
2
|
class PaymentPlugin < Killbill::Plugin::Payment
|
3
3
|
def start_plugin
|
4
|
-
Killbill::Litle.initialize! @logger, @conf_dir
|
4
|
+
Killbill::Litle.initialize! @logger, @conf_dir, @kb_apis
|
5
5
|
@gateway = Killbill::Litle.gateway
|
6
6
|
|
7
7
|
super
|
@@ -113,7 +113,39 @@ module Killbill::Litle
|
|
113
113
|
end
|
114
114
|
|
115
115
|
def reset_payment_methods(kb_account_id, payment_methods)
|
116
|
-
|
116
|
+
return if payment_methods.nil?
|
117
|
+
|
118
|
+
litle_pms = LitlePaymentMethod.from_kb_account_id(kb_account_id.to_s)
|
119
|
+
|
120
|
+
payment_methods.delete_if do |payment_method_info_plugin|
|
121
|
+
should_be_deleted = false
|
122
|
+
litle_pms.each do |litle_pm|
|
123
|
+
# Do litle_pm and payment_method_info_plugin represent the same Litle payment method?
|
124
|
+
if litle_pm.external_payment_method_id == payment_method_info_plugin.external_payment_method_id
|
125
|
+
# Do we already have a kb_payment_method_id?
|
126
|
+
if litle_pm.kb_payment_method_id == payment_method_info_plugin.payment_method_id.to_s
|
127
|
+
should_be_deleted = true
|
128
|
+
break
|
129
|
+
elsif litle_pm.kb_payment_method_id.nil?
|
130
|
+
# We didn't have the kb_payment_method_id - update it
|
131
|
+
litle_pm.kb_payment_method_id = payment_method_info_plugin.payment_method_id.to_s
|
132
|
+
should_be_deleted = litle_pm.save
|
133
|
+
break
|
134
|
+
# Otherwise the same token points to 2 different kb_payment_method_id. This should never happen,
|
135
|
+
# but we cowardly will insert a second row below
|
136
|
+
end
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
should_be_deleted
|
141
|
+
end
|
142
|
+
|
143
|
+
# The remaining elements in payment_methods are not in our table (this should never happen?!)
|
144
|
+
payment_methods.each do |payment_method_info_plugin|
|
145
|
+
LitlePaymentMethod.create :kb_account_id => payment_method_info_plugin.account_id.to_s,
|
146
|
+
:kb_payment_method_id => payment_method_info_plugin.payment_method_id.to_s,
|
147
|
+
:litle_token => payment_method_info_plugin.external_payment_method_id
|
148
|
+
end
|
117
149
|
end
|
118
150
|
|
119
151
|
private
|
@@ -9,14 +9,30 @@ helpers do
|
|
9
9
|
def plugin
|
10
10
|
Killbill::Litle::PrivatePaymentPlugin.instance
|
11
11
|
end
|
12
|
+
|
13
|
+
def required_parameter!(parameter_name, parameter_value, message='must be specified!')
|
14
|
+
halt 400, "#{parameter_name} #{message}" if parameter_value.blank?
|
15
|
+
end
|
12
16
|
end
|
13
17
|
|
14
18
|
# http://127.0.0.1:9292/plugins/killbill-litle
|
15
19
|
get '/plugins/killbill-litle' do
|
20
|
+
kb_account_id = request.GET['kb_account_id']
|
21
|
+
required_parameter! :kb_account_id, kb_account_id
|
22
|
+
|
23
|
+
secure_page_url = Killbill::Litle.config[:litle][:secure_page_url]
|
24
|
+
required_parameter! :secure_page_url, secure_page_url, 'is not configured'
|
25
|
+
|
26
|
+
# Allow currency override if needed
|
27
|
+
currency = request.GET['currency'] || plugin.get_currency(kb_account_id)
|
28
|
+
paypage_id = Killbill::Litle.config[:litle][:paypage_id][currency.to_sym]
|
29
|
+
required_parameter! :paypage_id, paypage_id, "is not configured for currency #{currency.to_sym}"
|
30
|
+
|
16
31
|
locals = {
|
17
|
-
:
|
18
|
-
:
|
19
|
-
:
|
32
|
+
:currency => currency,
|
33
|
+
:secure_page_url => secure_page_url,
|
34
|
+
:paypage_id => paypage_id,
|
35
|
+
:kb_account_id => kb_account_id,
|
20
36
|
:merchant_txn_id => request.GET['merchant_txn_id'] || '1',
|
21
37
|
:order_id => request.GET['order_id'] || '1',
|
22
38
|
:report_group => request.GET['report_group'] || 'Default Report Group',
|
@@ -30,7 +46,10 @@ post '/plugins/killbill-litle/checkout' do
|
|
30
46
|
kb_account_id = request.POST['kb_account_id']
|
31
47
|
response_paypage_registration_id = request.POST['response_paypage_registration_id']
|
32
48
|
|
33
|
-
|
49
|
+
{
|
50
|
+
:kb_account_id => kb_account_id,
|
51
|
+
:response_paypage_registration_id => response_paypage_registration_id
|
52
|
+
}.each { |k, v| required_parameter! k, v }
|
34
53
|
|
35
54
|
pm = plugin.register_token! kb_account_id, response_paypage_registration_id
|
36
55
|
redirect "/plugins/killbill-litle/1.0/pms/#{pm.id}"
|
@@ -4,11 +4,13 @@ module Killbill::Litle
|
|
4
4
|
mattr_reader :logger
|
5
5
|
mattr_reader :config
|
6
6
|
mattr_reader :gateway
|
7
|
+
mattr_reader :kb_apis
|
7
8
|
mattr_reader :initialized
|
8
9
|
mattr_reader :test
|
9
10
|
|
10
|
-
def self.initialize!(logger=Logger.new(STDOUT), conf_dir=File.expand_path('../../../', File.dirname(__FILE__)))
|
11
|
+
def self.initialize!(logger=Logger.new(STDOUT), conf_dir=File.expand_path('../../../', File.dirname(__FILE__)), kb_apis = nil)
|
11
12
|
@@logger = logger
|
13
|
+
@@kb_apis = kb_apis
|
12
14
|
|
13
15
|
config_file = "#{conf_dir}/litle.yml"
|
14
16
|
@@config = Properties.new(config_file)
|
@@ -28,4 +30,4 @@ module Killbill::Litle
|
|
28
30
|
|
29
31
|
@@initialized = true
|
30
32
|
end
|
31
|
-
end
|
33
|
+
end
|
@@ -16,6 +16,8 @@ module Killbill::Litle
|
|
16
16
|
:zip,
|
17
17
|
:country
|
18
18
|
|
19
|
+
alias_attribute :external_payment_method_id, :litle_token
|
20
|
+
|
19
21
|
def self.from_kb_account_id(kb_account_id)
|
20
22
|
find_all_by_kb_account_id_and_is_deleted(kb_account_id, false)
|
21
23
|
end
|
@@ -34,12 +36,8 @@ module Killbill::Litle
|
|
34
36
|
end
|
35
37
|
|
36
38
|
def to_payment_method_response
|
37
|
-
external_payment_method_id = litle_token
|
38
|
-
# No concept of default payment method in Litle
|
39
|
-
is_default = false
|
40
|
-
|
41
39
|
properties = []
|
42
|
-
properties << Killbill::Plugin::Model::PaymentMethodKVInfo.new(false,
|
40
|
+
properties << Killbill::Plugin::Model::PaymentMethodKVInfo.new(false, 'token', litle_token)
|
43
41
|
|
44
42
|
Killbill::Plugin::Model::PaymentMethodPlugin.new(external_payment_method_id,
|
45
43
|
is_default,
|
@@ -60,13 +58,14 @@ module Killbill::Litle
|
|
60
58
|
end
|
61
59
|
|
62
60
|
def to_payment_method_info_response
|
63
|
-
external_payment_method_id = litle_token
|
64
|
-
# No concept of default payment method in Litle
|
65
|
-
is_default = false
|
66
|
-
|
67
61
|
Killbill::Plugin::Model::PaymentMethodInfoPlugin.new(kb_account_id, kb_payment_method_id, is_default, external_payment_method_id)
|
68
62
|
end
|
69
63
|
|
64
|
+
def is_default
|
65
|
+
# No concept of default payment method in Litle
|
66
|
+
false
|
67
|
+
end
|
68
|
+
|
70
69
|
def cc_name
|
71
70
|
if cc_first_name and cc_last_name
|
72
71
|
"#{cc_first_name} #{cc_last_name}"
|
data/lib/litle/private_api.rb
CHANGED
@@ -14,6 +14,14 @@ module Killbill::Litle
|
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
+
def get_currency(kb_account_id_s)
|
18
|
+
kb_account_id = Killbill::Plugin::Model::UUID.new(kb_account_id_s)
|
19
|
+
account = kb_apis.get_account_by_id(kb_account_id)
|
20
|
+
account.currency.enum
|
21
|
+
rescue Killbill::Plugin::JKillbillApi::APINotAvailableError
|
22
|
+
'USD'
|
23
|
+
end
|
24
|
+
|
17
25
|
private
|
18
26
|
|
19
27
|
def save_response(litle_response, api_call)
|
@@ -34,5 +42,10 @@ module Killbill::Litle
|
|
34
42
|
# The logger should have been configured when the plugin started
|
35
43
|
Killbill::Litle.logger
|
36
44
|
end
|
45
|
+
|
46
|
+
def kb_apis
|
47
|
+
# The logger should have been configured when the plugin started
|
48
|
+
Killbill::Litle.kb_apis
|
49
|
+
end
|
37
50
|
end
|
38
51
|
end
|
data/pom.xml
CHANGED
@@ -25,7 +25,7 @@
|
|
25
25
|
<groupId>com.ning.killbill.ruby</groupId>
|
26
26
|
<artifactId>litle-plugin</artifactId>
|
27
27
|
<packaging>pom</packaging>
|
28
|
-
<version>1.0
|
28
|
+
<version>1.1.0</version>
|
29
29
|
<name>litle-plugin</name>
|
30
30
|
<url>http://github.com/killbill/killbill-litle-plugin</url>
|
31
31
|
<description>Plugin for accessing Litle as a payment gateway</description>
|
@@ -8,10 +8,11 @@ describe Killbill::Litle::PaymentPlugin do
|
|
8
8
|
:litle:
|
9
9
|
:merchant_id: 'merchant_id'
|
10
10
|
:password: 'password'
|
11
|
+
# As defined by spec_helper.rb
|
11
12
|
:database:
|
12
13
|
:adapter: 'sqlite3'
|
13
|
-
:database: '
|
14
|
-
eos
|
14
|
+
:database: 'test.db'
|
15
|
+
eos
|
15
16
|
file.close
|
16
17
|
|
17
18
|
@plugin = Killbill::Litle::PaymentPlugin.new
|
@@ -23,7 +24,53 @@ eos
|
|
23
24
|
end
|
24
25
|
end
|
25
26
|
|
26
|
-
it
|
27
|
+
it 'should start and stop correctly' do
|
27
28
|
@plugin.stop_plugin
|
28
29
|
end
|
30
|
+
|
31
|
+
it 'should reset payment methods' do
|
32
|
+
kb_account_id = '129384'
|
33
|
+
|
34
|
+
@plugin.get_payment_methods(kb_account_id, false, nil).size.should == 0
|
35
|
+
verify_pms kb_account_id, 0
|
36
|
+
|
37
|
+
# Create a pm with a kb_payment_method_id
|
38
|
+
Killbill::Litle::LitlePaymentMethod.create :kb_account_id => kb_account_id,
|
39
|
+
:kb_payment_method_id => 'kb-1',
|
40
|
+
:litle_token => 'litle-1'
|
41
|
+
verify_pms kb_account_id, 1
|
42
|
+
|
43
|
+
# Add some in KillBill and reset
|
44
|
+
payment_methods = []
|
45
|
+
# Random order... Shouldn't matter...
|
46
|
+
payment_methods << Killbill::Plugin::Model::PaymentMethodInfoPlugin.new(kb_account_id, 'kb-3', false, 'litle-3')
|
47
|
+
payment_methods << Killbill::Plugin::Model::PaymentMethodInfoPlugin.new(kb_account_id, 'kb-2', false, 'litle-2')
|
48
|
+
payment_methods << Killbill::Plugin::Model::PaymentMethodInfoPlugin.new(kb_account_id, 'kb-4', false, 'litle-4')
|
49
|
+
@plugin.reset_payment_methods kb_account_id, payment_methods
|
50
|
+
verify_pms kb_account_id, 4
|
51
|
+
|
52
|
+
# Add a payment method without a kb_payment_method_id
|
53
|
+
Killbill::Litle::LitlePaymentMethod.create :kb_account_id => kb_account_id,
|
54
|
+
:litle_token => 'litle-5'
|
55
|
+
@plugin.get_payment_methods(kb_account_id, false, nil).size.should == 5
|
56
|
+
|
57
|
+
# Verify we can match it
|
58
|
+
payment_methods << Killbill::Plugin::Model::PaymentMethodInfoPlugin.new(kb_account_id, 'kb-5', false, 'litle-5')
|
59
|
+
@plugin.reset_payment_methods kb_account_id, payment_methods
|
60
|
+
verify_pms kb_account_id, 5
|
61
|
+
|
62
|
+
@plugin.stop_plugin
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def verify_pms(kb_account_id, size)
|
68
|
+
pms = @plugin.get_payment_methods(kb_account_id, false, nil)
|
69
|
+
pms.size.should == size
|
70
|
+
pms.each do |pm|
|
71
|
+
pm.account_id.should == kb_account_id
|
72
|
+
pm.is_default.should == false
|
73
|
+
pm.external_payment_method_id.should == 'litle-' + pm.payment_method_id.split('-')[1]
|
74
|
+
end
|
75
|
+
end
|
29
76
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: killbill-litle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-06-
|
12
|
+
date: 2013-06-04 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: killbill
|