lib/api/checkout_methods.rb in wepay-rails-2.2.9 vs lib/api/checkout_methods.rb in wepay-rails-2.5.0

- old
+ new

@@ -1,88 +1,98 @@ -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 - # so when this method is called. The following list of key values are pulled - # in for you from your wepay.yml file: - # - # Note: @wepay_config is your wepay.yml as a Hash - # :callback_uri => @wepay_config[:ipn_callback_uri], - # :redirect_uri => @wepay_config[:checkout_redirect_uri], - # :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], - # :charge_tax => @wepay_config[:charge_tax], - # :account_id => wepay_user['account_id'] # wepay-rails goes and gets this for you, but you can override it if you want to. - # - # - # params hash key values possibilities are: - # Parameter: Required: Description: - # :account_id Yes The unique ID of the account you want to create a checkout for. - # :short_description Yes A short description of what is being paid for. - # :long_description No A long description of what is being paid for. - # :type Yes The the checkout type (one of the following: GOODS, SERVICE, DONATION, or PERSONAL) - # :reference_id No The unique reference id of the checkout (set by the application in /checkout/create - # :amount Yes The amount that the payer will pay. - # :app_fee No The amount that the application will receive in fees. - # :fee_payer No Who will pay the fees (WePay's fees and any app fees). Set to "Payer" to charge fees to the person paying (Payer will pay amount + fees, payee will receive amount). Set to "Payee" to charge fees to the person receiving money (Payer will pay amount, Payee will receive amount - fees). Defaults to "Payer". - # :redirect_uri No The uri the payer will be redirected to after paying. - # :callback_uri No The uri that will receive any Instant Payment Notifications sent. Needs to be a full uri (ex https://www.wepay.com ) - # :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(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) - - resp = self.call_api("/checkout/create", defaults).symbolize_keys! - resp.merge({:security_token => security_token}) - end - - def lookup_checkout(checkout_id) - co = self.call_api("/checkout", {:checkout_id => checkout_id}) - co.delete("type") - co - end - - 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(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 +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 + # so when this method is called. The following list of key values are pulled + # in for you from your wepay.yml file: + # + # Note: @wepay_config is your wepay.yml as a Hash + # :callback_uri => @wepay_config[:ipn_callback_uri], + # :redirect_uri => @wepay_config[:checkout_redirect_uri], + # :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], + # :charge_tax => @wepay_config[:charge_tax], + # :account_id => wepay_user['account_id'] # wepay-rails goes and gets this for you, but you can override it if you want to. + # + # + # params hash key values possibilities are: + # Parameter: Required: Description: + # :account_id Yes The unique ID of the account you want to create a checkout for. + # :short_description Yes A short description of what is being paid for. + # :long_description No A long description of what is being paid for. + # :type Yes The the checkout type (one of the following: GOODS, SERVICE, DONATION, or PERSONAL) + # :reference_id No The unique reference id of the checkout (set by the application in /checkout/create + # :amount Yes The amount that the payer will pay. + # :app_fee No The amount that the application will receive in fees. + # :fee_payer No Who will pay the fees (WePay's fees and any app fees). Set to "Payer" to charge fees to the person paying (Payer will pay amount + fees, payee will receive amount). Set to "Payee" to charge fees to the person receiving money (Payer will pay amount, Payee will receive amount - fees). Defaults to "Payer". + # :redirect_uri No The uri the payer will be redirected to after paying. + # :callback_uri No The uri that will receive any Instant Payment Notifications sent. Needs to be a full uri (ex https://www.wepay.com ) + # :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(params) + security_token = Digest::SHA2.hexdigest("#{Rails.env.production? ? rand(4) : 1}#{Time.now.to_i}") # Make less random during tests + + # add the security token to any urls that were passed in from the app + if params[:callback_uri] + params[:callback_uri] = apply_security_token( params[:callback_uri], security_token ) + end + + if params[:redirect_uri] + params[:redirect_uri] = apply_security_token( params[:redirect_uri], security_token ) + end + + defaults = { + :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(params) + + resp = self.call_api("/checkout/create", defaults) + resp.merge({:security_token => security_token}) + end + + def lookup_checkout(checkout_id) + co = self.call_api("/checkout", {:checkout_id => checkout_id}) + co.delete(:type) + co + end + + 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(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