class Fawry::FawryCallback

Attributes

callback_params[R]
fawry_secure_key[R]
options[R]

Public Class Methods

new(callback_params, opts) click to toggle source
# File lib/fawry/fawry_callback.rb, line 9
def initialize(callback_params, opts)
  @callback_params = callback_params
  @fawry_secure_key = Fawry.configuration.fawry_secure_key || ENV.fetch('FAWRY_SECURE_KEY')
  @options = opts
end

Public Instance Methods

parse() click to toggle source
# File lib/fawry/fawry_callback.rb, line 15
def parse
  verify_callback_signature!
  build_callback

  self
end

Private Instance Methods

build_callback() click to toggle source

Adds keys from fawry API response as methods on FawryCallback instance that return the value of each key

type => type referenceNumber => reference_number merchantRefNumber => merchant_ref_number expirationTime => expiration_time statusCode => status_code statusDescription => status_description

fawry_callback = FawryCallback.new(callback_params, fawry_secure_key) fawry_callback.order_status => PAID fawry_callback.fawry_ref_number => 1234567

# File lib/fawry/fawry_callback.rb, line 38
def build_callback
  enrich_object(callback_params)
end
signature() click to toggle source

rubocop:disable Metrics/AbcSize

# File lib/fawry/fawry_callback.rb, line 47
def signature
  Digest::SHA256.hexdigest("#{callback_params[:fawryRefNumber]}#{callback_params[:merchantRefNum]}"\
                           "#{format('%<paymentAmount>.2f', paymentAmount: callback_params[:paymentAmount])}"\
                           "#{format('%<orderAmount>.2f', orderAmount: callback_params[:orderAmount])}"\
                           "#{callback_params[:orderStatus]}#{callback_params[:paymentMethod]}"\
                           "#{callback_params[:paymentRefrenceNumber]}#{fawry_secure_key}")
end
verify_callback_signature!() click to toggle source
# File lib/fawry/fawry_callback.rb, line 42
def verify_callback_signature!
  raise InvalidSignatureError, 'Invalid Signature' unless signature == callback_params[:messageSignature]
end