From 6b99ef9f035f5d6921476c76e1a075e1f600e2fa Mon Sep 17 00:00:00 2001 From: Michael Witrant Date: Wed, 3 Oct 2012 16:16:54 +0200 Subject: [PATCH 1/8] check trans_id (between 000000 and 899999) --- lib/system_pay.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/system_pay.rb b/lib/system_pay.rb index d982f23..af6b2c6 100644 --- a/lib/system_pay.rb +++ b/lib/system_pay.rb @@ -67,6 +67,8 @@ def initialize args=nil @vads_trans_date ||= Time.now.utc.strftime("%Y%m%d%H%M%S") @vads_trans_id = @vads_trans_id.to_s.rjust(6, '0') + raise ArgumentError.new("Invalid trans_id: #{@vads_trans_id.inspect}") unless @vads_trans_id =~ /\A[0-8][0-9]{5}\Z/ + end # Public: Perform the signature of the request based on the parameters From 54889496a8cea7ade1b3b6aeb8339d832a183af5 Mon Sep 17 00:00:00 2001 From: Michael Witrant Date: Wed, 3 Oct 2012 16:36:00 +0200 Subject: [PATCH 2/8] renamed certificat to certificate --- Readme.markdown | 8 ++++---- lib/system_pay.rb | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/Readme.markdown b/Readme.markdown index 992c6cd..6e4f5f8 100644 --- a/Readme.markdown +++ b/Readme.markdown @@ -22,13 +22,13 @@ or, in your Gemfile ### in development.rb : - # Your test certificat - SystemPay.certificat = '9123456299120752' + # Your test certificate + SystemPay.certificate = '9123456299120752' ### in production.rb : - # Your production certificat - SystemPay.certificat = '7193156219823756' + # Your production certificate + SystemPay.certificate = '7193156219823756' # Set the production mode SystemPay.vads_ctx_mode = 'PRODUCTION' diff --git a/lib/system_pay.rb b/lib/system_pay.rb index af6b2c6..0f203a9 100644 --- a/lib/system_pay.rb +++ b/lib/system_pay.rb @@ -32,8 +32,8 @@ class SystemPay @@vads_version = 'V2' cattr_accessor :vads_version - @@certificat = '1122334455667788' - cattr_accessor :certificat + @@certificate = '1122334455667788' + cattr_accessor :certificate attr_accessor :vads_amount, :vads_available_languages, :vads_capture_delay, :vads_contracts, :vads_currency, :vads_cust_address, :vads_cust_cell_phone, :vads_cust_email, :vads_cust_id, :vads_cust_name, :vads_redirect_error_message, :vads_redirect_success_message, :vads_trans_date, :vads_trans_id, :vads_url_cancel, :vads_url_error, @@ -92,7 +92,7 @@ def self.valid_signature?(params) private def self.sign(values) - Digest::SHA1.hexdigest((values+[certificat]).join("+")) + Digest::SHA1.hexdigest((values+[certificate]).join("+")) end def instance_variables_array From 3b4c65b31ca917248c524e018db2cab836fa1bca Mon Sep 17 00:00:00 2001 From: Michael Witrant Date: Wed, 3 Oct 2012 16:36:37 +0200 Subject: [PATCH 3/8] added vads_return_mode --- lib/system_pay.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/system_pay.rb b/lib/system_pay.rb index 0f203a9..2c2f434 100644 --- a/lib/system_pay.rb +++ b/lib/system_pay.rb @@ -37,7 +37,7 @@ class SystemPay attr_accessor :vads_amount, :vads_available_languages, :vads_capture_delay, :vads_contracts, :vads_currency, :vads_cust_address, :vads_cust_cell_phone, :vads_cust_email, :vads_cust_id, :vads_cust_name, :vads_redirect_error_message, :vads_redirect_success_message, :vads_trans_date, :vads_trans_id, :vads_url_cancel, :vads_url_error, - :vads_url_referral, :vads_url_refused, :vads_url_success + :vads_url_referral, :vads_url_refused, :vads_url_success, :vads_return_mode # Public: Creation of new instance. # From 2d84a4277ef4fefc38ba3deb18045f431c644c33 Mon Sep 17 00:00:00 2001 From: Michael Witrant Date: Wed, 3 Oct 2012 16:55:22 +0200 Subject: [PATCH 4/8] correctly merge instance and class values --- lib/system_pay.rb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/system_pay.rb b/lib/system_pay.rb index 2c2f434..6841d47 100644 --- a/lib/system_pay.rb +++ b/lib/system_pay.rb @@ -104,7 +104,13 @@ def self.class_variables_array end def sorted_array - (instance_variables_array + self.class.class_variables_array).uniq.sort + class_variables_hash = Hash[*self.class.class_variables_array.flatten(1)] + instance_variables_hash = Hash[*instance_variables_array.flatten(1)] + + names = (class_variables_hash.keys + instance_variables_hash.keys).uniq.sort + names.map do |name| + [name, instance_variables_hash[name] || class_variables_hash[name]] + end end def sorted_values From f54afdbad5ec0d9e8a676e5ff5cc670b310540b5 Mon Sep 17 00:00:00 2001 From: Michael Witrant Date: Wed, 3 Oct 2012 17:00:16 +0200 Subject: [PATCH 5/8] backward compatibility for certificat --- lib/system_pay.rb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/lib/system_pay.rb b/lib/system_pay.rb index 6841d47..ca4aac1 100644 --- a/lib/system_pay.rb +++ b/lib/system_pay.rb @@ -35,6 +35,12 @@ class SystemPay @@certificate = '1122334455667788' cattr_accessor :certificate + # Backward compatibility + class << self + alias_method :certificat, :certificate + alias_method :certificat=, :certificate= + end + attr_accessor :vads_amount, :vads_available_languages, :vads_capture_delay, :vads_contracts, :vads_currency, :vads_cust_address, :vads_cust_cell_phone, :vads_cust_email, :vads_cust_id, :vads_cust_name, :vads_redirect_error_message, :vads_redirect_success_message, :vads_trans_date, :vads_trans_id, :vads_url_cancel, :vads_url_error, :vads_url_referral, :vads_url_refused, :vads_url_success, :vads_return_mode From 61d9db2e933797346a570fee60f56ddf18c769e8 Mon Sep 17 00:00:00 2001 From: Michael Witrant Date: Wed, 3 Oct 2012 18:10:40 +0200 Subject: [PATCH 6/8] updated README, valid_signature? is a class method --- Readme.markdown | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Readme.markdown b/Readme.markdown index 6e4f5f8..2ae2111 100644 --- a/Readme.markdown +++ b/Readme.markdown @@ -51,8 +51,7 @@ or, in your Gemfile protect_from_forgery :except => [:bank_callback] def bank_callback - @system_pay = SystemPay.new(params) - if @system_pay.valid_signature?(params[:signature]) + if SystemPay.valid_signature?(params) order_transaction = OrderTransaction.find_by_reference params[:reference], :last order = order_transaction.order From 1d71620ac03abe0304158b6115fef0835bc3c7d8 Mon Sep 17 00:00:00 2001 From: Michael Witrant Date: Thu, 4 Oct 2012 18:14:19 +0200 Subject: [PATCH 7/8] added language --- lib/system_pay.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/system_pay.rb b/lib/system_pay.rb index ca4aac1..76a12ba 100644 --- a/lib/system_pay.rb +++ b/lib/system_pay.rb @@ -43,7 +43,7 @@ class << self attr_accessor :vads_amount, :vads_available_languages, :vads_capture_delay, :vads_contracts, :vads_currency, :vads_cust_address, :vads_cust_cell_phone, :vads_cust_email, :vads_cust_id, :vads_cust_name, :vads_redirect_error_message, :vads_redirect_success_message, :vads_trans_date, :vads_trans_id, :vads_url_cancel, :vads_url_error, - :vads_url_referral, :vads_url_refused, :vads_url_success, :vads_return_mode + :vads_url_referral, :vads_url_refused, :vads_url_success, :vads_return_mode, :vads_language # Public: Creation of new instance. # From aff408d8f0543562ab331d03e7384760af212dbf Mon Sep 17 00:00:00 2001 From: Michael Witrant Date: Mon, 15 Oct 2012 11:36:46 +0200 Subject: [PATCH 8/8] added fields vads_order_id, vads_shop_name and vads_shop_url --- lib/system_pay.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/system_pay.rb b/lib/system_pay.rb index 76a12ba..dca5247 100644 --- a/lib/system_pay.rb +++ b/lib/system_pay.rb @@ -43,7 +43,7 @@ class << self attr_accessor :vads_amount, :vads_available_languages, :vads_capture_delay, :vads_contracts, :vads_currency, :vads_cust_address, :vads_cust_cell_phone, :vads_cust_email, :vads_cust_id, :vads_cust_name, :vads_redirect_error_message, :vads_redirect_success_message, :vads_trans_date, :vads_trans_id, :vads_url_cancel, :vads_url_error, - :vads_url_referral, :vads_url_refused, :vads_url_success, :vads_return_mode, :vads_language + :vads_url_referral, :vads_url_refused, :vads_url_success, :vads_return_mode, :vads_language, :vads_order_id, :vads_shop_name, :vads_shop_url # Public: Creation of new instance. #