sage_pay 0.2.9 → 0.2.10
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +4 -0
- data/lib/sage_pay.rb +2 -1
- data/lib/sage_pay/server.rb +8 -0
- data/lib/sage_pay/server/abort.rb +2 -7
- data/lib/sage_pay/server/authorise.rb +44 -0
- data/lib/sage_pay/server/command.rb +13 -12
- data/lib/sage_pay/server/notification_response.rb +1 -10
- data/lib/sage_pay/server/refund.rb +4 -11
- data/lib/sage_pay/server/registration.rb +16 -19
- data/lib/sage_pay/server/release.rb +4 -11
- data/lib/sage_pay/server/repeat.rb +4 -12
- data/sage_pay.gemspec +2 -1
- data/spec/sage_pay_spec.rb +2 -2
- metadata +3 -2
data/CHANGELOG.md
CHANGED
data/lib/sage_pay.rb
CHANGED
@@ -7,7 +7,7 @@ require 'md5'
|
|
7
7
|
require 'uuid'
|
8
8
|
|
9
9
|
module SagePay
|
10
|
-
VERSION = '0.2.
|
10
|
+
VERSION = '0.2.10'
|
11
11
|
end
|
12
12
|
|
13
13
|
require 'validatable-ext'
|
@@ -29,4 +29,5 @@ require 'sage_pay/server/refund'
|
|
29
29
|
require 'sage_pay/server/refund_response'
|
30
30
|
require 'sage_pay/server/repeat'
|
31
31
|
require 'sage_pay/server/repeat_response'
|
32
|
+
require 'sage_pay/server/authorise'
|
32
33
|
require 'sage_pay/server'
|
data/lib/sage_pay/server.rb
CHANGED
@@ -68,6 +68,14 @@ module SagePay
|
|
68
68
|
SagePay::Server::Refund.new(defaults.merge(attributes))
|
69
69
|
end
|
70
70
|
|
71
|
+
def self.authorise(attributes = {})
|
72
|
+
defaults = {
|
73
|
+
:vendor_tx_code => TransactionCode.random,
|
74
|
+
}.merge(default_options)
|
75
|
+
|
76
|
+
SagePay::Server::Authorise.new(defaults.merge(attributes))
|
77
|
+
end
|
78
|
+
|
71
79
|
def self.repeat(attributes = {})
|
72
80
|
defaults = {
|
73
81
|
:vendor_tx_code => TransactionCode.random,
|
@@ -1,6 +1,8 @@
|
|
1
1
|
module SagePay
|
2
2
|
module Server
|
3
3
|
class Abort < Command
|
4
|
+
self.tx_type = :abort
|
5
|
+
|
4
6
|
attr_accessor :vps_tx_id, :security_key, :tx_auth_no
|
5
7
|
|
6
8
|
validates_presence_of :vps_tx_id, :security_key, :tx_auth_no
|
@@ -8,13 +10,6 @@ module SagePay
|
|
8
10
|
validates_length_of :vps_tx_id, :is => 38
|
9
11
|
validates_length_of :security_key, :is => 10
|
10
12
|
|
11
|
-
validates_inclusion_of :tx_type, :allow_blank => true, :in => [ :abort ]
|
12
|
-
|
13
|
-
def initialize(attributes = {})
|
14
|
-
@tx_type = :abort
|
15
|
-
super
|
16
|
-
end
|
17
|
-
|
18
13
|
def post_params
|
19
14
|
super.merge({
|
20
15
|
"VPSTxId" => vps_tx_id,
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module SagePay
|
2
|
+
module Server
|
3
|
+
class Authorise < Command
|
4
|
+
self.tx_type = :authorise
|
5
|
+
|
6
|
+
attr_accessor :description, :related_transaction, :apply_avs_cv2
|
7
|
+
decimal_accessor :amount
|
8
|
+
|
9
|
+
validates_presence_of :amount, :description, :related_transaction
|
10
|
+
|
11
|
+
validates_length_of :description, :maximum => 100
|
12
|
+
|
13
|
+
validates_inclusion_of :apply_avs_cv2, :allow_blank => true, :in => (0..3).to_a
|
14
|
+
|
15
|
+
validates_true_for :amount, :key => :amount_minimum_value, :logic => lambda { amount.nil? || amount >= BigDecimal.new("0.01") }, :message => "is less than the minimum value (0.01)"
|
16
|
+
validates_true_for :amount, :key => :amount_maximum_value, :logic => lambda { amount.nil? || amount <= BigDecimal.new("100000") }, :message => "is greater than the maximum value (100,000.00)"
|
17
|
+
|
18
|
+
def post_params
|
19
|
+
params = super.merge({
|
20
|
+
"Amount" => ("%.2f" % amount),
|
21
|
+
"Description" => description
|
22
|
+
}).merge(related_transaction.post_params)
|
23
|
+
|
24
|
+
params['ApplyAVSCV2'] = apply_avs_cv2.to_s if apply_avs_cv2.present?
|
25
|
+
|
26
|
+
params
|
27
|
+
end
|
28
|
+
|
29
|
+
def response_from_response_body(response_body)
|
30
|
+
# FIXME: Since RepeatResponse is being shared for repeats and
|
31
|
+
# authorisations, it should probably be renamed.
|
32
|
+
RepeatResponse.from_response_body(response_body)
|
33
|
+
end
|
34
|
+
|
35
|
+
def live_service
|
36
|
+
"authorise"
|
37
|
+
end
|
38
|
+
|
39
|
+
def simulator_service
|
40
|
+
"VendorAuthoriseTx"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -3,8 +3,10 @@ module SagePay
|
|
3
3
|
class Command
|
4
4
|
include Validatable
|
5
5
|
|
6
|
-
|
7
|
-
|
6
|
+
class_inheritable_accessor :tx_type, :vps_protocol
|
7
|
+
self.vps_protocol = "2.23"
|
8
|
+
|
9
|
+
attr_accessor :mode, :vendor, :vendor_tx_code
|
8
10
|
|
9
11
|
validates_presence_of :vps_protocol, :mode, :tx_type, :vendor,
|
10
12
|
:vendor_tx_code
|
@@ -15,9 +17,16 @@ module SagePay
|
|
15
17
|
|
16
18
|
validates_inclusion_of :mode, :allow_blank => true, :in => [ :simulator, :test, :live ]
|
17
19
|
|
18
|
-
def
|
19
|
-
|
20
|
+
def self.decimal_accessor(*attrs)
|
21
|
+
attrs.each do |attr|
|
22
|
+
attr_reader attr
|
23
|
+
define_method("#{attr}=") do |value|
|
24
|
+
instance_variable_set("@#{attr}", value.blank? ? nil : BigDecimal.new(value.to_s))
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
20
28
|
|
29
|
+
def initialize(attributes = {})
|
21
30
|
attributes.each do |k, v|
|
22
31
|
send("#{k}=", v)
|
23
32
|
end
|
@@ -85,14 +94,6 @@ module SagePay
|
|
85
94
|
raise RuntimeError, "I guess SagePay doesn't like us today."
|
86
95
|
end
|
87
96
|
end
|
88
|
-
|
89
|
-
def present?(value)
|
90
|
-
!blank?(value)
|
91
|
-
end
|
92
|
-
|
93
|
-
def blank?(value)
|
94
|
-
value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
95
|
-
end
|
96
97
|
end
|
97
98
|
end
|
98
99
|
end
|
@@ -43,20 +43,11 @@ module SagePay
|
|
43
43
|
]
|
44
44
|
|
45
45
|
# Optional parameters that are only inserted if they are present
|
46
|
-
params << ['StatusDetail', status_detail] if present?
|
46
|
+
params << ['StatusDetail', status_detail] if status_detail.present?
|
47
47
|
|
48
48
|
# And return the completed hash
|
49
49
|
params
|
50
50
|
end
|
51
|
-
|
52
|
-
private
|
53
|
-
def present?(value)
|
54
|
-
!blank?(value)
|
55
|
-
end
|
56
|
-
|
57
|
-
def blank?(value)
|
58
|
-
value.nil? || (value.respond_to?(:empty?) && value.empty?)
|
59
|
-
end
|
60
51
|
end
|
61
52
|
end
|
62
53
|
end
|
@@ -1,23 +1,20 @@
|
|
1
1
|
module SagePay
|
2
2
|
module Server
|
3
3
|
class Refund < Command
|
4
|
-
|
4
|
+
self.tx_type = :refund
|
5
|
+
|
6
|
+
attr_accessor :currency, :description, :related_transaction
|
7
|
+
decimal_accessor :amount
|
5
8
|
|
6
9
|
validates_presence_of :amount, :currency, :description, :related_transaction
|
7
10
|
|
8
11
|
validates_length_of :currency, :is => 3
|
9
12
|
validates_length_of :description, :maximum => 100
|
10
13
|
|
11
|
-
validates_inclusion_of :tx_type, :allow_blank => true, :in => [ :refund ]
|
12
14
|
|
13
15
|
validates_true_for :amount, :key => :amount_minimum_value, :logic => lambda { amount.nil? || amount >= BigDecimal.new("0.01") }, :message => "is less than the minimum value (0.01)"
|
14
16
|
validates_true_for :amount, :key => :amount_maximum_value, :logic => lambda { amount.nil? || amount <= BigDecimal.new("100000") }, :message => "is greater than the maximum value (100,000.00)"
|
15
17
|
|
16
|
-
def initialize(attributes = {})
|
17
|
-
@tx_type = :refund
|
18
|
-
super
|
19
|
-
end
|
20
|
-
|
21
18
|
def post_params
|
22
19
|
super.merge({
|
23
20
|
"Amount" => ("%.2f" % amount),
|
@@ -26,10 +23,6 @@ module SagePay
|
|
26
23
|
}).merge(related_transaction.post_params)
|
27
24
|
end
|
28
25
|
|
29
|
-
def amount=(value)
|
30
|
-
@amount = blank?(value) ? nil : BigDecimal.new(value.to_s)
|
31
|
-
end
|
32
|
-
|
33
26
|
def response_from_response_body(response_body)
|
34
27
|
RefundResponse.from_response_body(response_body)
|
35
28
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
module SagePay
|
2
2
|
module Server
|
3
3
|
class Registration < Command
|
4
|
-
attr_accessor :
|
4
|
+
attr_accessor :currency, :description, :notification_url,
|
5
5
|
:billing_address, :delivery_address, :customer_email, :basket,
|
6
6
|
:allow_gift_aid, :apply_avs_cv2, :apply_3d_secure, :profile,
|
7
7
|
:billing_agreement, :account_type
|
8
|
+
decimal_accessor :amount
|
8
9
|
|
9
10
|
validates_presence_of :amount, :currency, :description,
|
10
11
|
:notification_url, :billing_address, :delivery_address
|
@@ -74,20 +75,20 @@ module SagePay
|
|
74
75
|
})
|
75
76
|
|
76
77
|
# Optional parameters that are only inserted if they are present
|
77
|
-
params['BillingAddress2'] = billing_address.address_2 if
|
78
|
-
params['BillingState'] = billing_address.state if
|
79
|
-
params['BillingPhone'] = billing_address.phone if
|
80
|
-
params['DeliveryAddress2'] = delivery_address.address_2 if
|
81
|
-
params['DeliveryState'] = delivery_address.state if
|
82
|
-
params['DeliveryPhone'] = delivery_address.phone if
|
83
|
-
params['CustomerEmail'] = customer_email if present?
|
84
|
-
params['Basket'] = basket if present?
|
85
|
-
params['AllowGiftAid'] = allow_gift_aid ? "1" : "0" if present?
|
86
|
-
params['ApplyAVSCV2'] = apply_avs_cv2.to_s if present?
|
87
|
-
params['Apply3DSecure'] = apply_3d_secure.to_s if present?
|
88
|
-
params['Profile'] = profile.to_s.upcase if present?
|
89
|
-
params['BillingAgreement'] = billing_agreement ? "1" : "0" if present?
|
90
|
-
params['AccountType'] = account_type_param if present?
|
78
|
+
params['BillingAddress2'] = billing_address.address_2 if billing_address.address_2.present?
|
79
|
+
params['BillingState'] = billing_address.state if billing_address.state.present?
|
80
|
+
params['BillingPhone'] = billing_address.phone if billing_address.phone.present?
|
81
|
+
params['DeliveryAddress2'] = delivery_address.address_2 if delivery_address.address_2.present?
|
82
|
+
params['DeliveryState'] = delivery_address.state if delivery_address.state.present?
|
83
|
+
params['DeliveryPhone'] = delivery_address.phone if delivery_address.phone.present?
|
84
|
+
params['CustomerEmail'] = customer_email if customer_email.present?
|
85
|
+
params['Basket'] = basket if basket.present?
|
86
|
+
params['AllowGiftAid'] = allow_gift_aid ? "1" : "0" if allow_gift_aid.present? || allow_gift_aid == false
|
87
|
+
params['ApplyAVSCV2'] = apply_avs_cv2.to_s if apply_avs_cv2.present?
|
88
|
+
params['Apply3DSecure'] = apply_3d_secure.to_s if apply_3d_secure.present?
|
89
|
+
params['Profile'] = profile.to_s.upcase if profile.present?
|
90
|
+
params['BillingAgreement'] = billing_agreement ? "1" : "0" if billing_agreement.present? || billing_agreement == false
|
91
|
+
params['AccountType'] = account_type_param if account_type.present?
|
91
92
|
|
92
93
|
# And return the completed hash
|
93
94
|
params
|
@@ -97,10 +98,6 @@ module SagePay
|
|
97
98
|
RegistrationResponse.from_response_body(response_body)
|
98
99
|
end
|
99
100
|
|
100
|
-
def amount=(value)
|
101
|
-
@amount = blank?(value) ? nil : BigDecimal.new(value.to_s)
|
102
|
-
end
|
103
|
-
|
104
101
|
private
|
105
102
|
def account_type_param
|
106
103
|
case account_type
|
@@ -1,7 +1,10 @@
|
|
1
1
|
module SagePay
|
2
2
|
module Server
|
3
3
|
class Release < Command
|
4
|
-
|
4
|
+
self.tx_type = :release
|
5
|
+
|
6
|
+
attr_accessor :vps_tx_id, :security_key, :tx_auth_no
|
7
|
+
decimal_accessor :release_amount
|
5
8
|
|
6
9
|
validates_presence_of :vps_tx_id, :security_key, :tx_auth_no,
|
7
10
|
:release_amount
|
@@ -9,16 +12,10 @@ module SagePay
|
|
9
12
|
validates_length_of :vps_tx_id, :is => 38
|
10
13
|
validates_length_of :security_key, :is => 10
|
11
14
|
|
12
|
-
validates_inclusion_of :tx_type, :allow_blank => true, :in => [ :release ]
|
13
15
|
|
14
16
|
validates_true_for :release_amount, :key => :release_amount_minimum_value, :logic => lambda { release_amount.nil? || release_amount >= BigDecimal.new("0.01") }, :message => "is less than the minimum value (0.01)"
|
15
17
|
validates_true_for :release_amount, :key => :release_amount_maximum_value, :logic => lambda { release_amount.nil? || release_amount <= BigDecimal.new("100000") }, :message => "is greater than the maximum value (100,000.00)"
|
16
18
|
|
17
|
-
def initialize(attributes = {})
|
18
|
-
@tx_type = :release
|
19
|
-
super
|
20
|
-
end
|
21
|
-
|
22
19
|
def post_params
|
23
20
|
super.merge({
|
24
21
|
"VPSTxId" => vps_tx_id,
|
@@ -28,10 +25,6 @@ module SagePay
|
|
28
25
|
})
|
29
26
|
end
|
30
27
|
|
31
|
-
def release_amount=(value)
|
32
|
-
@release_amount = blank?(value) ? nil : BigDecimal.new(value.to_s)
|
33
|
-
end
|
34
|
-
|
35
28
|
def live_service
|
36
29
|
"release"
|
37
30
|
end
|
@@ -1,23 +1,19 @@
|
|
1
1
|
module SagePay
|
2
2
|
module Server
|
3
3
|
class Repeat < Command
|
4
|
-
|
4
|
+
self.tx_type = :repeat
|
5
|
+
|
6
|
+
attr_accessor :currency, :description, :related_transaction, :cv2
|
7
|
+
decimal_accessor :amount
|
5
8
|
|
6
9
|
validates_presence_of :amount, :currency, :description, :related_transaction
|
7
10
|
|
8
11
|
validates_length_of :currency, :is => 3
|
9
12
|
validates_length_of :description, :maximum => 100
|
10
13
|
|
11
|
-
validates_inclusion_of :tx_type, :allow_blank => true, :in => [ :repeat ]
|
12
|
-
|
13
14
|
validates_true_for :amount, :key => :amount_minimum_value, :logic => lambda { amount.nil? || amount >= BigDecimal.new("0.01") }, :message => "is less than the minimum value (0.01)"
|
14
15
|
validates_true_for :amount, :key => :amount_maximum_value, :logic => lambda { amount.nil? || amount <= BigDecimal.new("100000") }, :message => "is greater than the maximum value (100,000.00)"
|
15
16
|
|
16
|
-
def initialize(attributes = {})
|
17
|
-
@tx_type = :repeat
|
18
|
-
super
|
19
|
-
end
|
20
|
-
|
21
17
|
def post_params
|
22
18
|
params = super.merge({
|
23
19
|
"Amount" => ("%.2f" % amount),
|
@@ -30,10 +26,6 @@ module SagePay
|
|
30
26
|
params
|
31
27
|
end
|
32
28
|
|
33
|
-
def amount=(value)
|
34
|
-
@amount = blank?(value) ? nil : BigDecimal.new(value.to_s)
|
35
|
-
end
|
36
|
-
|
37
29
|
def response_from_response_body(response_body)
|
38
30
|
RepeatResponse.from_response_body(response_body)
|
39
31
|
end
|
data/sage_pay.gemspec
CHANGED
@@ -7,7 +7,7 @@ Gem::Specification.new do |s|
|
|
7
7
|
## If your rubyforge_project name is different, then edit it and comment out
|
8
8
|
## the sub! line in the Rakefile
|
9
9
|
s.name = 'sage_pay'
|
10
|
-
s.version = '0.2.
|
10
|
+
s.version = '0.2.10'
|
11
11
|
s.date = '2010-04-25'
|
12
12
|
s.rubyforge_project = 'sage_pay'
|
13
13
|
|
@@ -58,6 +58,7 @@ gateway for accepting credit card payments through your web app.
|
|
58
58
|
lib/sage_pay/server.rb
|
59
59
|
lib/sage_pay/server/abort.rb
|
60
60
|
lib/sage_pay/server/address.rb
|
61
|
+
lib/sage_pay/server/authorise.rb
|
61
62
|
lib/sage_pay/server/command.rb
|
62
63
|
lib/sage_pay/server/notification.rb
|
63
64
|
lib/sage_pay/server/notification_response.rb
|
data/spec/sage_pay_spec.rb
CHANGED
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 2
|
8
|
-
-
|
9
|
-
version: 0.2.
|
8
|
+
- 10
|
9
|
+
version: 0.2.10
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Graeme Mathieson
|
@@ -79,6 +79,7 @@ files:
|
|
79
79
|
- lib/sage_pay/server.rb
|
80
80
|
- lib/sage_pay/server/abort.rb
|
81
81
|
- lib/sage_pay/server/address.rb
|
82
|
+
- lib/sage_pay/server/authorise.rb
|
82
83
|
- lib/sage_pay/server/command.rb
|
83
84
|
- lib/sage_pay/server/notification.rb
|
84
85
|
- lib/sage_pay/server/notification_response.rb
|