class ActiveMerchant::Billing::PinGateway
Public Class Methods
new(options = {})
click to toggle source
Calls superclass method
ActiveMerchant::Billing::Gateway::new
# File lib/active_merchant/billing/gateways/pin.rb, line 14 def initialize(options = {}) requires!(options, :api_key) super end
Public Instance Methods
capture(money, token, options = {})
click to toggle source
Captures a previously authorized charge. Capturing a certin amount of the original authorization is currently not supported.
# File lib/active_merchant/billing/gateways/pin.rb, line 64 def capture(money, token, options = {}) commit(:put, "charges/#{CGI.escape(token)}/capture", {}, options) end
purchase(money, creditcard, options = {})
click to toggle source
Create a charge using a credit card, card token or customer token
To charge a credit card: purchase(, [creditcard hash], …) To charge a customer: purchase(, [token], …)
# File lib/active_merchant/billing/gateways/pin.rb, line 23 def purchase(money, creditcard, options = {}) post = {} add_amount(post, money, options) add_customer_data(post, options) add_invoice(post, options) add_creditcard(post, creditcard) add_address(post, creditcard, options) add_capture(post, options) commit(:post, 'charges', post, options) end
refund(money, token, options = {})
click to toggle source
Refund a transaction, note that the money attribute is ignored at the moment as the API does not support partial refunds. The parameter is kept for compatibility reasons
# File lib/active_merchant/billing/gateways/pin.rb, line 50 def refund(money, token, options = {}) commit(:post, "charges/#{CGI.escape(token)}/refunds", { :amount => amount(money) }, options) end
store(creditcard, options = {})
click to toggle source
Create a customer and associated credit card. The token that is returned can be used instead of a credit card parameter in the purchase method
# File lib/active_merchant/billing/gateways/pin.rb, line 38 def store(creditcard, options = {}) post = {} add_creditcard(post, creditcard) add_customer_data(post, options) add_address(post, creditcard, options) commit(:post, 'customers', post, options) end
update(token, creditcard, options = {})
click to toggle source
Updates the credit card for the customer.
# File lib/active_merchant/billing/gateways/pin.rb, line 69 def update(token, creditcard, options = {}) post = {} add_creditcard(post, creditcard) add_customer_data(post, options) add_address(post, creditcard, options) commit(:put, "customers/#{CGI.escape(token)}", post, options) end
Private Instance Methods
add_address(post, creditcard, options)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 91 def add_address(post, creditcard, options) return if creditcard.kind_of?(String) address = (options[:billing_address] || options[:address]) return unless address post[:card] ||= {} post[:card].merge!( :address_line1 => address[:address1], :address_city => address[:city], :address_postcode => address[:zip], :address_state => address[:state], :address_country => address[:country] ) end
add_amount(post, money, options)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 80 def add_amount(post, money, options) post[:amount] = amount(money) post[:currency] = (options[:currency] || currency(money)) post[:currency] = post[:currency].upcase if post[:currency] end
add_capture(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 110 def add_capture(post, options) capture = options[:capture] post[:capture] = capture == false ? false : true end
add_creditcard(post, creditcard)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 116 def add_creditcard(post, creditcard) if creditcard.respond_to?(:number) post[:card] ||= {} post[:card].merge!( :number => creditcard.number, :expiry_month => creditcard.month, :expiry_year => creditcard.year, :cvc => creditcard.verification_value, :name => creditcard.name ) elsif creditcard.kind_of?(String) if creditcard =~ /^card_/ post[:card_token] = creditcard else post[:customer_token] = creditcard end end end
add_customer_data(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 86 def add_customer_data(post, options) post[:email] = options[:email] if options[:email] post[:ip_address] = options[:ip] if options[:ip] end
add_invoice(post, options)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 106 def add_invoice(post, options) post[:description] = options[:description] || "Active Merchant Purchase" end
commit(method, action, params, options)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 147 def commit(method, action, params, options) url = "#{test? ? test_url : live_url}/#{action}" begin body = parse(ssl_request(method, url, post_data(params), headers(options))) rescue ResponseError => e body = parse(e.response.body) end if body["response"] success_response(body) elsif body["error"] error_response(body) end end
error_response(body)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 174 def error_response(body) Response.new( false, body['error_description'], body, :authorization => nil, :test => test? ) end
headers(params = {})
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 136 def headers(params = {}) result = { "Content-Type" => "application/json", "Authorization" => "Basic #{Base64.strict_encode64(options[:api_key] + ':').strip}" } result['X-Partner-Key'] = params[:partner_key] if params[:partner_key] result['X-Safe-Card'] = params[:safe_card] if params[:safe_card] result end
parse(body)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 188 def parse(body) JSON.parse(body) end
post_data(parameters = {})
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 192 def post_data(parameters = {}) parameters.to_json end
success_response(body)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 163 def success_response(body) response = body["response"] Response.new( true, response['status_message'], body, :authorization => token(response), :test => test? ) end
token(response)
click to toggle source
# File lib/active_merchant/billing/gateways/pin.rb, line 184 def token(response) response['token'] end