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 ######################################################