Class: OffsitePayments::Integrations::Latipay::QueryInterface

Inherits:
Interface
  • Object
show all
Defined in:
lib/offsite_payments/integrations/latipay.rb

Defined Under Namespace

Classes: QueryRequestError

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from Interface

base_url, #initialize, #sign, #verify_signature

Constructor Details

This class inherits a constructor from OffsitePayments::Integrations::Latipay::Interface

Class Method Details

.url(merchant_reference) ⇒ Object



115
116
117
# File 'lib/offsite_payments/integrations/latipay.rb', line 115

def self.url(merchant_reference)
  "#{base_url}/transaction/#{CGI.escape(merchant_reference)}"
end

Instance Method Details

#call(merchant_reference) ⇒ Object

Raises:

  • (ArgumentError)


119
120
121
122
123
124
125
126
127
128
129
130
# File 'lib/offsite_payments/integrations/latipay.rb', line 119

def call(merchant_reference)
  options = { user_id: @user_id }
  signature = self.sign(options.merge({ merchant_reference: merchant_reference }))
  options[:signature] = signature

  raise ArgumentError, "Merchant reference must be specified" if merchant_reference.blank?
  url = "#{self.class.url(merchant_reference)}?#{options.to_query}"
  raw_response = ssl_get(url, standard_headers)
  parsed_response = parse_response(raw_response)
  validate_response(parsed_response)
  parsed_response
end

#validate_response(parsed_response) ⇒ Object

Raises:



132
133
134
135
136
137
# File 'lib/offsite_payments/integrations/latipay.rb', line 132

def validate_response(parsed_response)
  raise QueryRequestError, parsed_response unless parsed_response['code'] == 0
  message = "#{parsed_response['merchant_reference']}#{parsed_response['payment_method']}#{parsed_response['status']}#{parsed_response['currency']}#{parsed_response['amount']}"
  signature = parsed_response['signature']
  raise StandardError, 'Invalid Signature in response' unless verify_signature(message, signature)
end