Class: Solon::SagepayResponse
- Inherits:
-
Object
- Object
- Solon::SagepayResponse
show all
- Defined in:
- lib/solon/sagepay_response.rb
Instance Method Summary
collapse
Constructor Details
Returns a new instance of SagepayResponse.
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# File 'lib/solon/sagepay_response.rb', line 4
def initialize(response)
::Rails.logger.debug "Sagepay response: #{response}"
@response = response
if @response.is_a?(String)
response.split("\r\n").each do |line|
key, *value = line.split("=")
value = value.join("=")
self[key] = value
end
elsif @response.is_a?(Hash)
response.each do |key, value|
self[key] = value
end
else
raise Solon::Error, "Cannot parse response of type #{@response.class}"
end
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(id, *args) ⇒ Object
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
# File 'lib/solon/sagepay_response.rb', line 22
def method_missing(id, *args)
id = id.to_s
@values ||= {}
if RUBY_VERSION =~ /1.8/
case id[-1]
when 61 @values[id[0..-2].to_sym] = args[0]
when 63 @values.has_key?(id[0..-2].to_sym)
else @values[id.to_sym]
end
else
case id.last
when '=' @values[id[0..-2].to_sym] = args[0]
when '?' @values.has_key?(id[0..-2].to_sym)
else @values[id.to_sym]
end
end
end
|
Instance Method Details
#[](key) ⇒ Object
54
55
56
|
# File 'lib/solon/sagepay_response.rb', line 54
def [](key)
self.send("#{mapping[key] || key}")
end
|
#[]=(key, value) ⇒ Object
50
51
52
|
# File 'lib/solon/sagepay_response.rb', line 50
def []=(key, value)
self.send("#{mapping[key] || key}=", CGI.unescape(value))
end
|
#approved? ⇒ Boolean
72
73
74
|
# File 'lib/solon/sagepay_response.rb', line 72
def approved?
self.status == SolonGateway::APPROVED
end
|
#verify! ⇒ Object
TODO: Make this work, currently fails all
60
61
62
63
64
65
66
67
68
69
70
|
# File 'lib/solon/sagepay_response.rb', line 60
def verify!
return self
md5 = Digest::MD5.new
md5 << "#{self.vps_transaction_id}#{self.transaction_reference}#{self.status}#{self.transaction_authorisation_number}" +
"#{Solon::Config.vendor}#{self.avs_cv2_result}#{self.security_key}#{self.address_result}#{self.post_code_result}" +
"#{self.cv2_result}#{self.gift_aid}#{self.status_3d_secure}#{self.code_3d_secure}"
raise Solon::Error, "MD5 appears to have been tampered with! (#{md5.hexdigest} != #{self.vps_signature})" unless md5.hexdigest == self.vps_signature
self
end
|