module Fawry::Requests::ChargeRequest

Constants

DEFAULTS

Public Instance Methods

fire_charge_request() click to toggle source
# File lib/fawry/requests/charge_request.rb, line 10
def fire_charge_request
  fawry_api_response = Connection.post(request[:path], request[:params], request[:body], request[:options])
  response_body = JSON.parse(fawry_api_response.body)

  FawryResponse.new(response_body)
end

Private Instance Methods

build_charge_request() click to toggle source
# File lib/fawry/requests/charge_request.rb, line 19
def build_charge_request
  {
    path: 'payments/charge',
    params: {},
    body: charge_request_transformed_params,
    options: options
  }
end
charge_items() click to toggle source
# File lib/fawry/requests/charge_request.rb, line 68
def charge_items
  request_params[:charge_items].each { |hash| hash[:itemId] = hash.delete(:item_id) }
end
charge_request_signature() click to toggle source
# File lib/fawry/requests/charge_request.rb, line 72
def charge_request_signature
  Digest::SHA256.hexdigest("#{fawry_merchant_code}#{request_params[:merchant_ref_num]}"\
                           "#{request_params[:customer_profile_id]}#{request_params[:payment_method]}"\
                           "#{format('%<amount>.2f', amount: request_params[:amount])}"\
                           "#{request_params[:card_token]}#{fawry_secure_key}")
end
charge_request_transformed_params() click to toggle source

rubocop:disable Metrics/AbcSize rubocop:disable Metrics/MethodLength

# File lib/fawry/requests/charge_request.rb, line 34
def charge_request_transformed_params
  {
    merchantCode: fawry_merchant_code,
    merchantRefNum: request_params[:merchant_ref_num],
    customerProfileId: request_params[:customer_profile_id],
    cardToken: request_params[:card_token],
    customerMobile: request_params[:customer_mobile],
    customerEmail: request_params[:customer_email],
    paymentMethod: request_params[:payment_method],
    amount: request_params[:amount],
    description: request_params[:description],
    paymentExpiry: request_params[:payment_expiry],
    chargeItems: charge_items,
    currencyCode: request_params[:currency_code],
    language: request_params[:language],
    signature: charge_request_signature
  }.compact
end
fawry_merchant_code() click to toggle source

rubocop:enable Metrics/MethodLength rubocop:enable Metrics/AbcSize

# File lib/fawry/requests/charge_request.rb, line 55
def fawry_merchant_code
  Fawry.configuration.fawry_merchant_code || ENV.fetch('FAWRY_MERCHANT_CODE') { request_params[:merchant_code] }
end
fawry_secure_key() click to toggle source
# File lib/fawry/requests/charge_request.rb, line 59
def fawry_secure_key
  Fawry.configuration.fawry_secure_key || ENV.fetch('FAWRY_SECURE_KEY') { request_params[:fawry_secure_key] }
end
request_params() click to toggle source
# File lib/fawry/requests/charge_request.rb, line 28
def request_params
  @request_params ||= DEFAULTS.merge(params)
end
validate_charge_params!() click to toggle source
# File lib/fawry/requests/charge_request.rb, line 63
def validate_charge_params!
  contract = Contracts::ChargeRequestContract.new.call(request_params)
  raise InvalidFawryRequestError, contract.errors.to_h if contract.failure?
end