| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- require 'payment/errors'
- require 'payment/test_cards'
- class Payment::TestGateway
- ERROR_MAP = { ERR20052: :insufficient_funds, ERR20051: :retry_later, ERR20011: :do_not_retry }.freeze
- FAILED_RESPONSE_EXAMPLE = { response_code: "99",
- response_msg: "Declined",
- error_code: "ERR10048",
- error_msg: "Example error message",
- violator_param: "MERCHANTPAYMENTID",
- time: Time.now,
- success: false,
- amount: 10,
- currency: 'USD',
- error: nil }.freeze
- include Payment::Errors
- def self.active?
- true
- end
- def self.request
- {}
- end
- def self.dummy_api(amount, currency, from = nil, card = nil, refund = nil)
- if card
- success = card[:token] || Payment::TestCards.get(:test_gateway).map{ |c| c[:number] }.include?(card[:number])
- card_token = card[:token] || rand(2).to_s + SecureRandom.urlsafe_base64(23)
- end
- h = success || from || refund ? { success: true, amount: amount, currency: currency, card_token: card_token, pg_tran_date: Time.now.to_i } : FAILED_RESPONSE_EXAMPLE
- h = h.merge({ from_currency: from, to_currency: currency, converted_amount: amount }) if from
- h
- end
- def self.charge_from_card(payment, customer, card, pre_auth, saved_card)
- request = self.request.merge({card_token: card}) if saved_card
- card = saved_card ? { token: card } : card
- response = dummy_api(payment[:amount], payment[:currency], nil, card)
- [request, response]
- rescue => e
- Payment.debug_message(request, response, e)
- end
- def self.cancel_transaction(payment)
- request = self.request.merge({payment: payment})
- response = dummy_api(payment[:amount], payment[:currency], nil, nil, true)
- [request, response]
- rescue => e
- Payment.debug_message(request, response, e)
- end
- def self.refund_money(payment)
- request = self.request.merge({payment: payment})
- response = dummy_api(payment[:amount], payment[:currency], nil, nil, true)
- [request, response]
- rescue => e
- Payment.debug_message(request, response, e)
- end
- def self.query_saved_cards(customer)
- request = self.request.merge({customer: customer[:id]})
- response = { success: true, card_list: [{ "cardToken" => SecureRandom.urlsafe_base64(24) }] }
- [request, response]
- rescue => e
- Payment.debug_message(request, response, e)
- end
- def self.delete_card(token)
- request = self.request.merge({card_token: token})
- response = {success: true}
- [request, response]
- rescue => e
- Payment.debug_message(request, response, e)
- end
- def self.currency_exchange(from, to, amount)
- request = self.request.merge({from_currency: from, to_currency: to, amount: amount})
- response = dummy_api(amount, to, from)
- [request, response]
- rescue => e
- Payment.debug_message(request, response, e)
- end
- def self.query_bin_number(bin_number)
- request = self.request.merge({bin: bin_number})
- response = { success: true, bin: { "cardBrand": %w[VISA MC].sample } }
- [request, response]
- rescue => e
- Payment.debug_message(request, response, e)
- end
- end
|