When i charge credit card using form, it throws validation error "The credit card information you provided is not valid. Please double check the information you provided and then try again."
Any solution??
This is my payment.rb
class Payment < ActiveRecord::Base
require "active_merchant/billing/rails"
attr_accessor :card_security_code
attr_accessor :credit_card_number
attr_accessor :expiration_month
attr_accessor :expiration_year
validates :first_name, presence: true
validates :last_name, presence: true
validates :card_security_code, presence: true
validates :credit_card_number, presence: true
validates :expiration_month, presence: true, numericality: { greater_than_or_equal_to: 1, less_than_or_equal_to: 12 }
validates :expiration_year, presence: true
validates :amount, presence: true, numericality: { greater_than: 0 }
validate :valid_card
def credit_card
ActiveMerchant::Billing::CreditCard.new(
number: credit_card_number,
verification_value: card_security_code,
month: expiration_month,
year: expiration_year,
first_name: first_name,
last_name: last_name
)
end
def valid_card
if !credit_card.valid?
errors.add(:base, "The credit card information you provided is not valid. Please double check the information you provided and then try again.")
false
else
true
end
end
def process
if valid_card
response = GATEWAY.authorize(amount * 100, credit_card)
if response.success?
transaction = GATEWAY.capture(amount * 100, response.authorization)
if !transaction.success?
errors.add(:base, "The credit card you provided was declined. Please double check your information and try again.") and return
false
end
update_columns({authorization_code: transaction.authorization, success: true})
true
else
errors.add(:base, "The credit card you provided was declined. Please double check your information and try again.") and return
false
end
end
end
end
This is my activemerchant.rb
if Rails.env == 'development'
ActiveMerchant::Billing::FirstdataE4Gateway.wiredump_device = File.open(Rails.root.join('log','active_merchant.log'), 'a+')
ActiveMerchant::Billing::FirstdataE4Gateway.wiredump_device.sync = true
ActiveMerchant::Billing::Base.mode = :test
login = 'mylogin'
password='mypassword'
elsif Rails.env == 'production'
login = 'mylogin'
password='mypassword'
end
GATEWAY = ActiveMerchant::Billing::FirstdataE4Gateway.new({
login: login,
password: password
})
Check here