lib/api/checkout_methods.rb in wepay-rails-2.1.0 vs lib/api/checkout_methods.rb in wepay-rails-2.2.0

- old
+ new

@@ -1,5 +1,6 @@ +require 'digest/sha2' module WepayRails module Api module CheckoutMethods # Many of the settings you pass in here are already factored in from # the wepay.yml file and only need to be overridden if you insist on doing @@ -35,37 +36,51 @@ # :auto_capture No A boolean value (0 or 1). Default is 1. If set to 0 then the payment will not automatically be released to the account and will be held by WePay in payment state 'reserved'. To release funds to the account you must call /checkout/capture # :require_shipping No A boolean value (0 or 1). If set to 1 then the payer will be asked to enter a shipping address when they pay. After payment you can retrieve this shipping address by calling /checkout # :shipping_fee No The amount that you want to charge for shipping. # :charge_tax No A boolean value (0 or 1). If set to 1 and the account has a relevant tax entry (see /account/set_tax), then tax will be charged. def perform_checkout(parms) + security_token = Digest::SHA2.hexdigest("#{rand(4)}#{Time.now.to_i}") defaults = { - :callback_uri => ipn_callback_uri, - :redirect_uri => checkout_redirect_uri, + :callback_uri => ipn_callback_uri(security_token), + :redirect_uri => checkout_redirect_uri(security_token), :fee_payer => @wepay_config[:fee_payer], :type => @wepay_config[:checkout_type], :charge_tax => @wepay_config[:charge_tax] ? 1 : 0, :app_fee => @wepay_config[:app_fee], :auto_capture => @wepay_config[:auto_capture] ? 1 : 0, :require_shipping => @wepay_config[:require_shipping] ? 1 : 0, :shipping_fee => @wepay_config[:shipping_fee], :account_id => @wepay_config[:account_id] }.merge(parms) - self.call_api("/checkout/create", defaults) + resp = self.call_api("/checkout/create", defaults).symbolize_keys! + resp.merge({:security_token => security_token}) end def lookup_checkout(checkout_id) self.call_api("/checkout", {:checkout_id => checkout_id}) end - def ipn_callback_uri - return @wepay_config[:ipn_callback_uri] if @wepay_config[:ipn_callback_uri].present? - "#{@wepay_config[:root_callback_uri]}/wepay/ipn" + def ipn_callback_uri(security_token) + uri = if @wepay_config[:ipn_callback_uri].present? + @wepay_config[:ipn_callback_uri] + else + "#{@wepay_config[:root_callback_uri]}/wepay/ipn" + end + apply_security_token(uri, security_token) end - def checkout_redirect_uri - return @wepay_config[:checkout_redirect_uri] if @wepay_config[:checkout_redirect_uri].present? - "#{@wepay_config[:root_callback_uri]}/wepay/checkout" + def checkout_redirect_uri(security_token) + uri = if @wepay_config[:ipn_callback_uri].present? + @wepay_config[:checkout_redirect_uri] + else + "#{@wepay_config[:root_callback_uri]}/wepay/checkout" + end + apply_security_token(uri, security_token) + end + + def apply_security_token(uri, security_token) + uri += (uri =~ /\?/ ? '&' : '?') + "security_token=#{security_token}" end end end end \ No newline at end of file