lib/active_merchant/billing/gateways/pay_secure.rb in activemerchant-1.28.0 vs lib/active_merchant/billing/gateways/pay_secure.rb in activemerchant-1.29.0

- old
+ new

@@ -1,118 +1,117 @@ module ActiveMerchant #:nodoc: module Billing #:nodoc: class PaySecureGateway < Gateway self.live_url = self.test_url = 'https://clearance.commsecure.com.au/cgi-bin/PSDirect' - + self.money_format = :cents # Currently Authorization and Capture is not implemented because # capturing requires the original credit card information TRANSACTIONS = { :purchase => 'PURCHASE', :authorization => 'AUTHORISE', - :capture => 'ADVICE', + :capture => 'ADVICE', :credit => 'REFUND' } - + SUCCESS = 'Accepted' SUCCESS_MESSAGE = 'The transaction was approved' - + self.supported_countries = ['AU'] self.homepage_url = 'http://www.commsecure.com.au/paysecure.shtml' self.display_name = 'PaySecure' self.supported_cardtypes = [:visa, :master, :american_express, :diners_club] def initialize(options = {}) requires!(options, :login, :password) - @options = options super - end + end def purchase(money, credit_card, options = {}) requires!(options, :order_id) - + post = {} add_amount(post, money) add_invoice(post, options) - add_credit_card(post, credit_card) - + add_credit_card(post, credit_card) + commit(:purchase, money, post) - end - + end + private # Used for capturing, which is currently not supported. def add_reference(post, identification) auth, trans_id = identification.split(";") post[:authnum] = auth post[:transid] = trans_id end - + def add_amount(post, money) post[:amount] = amount(money) end - + def add_invoice(post, options) post[:merchant_transid] = options[:order_id].to_s.slice(0,21) post[:memnum] = options[:invoice] post[:custnum] = options[:customer] post[:clientdata] = options[:description] end - - def add_credit_card(post, credit_card) + + def add_credit_card(post, credit_card) post[:cardnum] = credit_card.number post[:cardname] = credit_card.name post[:expiry] = expdate(credit_card) post[:cvv2] = credit_card.verification_value end - + def expdate(credit_card) year = sprintf("%.4i", credit_card.year) month = sprintf("%.2i", credit_card.month) "#{month}#{year[-2..-1]}" end - + def commit(action, money, parameters) response = parse( ssl_post(self.live_url, post_data(action, parameters)) ) - - Response.new(successful?(response), message_from(response), response, - :test => test_response?(response), + + Response.new(successful?(response), message_from(response), response, + :test => test_response?(response), :authorization => authorization_from(response) ) - + end - + def successful?(response) response[:status] == SUCCESS end - + def authorization_from(response) [ response[:authnum], response[:transid] ].compact.join(";") end - + def test_response?(response) !!(response[:transid] =~ /SimProxy/) end - + def message_from(response) successful?(response) ? SUCCESS_MESSAGE : response[:errorstring] end - + def parse(body) response = {} - body.to_s.each_line do |l| + body.to_s.each_line do |l| key, value = l.split(":", 2) response[key.to_s.downcase.to_sym] = value.strip end response - end - + end + def post_data(action, parameters = {}) parameters[:request_type] = TRANSACTIONS[action] parameters[:merchant_id] = @options[:login] parameters[:password] = @options[:password] - + parameters.reject{|k,v| v.blank?}.collect { |key, value| "#{key.to_s.upcase}=#{CGI.escape(value.to_s)}" }.join("&") end end end end