sisow_ideal 0.0.2 → 0.0.3

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 CHANGED
@@ -35,8 +35,11 @@ response = client.setup_transaction(
35
35
  order.update_attributes(:trxid => response.trxid)
36
36
  redirect_to response.url
37
37
 
38
- # How to handle report on the report url
38
+ # How to handle report on the notifyurl
39
39
  # For safety reasons sisow calls a notify url for updating payment status before redirecting back to the application
40
+
41
+ # You have 2 options:
42
+ # 1. Do a status request
40
43
  order = Order.find_by_trxid(params[:trxid])
41
44
  response = client.status_request(
42
45
  :trxid => order.trxid,
@@ -44,6 +47,12 @@ response = client.status_request(
44
47
  )
45
48
  order.update_attributes(:status => response.status)
46
49
 
50
+ # 2. Validate the response
51
+ if client.valid_response?(params)
52
+ order = Order.find_by_trxid(params[:trxid])
53
+ order.update_attributes(:status => params[:status])
54
+ end
55
+
47
56
  # When sisow redirects the user back you can check if the payment was succesfull bij finding the order object
48
57
  @order = Order.find_by_trxid(params[:trxid])
49
58
  ```
@@ -35,7 +35,7 @@ module SisowIdeal
35
35
 
36
36
  response = Hashie::Mash.new(
37
37
  self.class.get('/TransactionRequest',
38
- :query => merge_query(options, sha1),
38
+ :query => merge_options(options, sha1),
39
39
  :format => :xml
40
40
  ).parsed_response)
41
41
 
@@ -61,7 +61,7 @@ module SisowIdeal
61
61
 
62
62
  response = Hashie::Mash.new(
63
63
  self.class.get('/StatusRequest',
64
- :query => merge_query(options, sha1),
64
+ :query => merge_options(options, sha1),
65
65
  :format => :xml
66
66
  ).parsed_response)
67
67
 
@@ -72,10 +72,22 @@ module SisowIdeal
72
72
  end
73
73
  end
74
74
 
75
+ def valid_response?(params)
76
+ sha1 = [
77
+ params.fetch(:trxid),
78
+ params.fetch(:ec),
79
+ params.fetch(:status),
80
+ @options.fetch(:merchantid),
81
+ @options.fetch(:merchantkey)
82
+ ].join
83
+
84
+ Digest::SHA1.hexdigest(sha1) == params[:sha1]
85
+ end
86
+
75
87
  private
76
88
 
77
89
  # Merge options in query
78
- def merge_query(hash, sha1)
90
+ def merge_options(hash, sha1)
79
91
  @options.merge!(hash).merge!(:sha1 => Digest::SHA1.hexdigest(sha1))
80
92
  end
81
93
 
@@ -1,3 +1,3 @@
1
1
  module SisowIdeal
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -71,5 +71,37 @@ describe SisowIdeal::Client do
71
71
 
72
72
  end
73
73
 
74
+ describe :valid_response? do
75
+
76
+ subject { @client.valid_response?(params) }
77
+
78
+ context 'invalid' do
79
+
80
+ let!(:params) { {
81
+ :trxid => '0050001157723256',
82
+ :ec => '123',
83
+ :status => 'Open',
84
+ :sha1 => 'f334d33574f5b9244f8e434a7e4bc3cee12f6284'
85
+ } }
86
+
87
+ it { subject.should be_false }
88
+
89
+ end
90
+
91
+ context 'valid' do
92
+
93
+ let!(:params) { {
94
+ :trxid => '0050001157723256',
95
+ :ec => '1',
96
+ :status => 'Open',
97
+ :sha1 => 'f334d33574f5b9244f8e434a7e4bc3cee12f6284'
98
+ } }
99
+
100
+ it { subject.should be_true }
101
+
102
+ end
103
+
104
+ end
105
+
74
106
 
75
107
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sisow_ideal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
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: 2012-12-14 00:00:00.000000000 Z
12
+ date: 2012-12-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler