test_gateway.rb 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. require 'payment/errors'
  2. require 'payment/test_cards'
  3. class Payment::TestGateway
  4. ERROR_MAP = { ERR20052: :insufficient_funds, ERR20051: :retry_later, ERR20011: :do_not_retry }.freeze
  5. FAILED_RESPONSE_EXAMPLE = { response_code: "99",
  6. response_msg: "Declined",
  7. error_code: "ERR10048",
  8. error_msg: "Example error message",
  9. violator_param: "MERCHANTPAYMENTID",
  10. time: Time.now,
  11. success: false,
  12. amount: 10,
  13. currency: 'USD',
  14. error: nil }.freeze
  15. include Payment::Errors
  16. def self.active?
  17. true
  18. end
  19. def self.request
  20. {}
  21. end
  22. def self.dummy_api(amount, currency, from = nil, card = nil, refund = nil)
  23. if card
  24. success = card[:token] || Payment::TestCards.get(:test_gateway).map{ |c| c[:number] }.include?(card[:number])
  25. card_token = card[:token] || rand(2).to_s + SecureRandom.urlsafe_base64(23)
  26. end
  27. h = success || from || refund ? { success: true, amount: amount, currency: currency, card_token: card_token, pg_tran_date: Time.now.to_i } : FAILED_RESPONSE_EXAMPLE
  28. h = h.merge({ from_currency: from, to_currency: currency, converted_amount: amount }) if from
  29. h
  30. end
  31. def self.charge_from_card(payment, customer, card, pre_auth, saved_card)
  32. request = self.request.merge({card_token: card}) if saved_card
  33. card = saved_card ? { token: card } : card
  34. response = dummy_api(payment[:amount], payment[:currency], nil, card)
  35. [request, response]
  36. rescue => e
  37. Payment.debug_message(request, response, e)
  38. end
  39. def self.cancel_transaction(payment)
  40. request = self.request.merge({payment: payment})
  41. response = dummy_api(payment[:amount], payment[:currency], nil, nil, true)
  42. [request, response]
  43. rescue => e
  44. Payment.debug_message(request, response, e)
  45. end
  46. def self.refund_money(payment)
  47. request = self.request.merge({payment: payment})
  48. response = dummy_api(payment[:amount], payment[:currency], nil, nil, true)
  49. [request, response]
  50. rescue => e
  51. Payment.debug_message(request, response, e)
  52. end
  53. def self.query_saved_cards(customer)
  54. request = self.request.merge({customer: customer[:id]})
  55. response = { success: true, card_list: [{ "cardToken" => SecureRandom.urlsafe_base64(24) }] }
  56. [request, response]
  57. rescue => e
  58. Payment.debug_message(request, response, e)
  59. end
  60. def self.delete_card(token)
  61. request = self.request.merge({card_token: token})
  62. response = {success: true}
  63. [request, response]
  64. rescue => e
  65. Payment.debug_message(request, response, e)
  66. end
  67. def self.currency_exchange(from, to, amount)
  68. request = self.request.merge({from_currency: from, to_currency: to, amount: amount})
  69. response = dummy_api(amount, to, from)
  70. [request, response]
  71. rescue => e
  72. Payment.debug_message(request, response, e)
  73. end
  74. def self.query_bin_number(bin_number)
  75. request = self.request.merge({bin: bin_number})
  76. response = { success: true, bin: { "cardBrand": %w[VISA MC].sample } }
  77. [request, response]
  78. rescue => e
  79. Payment.debug_message(request, response, e)
  80. end
  81. end