sage_pay 0.2.1 → 0.2.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.
@@ -1,12 +1,17 @@
1
1
  # Changelog
2
2
 
3
- # 0.2.1
3
+ ## 0.2.2
4
+
5
+ * Incorporate additional fields I'd missed from the notification. That'll make
6
+ it easier to find payments from the notification.
7
+
8
+ ## 0.2.1
4
9
 
5
10
  * [FIX] SagePay think it's OK to have curly braces in a URL query string.
6
11
  Ruby's URI library thinks otherwise. No matter who's right, one of these is
7
12
  easier to change than the other.
8
13
 
9
- # 0.2.0
14
+ ## 0.2.0
10
15
 
11
16
  * Initial release. This should support the full workflow for making payments,
12
17
  but the notification side hasn't been tested again SagePay in the wild so
@@ -6,7 +6,7 @@ require 'md5'
6
6
  require 'uuid'
7
7
 
8
8
  module SagePay
9
- VERSION = '0.2.1'
9
+ VERSION = '0.2.2'
10
10
  end
11
11
 
12
12
  require 'validatable-ext'
@@ -1,13 +1,11 @@
1
1
  module SagePay
2
2
  module Server
3
3
  class SignatureVerificationDetails
4
- attr_reader :vps_tx_id, :vendor_tx_code, :vendor, :security_key
4
+ attr_reader :vendor, :security_key
5
5
 
6
- def initialize(transaction_registration, transaction_registration_response)
7
- @vendor_tx_code = transaction_registration.vendor_tx_code
8
- @vendor = transaction_registration.vendor
9
- @vps_tx_id = transaction_registration_response.vps_tx_id
10
- @security_key = transaction_registration_response.security_key
6
+ def initialize(vendor, security_key)
7
+ @vendor = vendor
8
+ @security_key = security_key
11
9
  end
12
10
  end
13
11
  end
@@ -1,14 +1,18 @@
1
1
  module SagePay
2
2
  module Server
3
3
  class TransactionNotification
4
- attr_reader :vps_protocol, :status, :status_detail, :tx_auth_no,
5
- :avs_cv2, :address_result, :post_code_result, :cv2_result, :gift_aid,
6
- :threed_secure_status, :cavv, :address_status, :payer_status,
7
- :card_type, :last_4_digits, :vps_signature
4
+ attr_reader :vps_protocol, :tx_type, :vendor_tx_code, :vps_tx_id,
5
+ :status, :status_detail, :tx_auth_no, :avs_cv2, :address_result,
6
+ :post_code_result, :cv2_result, :gift_aid, :threed_secure_status,
7
+ :cavv, :address_status, :payer_status,:card_type, :last_4_digits,
8
+ :vps_signature
8
9
 
9
10
  def self.from_params(params, signature_verification_details = nil)
10
11
  key_converter = {
11
12
  "VPSProtocol" => :vps_protocol,
13
+ "TxType" => :tx_type,
14
+ "VendorTxCode" => :vendor_tx_code,
15
+ "VPSTxId" => :vps_tx_id,
12
16
  "Status" => :status,
13
17
  "StatusDetail" => :status_detail,
14
18
  "TxAuthNo" => :tx_auth_no,
@@ -39,6 +43,11 @@ module SagePay
39
43
  }
40
44
 
41
45
  value_converter = {
46
+ :tx_type => {
47
+ "PAYMENT" => :payment,
48
+ "DEFERRED" => :deferred,
49
+ "AUTHENTICATE" => :authenticate
50
+ },
42
51
  :status => {
43
52
  "OK" => :ok,
44
53
  "NOTAUTHED" => :not_authed,
@@ -105,8 +114,8 @@ module SagePay
105
114
  # We need to calculate the VPS signature from the values passed in as
106
115
  # additional params from the original registration and notification.
107
116
  fields_used_in_signature = [
108
- signature_verification_details.vps_tx_id,
109
- signature_verification_details.vendor_tx_code,
117
+ params["VPSTxId"],
118
+ params["VendorTxCode"],
110
119
  params["Status"],
111
120
  params["TxAuthNo"],
112
121
  signature_verification_details.vendor,
@@ -59,7 +59,7 @@ module SagePay
59
59
  elsif @response.failed?
60
60
  raise RuntimeError, "Transaction registration failed"
61
61
  else
62
- SignatureVerificationDetails.new(self, @response)
62
+ @signature_verification_details ||= SignatureVerificationDetails.new(vendor, @response.security_key)
63
63
  end
64
64
  end
65
65
 
@@ -7,8 +7,8 @@ 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.1'
11
- s.date = '2010-04-14'
10
+ s.version = '0.2.2'
11
+ s.date = '2010-04-25'
12
12
  s.rubyforge_project = 'sage_pay'
13
13
 
14
14
  ## Make sure your summary is short. The description may be as long
@@ -37,9 +37,14 @@ if run_integration_specs?
37
37
  end
38
38
 
39
39
  it "should allow us to follow the next URL and the response should be successful" do
40
- pending "URI#parse claims that the URL SagePay hands us isn't a valid URI."
41
40
  registration = @payment.register!
42
41
  uri = URI.parse(registration.next_url)
42
+ request = Net::HTTP::Get.new(uri.request_uri)
43
+ http = Net::HTTP.new(uri.host, uri.port)
44
+ http.use_ssl = true if uri.scheme == "https"
45
+ http.start { |http|
46
+ http.request(request)
47
+ }
43
48
  end
44
49
 
45
50
  it "should allow us to retrieve signature verification details" do
@@ -47,10 +52,8 @@ if run_integration_specs?
47
52
  sig_details = @payment.signature_verification_details
48
53
 
49
54
  sig_details.should_not be_nil
50
- sig_details.vps_tx_id.should_not be_nil
51
55
  sig_details.security_key.should_not be_nil
52
56
  sig_details.vendor.should_not be_nil
53
- sig_details.vendor_tx_code.should_not be_nil
54
57
  end
55
58
  end
56
59
  end
@@ -3,23 +3,13 @@ require 'spec_helper'
3
3
  include SagePay::Server
4
4
  describe SignatureVerificationDetails do
5
5
  before(:each) do
6
- transaction_registration = mock("Transaction registration", :vendor_tx_code => "vendor transaction id", :vendor => "vendor")
7
- transaction_registration_response = mock("Transaction registration response", :vps_tx_id => "sage pay transaction id", :security_key => "security key")
8
- @sig_details = SignatureVerificationDetails.new(transaction_registration, transaction_registration_response)
9
- end
10
-
11
- it "should take the vendor_tx_code from the transaction registration" do
12
- @sig_details.vendor_tx_code.should == "vendor transaction id"
6
+ @sig_details = SignatureVerificationDetails.new("vendor", "security key")
13
7
  end
14
8
 
15
9
  it "should take the vendor from the transaction registration" do
16
10
  @sig_details.vendor.should == "vendor"
17
11
  end
18
12
 
19
- it "should take the vps_tx_id from the transaction registration response" do
20
- @sig_details.vps_tx_id.should == "sage pay transaction id"
21
- end
22
-
23
13
  it "should take the security_key from the transaction registration response" do
24
14
  @sig_details.security_key.should == "security key"
25
15
  end
@@ -13,8 +13,6 @@ describe TransactionNotification do
13
13
  context "with an OK status" do
14
14
  before(:each) do
15
15
  signature_verification_details = mock("Signature verification details",
16
- :vps_tx_id => "{728A5721-B45F-4570-937E-90A16B0A5000}",
17
- :vendor_tx_code => "unique-tx-code",
18
16
  :vendor => "rubaidh",
19
17
  :security_key => "17F13DCBD8"
20
18
  )
@@ -22,6 +20,8 @@ describe TransactionNotification do
22
20
  @params = {
23
21
  "VPSProtocol" => "2.23",
24
22
  "TxType" => "PAYMENT",
23
+ "VendorTxCode" => "unique-tx-code",
24
+ "VPSTxId" => "{728A5721-B45F-4570-937E-90A16B0A5000}",
25
25
  "Status" => "OK",
26
26
  "StatusDetail" => "2000 : Card processed successfully.", # FIXME: Make this match reality
27
27
  "TxAuthNo" => "1234567890",
@@ -54,6 +54,18 @@ describe TransactionNotification do
54
54
  @notification.vps_protocol.should == "2.23"
55
55
  end
56
56
 
57
+ it "should report the tx_type as :payment" do
58
+ @notification.tx_type.should == :payment
59
+ end
60
+
61
+ it "should report the vendor_tx_code as the vendor tx code supplied" do
62
+ @notification.vendor_tx_code.should == 'unique-tx-code'
63
+ end
64
+
65
+ it "should report the vps_tx_id as the vps_tx_id supplied" do
66
+ @notification.vps_tx_id.should == "{728A5721-B45F-4570-937E-90A16B0A5000}"
67
+ end
68
+
57
69
  it "should report the status as :ok" do
58
70
  @notification.status.should == :ok
59
71
  end
@@ -595,16 +595,6 @@ describe TransactionRegistration do
595
595
  @transaction_registration.register!
596
596
  end
597
597
 
598
- it "should know the SagePay transaction id" do
599
- sig_details = @transaction_registration.signature_verification_details
600
- sig_details.vps_tx_id.should == "sage pay transaction id"
601
- end
602
-
603
- it "should know the vendor transaction id" do
604
- sig_details = @transaction_registration.signature_verification_details
605
- sig_details.vendor_tx_code.should == "vendor transaction id"
606
- end
607
-
608
598
  it "should know the vendor" do
609
599
  sig_details = @transaction_registration.signature_verification_details
610
600
  sig_details.vendor.should == "vendor"
@@ -1,7 +1,7 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SagePay do
4
- it "should be version 0.2.0" do
5
- SagePay::VERSION.should == '0.2.0'
4
+ it "should be version 0.2.2" do
5
+ SagePay::VERSION.should == '0.2.2'
6
6
  end
7
7
  end
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 2
8
- - 1
9
- version: 0.2.1
8
+ - 2
9
+ version: 0.2.2
10
10
  platform: ruby
11
11
  authors:
12
12
  - Graeme Mathieson
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2010-04-14 00:00:00 +01:00
17
+ date: 2010-04-25 00:00:00 +01:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency