Module: Adyen::Form
- Extended by:
- ActionView::Helpers::TagHelper
- Defined in:
- lib/adyen/form.rb
Constant Summary collapse
- ACTION_URL =
"https://%s.adyen.com/hpp/select.shtml"
Class Method Summary collapse
- .calculate_signature(attributes) ⇒ Object
- .calculate_signature_string(attributes) ⇒ Object
- .do_attribute_transformations!(attributes = {}) ⇒ Object
- .hidden_fields(attributes = {}) ⇒ Object
- .redirect_signature(params, shared_secret) ⇒ Object
- .redirect_signature_check(params, shared_secret) ⇒ Object
- .redirect_signature_string(params) ⇒ Object
- .url(environment = nil) ⇒ Object
Class Method Details
.calculate_signature(attributes) ⇒ Object
26 27 28 |
# File 'lib/adyen/form.rb', line 26 def self.calculate_signature(attributes) Adyen::Encoding.hmac_base64(attributes.delete(:shared_secret), calculate_signature_string(attributes)) end |
.calculate_signature_string(attributes) ⇒ Object
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/adyen/form.rb', line 15 def self.calculate_signature_string(attributes) merchant_sig_string = "" merchant_sig_string << attributes[:payment_amount].to_s << attributes[:currency_code].to_s << attributes[:ship_before_date].to_s << attributes[:merchant_reference].to_s << attributes[:skin_code].to_s << attributes[:merchant_account].to_s << attributes[:session_validity].to_s << attributes[:shopper_email].to_s << attributes[:shopper_reference].to_s << attributes[:recurring_contract].to_s << attributes[:allowed_methods].to_s << attributes[:blocked_methods].to_s << attributes[:shopper_statement].to_s << attributes[:billing_address_type].to_s end |
.do_attribute_transformations!(attributes = {}) ⇒ Object
30 31 32 33 34 35 36 37 |
# File 'lib/adyen/form.rb', line 30 def self.do_attribute_transformations!(attributes = {}) raise "YENs are not yet supported!" if attributes[:currency_code] == 'JPY' # TODO: fixme attributes[:recurring_contract] = 'DEFAULT' if attributes.delete(:recurring) == true attributes[:order_data] = Adyen::Encoding.gzip_base64(attributes.delete(:order_data_raw)) if attributes[:order_data_raw] attributes[:ship_before_date] = Adyen::Formatter::DateTime.fmt_date(attributes[:ship_before_date]) attributes[:session_validity] = Adyen::Formatter::DateTime.fmt_time(attributes[:session_validity]) end |
.hidden_fields(attributes = {}) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/adyen/form.rb', line 40 def self.hidden_fields(attributes = {}) do_attribute_transformations!(attributes) raise "Cannot generate form: :currency code attribute not found!" unless attributes[:currency_code] raise "Cannot generate form: :payment_amount code attribute not found!" unless attributes[:payment_amount] raise "Cannot generate form: :merchant_account attribute not found!" unless attributes[:merchant_account] raise "Cannot generate form: :skin_code attribute not found!" unless attributes[:skin_code] raise "Cannot generate form: :shared_secret signing secret not provided!" unless attributes[:shared_secret] # Merchant signature attributes[:merchant_sig] = calculate_signature(attributes) # Generate hidden input tags attributes.map { |key, value| self.tag(:input, :type => 'hidden', :name => key.to_s.camelize(:lower), :value => value) }.join("\n") end |
.redirect_signature(params, shared_secret) ⇒ Object
62 63 64 |
# File 'lib/adyen/form.rb', line 62 def self.redirect_signature(params, shared_secret) Adyen::Encoding.hmac_base64(shared_secret, redirect_signature_string(params)) end |
.redirect_signature_check(params, shared_secret) ⇒ Object
66 67 68 |
# File 'lib/adyen/form.rb', line 66 def self.redirect_signature_check(params, shared_secret) params[:merchantSig] == redirect_signature(params, shared_secret) end |
.redirect_signature_string(params) ⇒ Object
58 59 60 |
# File 'lib/adyen/form.rb', line 58 def self.redirect_signature_string(params) params[:authResult].to_s + params[:pspReference].to_s + params[:merchantReference].to_s + params[:skinCode].to_s end |
.url(environment = nil) ⇒ Object
10 11 12 13 |
# File 'lib/adyen/form.rb', line 10 def self.url(environment = nil) environment ||= Adyen.environment(environment) Adyen::Form::ACTION_URL % environment.to_s end |