lib/adyen/form.rb in adyen-1.4.1 vs lib/adyen/form.rb in adyen-1.5.0
- old
+ new
@@ -117,10 +117,14 @@
if parameters[:billing_address]
parameters[:billing_address_sig] = calculate_billing_address_signature(parameters, shared_secret)
end
+ if parameters[:shopper]
+ parameters[:shopper_sig] = calculate_shopper_signature(parameters, shared_secret)
+ end
+
return parameters
end
# Transforms and flattens payment parameters to be in the correct format which is understood and accepted by adyen
#
@@ -163,10 +167,24 @@
url + '?' + flat_payment_parameters(parameters).map { |(k, v)|
"#{k}=#{CGI.escape(v)}"
}.join('&')
end
+ # @see Adyen::Form.redirect_url
+ #
+ # Returns an absolute URL very similar to the one returned by Adyen::Form.redirect_url
+ # except that it uses the directory.shtml call which returns a list of all available
+ # payment methods
+ #
+ # @param [Hash] parameters The payment parameters to include in the payment request.
+ # @return [String] An absolute URL to redirect to the Adyen payment system.
+ def payment_methods_url(parameters = {})
+ url(nil, :directory) + '?' + flat_payment_parameters(parameters).map { |(k, v)|
+ "#{k}=#{CGI.escape(v)}"
+ }.join('&')
+ end
+
# Returns a HTML snippet of hidden INPUT tags with the provided payment parameters.
# The snippet can be included in a payment form that POSTs to the Adyen payment system.
#
# The payment parameters that are provided to this method will be merged with the
# {Adyen::Configuration#default_form_params} hash. The default parameter values will be
@@ -262,9 +280,23 @@
# @raise [ArgumentError] Thrown if shared_secret is empty
def calculate_billing_address_signature(parameters, shared_secret = nil)
shared_secret ||= parameters.delete(:shared_secret)
raise ArgumentError, "Cannot calculate billing address request signature with empty shared_secret" if shared_secret.to_s.empty?
Adyen::Encoding.hmac_base64(shared_secret, calculate_billing_address_signature_string(parameters[:billing_address]))
+ end
+
+ # shopperSig: shopper.firstName + shopper.infix + shopper.lastName + shopper.gender + shopper.dateOfBirthDayOfMonth + shopper.dateOfBirthMonth + shopper.dateOfBirthYear + shopper.telephoneNumber
+ # (Note that you can send only shopper.firstName and shopper.lastName if you like. Do NOT include shopperSocialSecurityNumber in the shopperSig!)
+ def calculate_shopper_signature_string(parameters)
+ %w(first_name infix last_name gender date_of_birth_day_of_month date_of_birth_month date_of_birth_year telephone_number).map do |key|
+ parameters[key.to_sym]
+ end.join
+ end
+
+ def calculate_shopper_signature(parameters, shared_secret = nil)
+ shared_secret ||= parameters.delete(:shared_secret)
+ raise ArgumentError, "Cannot calculate shopper request signature with empty shared_secret" if shared_secret.to_s.empty?
+ Adyen::Encoding.hmac_base64(shared_secret, calculate_shopper_signature_string(parameters[:shopper]))
end
######################################################
# REDIRECT SIGNATURE CHECKING
######################################################