sage_pay 0.2.9 → 0.2.10
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/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
|