class ActiveMerchant::Billing::EpsilonGateway

Constants

PATHS
RISK_BASE_AUTH_PARAMS_KEYS
THREE_D_SECURE_2_INDICATORS

Public Instance Methods

authenticate(order_number:, three_d_secure_pa_res:) click to toggle source

Second request for 3D secure

# File lib/active_merchant/billing/gateways/epsilon.rb, line 161
def authenticate(order_number:, three_d_secure_pa_res:)
  params = {
    contract_code:  self.contract_code,
    order_number:   order_number,
    tds_check_code: 2,
    tds_pares:      three_d_secure_pa_res,
  }

  commit(PATHS[:purchase], params)
end
cancel_recurring(user_id:, item_code:) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 115
def cancel_recurring(user_id:, item_code:)
  params = {
    contract_code: self.contract_code,
    user_id:       user_id,
    item_code:     item_code,
    xml:           1,
    process_code:  8,
  }

  commit(PATHS[:cancel_recurring], params)
end
capture(order_number) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 211
def capture(order_number)
  params = {
    contract_code: self.contract_code,
    order_number:  order_number,
  }

  commit(PATHS[:capture], params)
end
change_recurring_amount(new_item_price:, user_id:, item_code:) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 147
def change_recurring_amount(new_item_price:, user_id:, item_code:)
  params = {
    contract_code:  self.contract_code,
    mission_code:   2,
    user_id:        user_id,
    item_code:      item_code,
    new_item_price: new_item_price,
  }
  commit(PATHS[:change_recurring_amount], params)
end
find_order(order_number) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 193
def find_order(order_number)
  params = {
    contract_code: self.contract_code,
    order_number:  order_number,
  }

  response_keys = [
    :transaction_code,
    :state,
    :last_update,
    :payment_code,
    :item_price,
    :amount,
  ]

  commit(PATHS[:find_order], params, response_keys)
end
find_user(user_id:) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 138
def find_user(user_id:)
  params = {
    contract_code: self.contract_code,
    user_id:       user_id,
  }

  commit(PATHS[:find_user], params)
end
purchase(amount, credit_card, detail = {}) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 41
def purchase(amount, credit_card, detail = {})
  detail[:mission_code] = EpsilonMissionCode::PURCHASE

  params = billing_params(amount, credit_card, detail)

  if three_d_secure_2?(detail)
    params.merge!(detail.slice(*RISK_BASE_AUTH_PARAMS_KEYS).compact)
  end

  commit(PATHS[:purchase], params)
end
recurring(amount, credit_card, detail = {}) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 82
def recurring(amount, credit_card, detail = {})
  detail[:mission_code] ||= EpsilonMissionCode::RECURRING_2

  requires!(detail, [:mission_code, *EpsilonMissionCode::RECURRINGS])

  params = billing_params(amount, credit_card, detail)

  commit(PATHS[:purchase], params)
end
registered_purchase(amount, detail = {}) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 53
def registered_purchase(amount, detail = {})
  params = {
    contract_code: self.contract_code,
    user_id:       detail[:user_id],
    user_name:     detail[:user_name],
    user_mail_add: detail[:user_email],
    item_code:     detail[:item_code],
    item_name:     detail[:item_name],
    order_number:  detail[:order_number],
    st_code:       '10000-0000-0000',
    mission_code:  EpsilonMissionCode::PURCHASE,
    item_price:    amount,
    process_code:  2,
    card_st_code:  detail[:credit_type],
    pay_time:      detail[:payment_time],
    xml:           1,
  }

  params[:memo1] = detail[:memo1] if detail.has_key?(:memo1)
  params[:memo2] = detail[:memo2] if detail.has_key?(:memo2)
  params[:kari_flag] = detail[:capture] ? 2 : 1 if detail.has_key?(:capture)

  if three_d_secure_2?(detail)
    params.merge!(detail.slice(*RISK_BASE_AUTH_PARAMS_KEYS).compact)
  end

  commit(PATHS[:registered_purchase], params)
end
registered_recurring(amount, detail = {}) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 92
def registered_recurring(amount, detail = {})
  params = {
    contract_code: self.contract_code,
    user_id:       detail[:user_id],
    user_name:     detail[:user_name],
    user_mail_add: detail[:user_email],
    item_code:     detail[:item_code],
    item_name:     detail[:item_name],
    order_number:  detail[:order_number],
    st_code:       '10000-0000-0000',
    mission_code:  detail[:mission_code],
    item_price:    amount,
    process_code:  2,
    xml:           1,
  }

  params[:memo1] = detail[:memo1] if detail.has_key?(:memo1)
  params[:memo2] = detail[:memo2] if detail.has_key?(:memo2)
  params[:kari_flag] = detail[:capture] ? 2 : 1 if detail.has_key?(:capture)

  commit(PATHS[:registered_recurring], params)
end
terminate_recurring(user_id:) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 127
def terminate_recurring(user_id:)
  params = {
    contract_code: self.contract_code,
    user_id:       user_id,
    xml:           1,
    process_code:  9,
  }

  commit(PATHS[:terminate_recurring], params)
end
verify(credit_card, options = {}) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 181
def verify(credit_card, options = {})
  o = options.dup
  o[:order_number] ||= "#{Time.now.to_i}#{options[:user_id]}".first(32)
  o[:item_code] = 'verifycreditcard'
  o[:item_name] = 'verify credit card'

  MultiResponse.run(:use_first_response) do |r|
    r.process { purchase(1, credit_card, o) }
    r.process(:ignore_result) { void(o[:order_number]) }
  end
end
void(order_number) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 172
def void(order_number)
  params = {
    contract_code: self.contract_code,
    order_number:  order_number,
  }

  commit(PATHS[:void], params)
end

Private Instance Methods

billing_params(amount, payment_method, detail) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 222
def billing_params(amount, payment_method, detail)
  params = {
    contract_code:  self.contract_code,
    user_id:        detail[:user_id],
    user_name:      detail[:user_name],
    user_mail_add:  detail[:user_email],
    item_code:      detail[:item_code],
    item_name:      detail[:item_name],
    order_number:   detail[:order_number],
    st_code:        '10000-0000-0000',
    mission_code:   detail[:mission_code],
    item_price:     amount,
    process_code:   1,
    card_number:    payment_method.number,
    expire_y:       payment_method.year,
    expire_m:       payment_method.month,
    card_st_code:   detail[:credit_type],
    pay_time:       detail[:payment_time],
    tds_check_code: detail[:three_d_secure_check_code],
    user_agent:     "#{ActiveMerchant::Epsilon}-#{ActiveMerchant::Epsilon::VERSION}",
  }

  params[:memo1] = detail[:memo1] if detail.has_key?(:memo1)
  params[:memo2] = detail[:memo2] if detail.has_key?(:memo2)
  params[:kari_flag] = detail[:capture] ? 2 : 1 if detail.has_key?(:capture)

  if detail.has_key?(:token)
    params[:token] = detail[:token]
    params.delete(:card_number)
    params.delete(:expire_y)
    params.delete(:expire_m)
  end

  if payment_method.class.requires_verification_value?
    params.merge!(
      security_code:  payment_method.verification_value,
      security_check: 1, # use security code
    )
  end

  params
end
three_d_secure_2?(detail) click to toggle source
# File lib/active_merchant/billing/gateways/epsilon.rb, line 265
def three_d_secure_2?(detail)
  THREE_D_SECURE_2_INDICATORS.include?(detail[:tds_flag])
end