class ActiveMerchant::Billing::SwipeCheckoutGateway
Constants
- LIVE_URLS
- TRANSACTION_API
- TRANSACTION_APPROVED_MSG
- TRANSACTION_DECLINED_MSG
Public Class Methods
new(options = {})
click to toggle source
Swipe Checkout requires the merchant's email and API key for authorization. This can be found under Settings > API Credentials after logging in to your Swipe Checkout merchant console at merchant.swipehq.[com|ca]
:region determines which Swipe URL is used, this can be one of “NZ” or “CA”. Currently Swipe Checkout has New Zealand and Canadian domains (swipehq.com and swipehq.ca respectively). Merchants must use the region that they signed up in for authentication with their merchant ID and API key to succeed.
Calls superclass method
ActiveMerchant::Billing::Gateway::new
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 32 def initialize(options = {}) requires!(options, :login, :api_key, :region) super end
Public Instance Methods
purchase(money, creditcard, options = {})
click to toggle source
Transfers funds immediately. Note that Swipe Checkout only supports purchase at this stage
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 39 def purchase(money, creditcard, options = {}) post = {} add_invoice(post, options) add_creditcard(post, creditcard) add_customer_data(post, creditcard, options) add_amount(post, money, options) commit('sale', money, post) end
Private Instance Methods
add_amount(post, money, options)
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 91 def add_amount(post, money, options) post[:amount] = money.to_s post[:currency] = (options[:currency] || currency(money)) end
add_creditcard(post, creditcard)
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 76 def add_creditcard(post, creditcard) post[:card_number] = creditcard.number post[:card_type] = creditcard.brand post[:name_on_card] = "#{creditcard.first_name} #{creditcard.last_name}" post[:card_expiry] = expdate(creditcard) post[:secure_number] = creditcard.verification_value end
add_customer_data(post, creditcard, options)
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 51 def add_customer_data(post, creditcard, options) post[:email] = options[:email] post[:ip_address] = options[:ip] address = options[:billing_address] || options[:address] return if address.nil? post[:company] = address[:company] # groups all names after the first into the last name param post[:first_name], post[:last_name] = address[:name].split(' ', 2) post[:address] = "#{address[:address1]}, #{address[:address2]}" post[:city] = address[:city] post[:country] = address[:country] post[:mobile] = address[:phone] # API only has a "mobile" field, no "phone" end
add_invoice(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 68 def add_invoice(post, options) # store shopping-cart order ID in Swipe for merchant's records post[:td_user_data] = options[:order_id] if options[:order_id] post[:td_item] = options[:description] if options[:description] post[:td_description] = options[:description] if options[:description] post[:item_quantity] = "1" end
build_error_response(message, params={})
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 146 def build_error_response(message, params={}) Response.new( false, message, params, :test => test? ) end
call_api(api, params=nil)
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 132 def call_api(api, params=nil) params ||= {} params[:merchant_id] = @options[:login] params[:api_key] = @options[:api_key] # ssl_post() returns the response body as a string on success, # or raises a ResponseError exception on failure JSON.parse(ssl_post(url(@options[:region], api), params.to_query)) end
commit(action, money, parameters)
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 97 def commit(action, money, parameters) case action when "sale" begin response = call_api(TRANSACTION_API, parameters) # response code and message params should always be present code = response["response_code"] message = response["message"] if code == 200 result = response["data"]["result"] success = (result == 'accepted' || (test? && result == 'test-accepted')) Response.new(success, success ? TRANSACTION_APPROVED_MSG : TRANSACTION_DECLINED_MSG, response, :test => test? ) else build_error_response(message, response) end rescue ResponseError => e build_error_response("ssl_post() with url #{url} raised ResponseError: #{e}") rescue JSON::ParserError => e msg = 'Invalid response received from the Swipe Checkout API. ' + 'Please contact support@optimizerhq.com if you continue to receive this message.' + " (Full error message: #{e})" build_error_response(msg) end end end
expdate(creditcard)
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 84 def expdate(creditcard) year = format(creditcard.year, :two_digits) month = format(creditcard.month, :two_digits) "#{month}#{year}" end
url(region, api)
click to toggle source
# File lib/active_merchant/billing/gateways/swipe_checkout.rb, line 142 def url(region, api) ((test? ? self.test_url : LIVE_URLS[region]) + api) end