class OffsitePayments::Integrations::PayULatam::Helper
Public Class Methods
new(order, merchant_id, options = {})
click to toggle source
These credentials are mandatory:
credential2: api_login
credential3: api_key
credential4: account_id
Calls superclass method
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 78 def initialize(order, merchant_id, options = {}) super @merchant_id = merchant_id @options = options add_field 'language', 'en' end
Public Instance Methods
account_id()
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 94 def account_id @options[:credential4] end
api_key()
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 90 def api_key @options[:credential3] end
api_login()
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 86 def api_login @options[:credential2] end
form_fields()
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 106 def form_fields cash_request = send_request(PayULatam.service_url, build_cash_request) raise ActionViewHelperError, "Invalid response: #{cash_request}" unless success_cash_request_response?(cash_request) { :order_id => cash_request['transactionResponse']['orderId'], :transaction_id => cash_request['transactionResponse']['transactionId'], :url => cash_request['transactionResponse']['extraParameters']['URL_PAYMENT_RECEIPT_HTML'], :expiration_date => cash_request['transactionResponse']['extraParameters']['EXPIRATION_DATE'], } end
form_method()
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 102 def form_method 'GET' end
merchant_id()
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 98 def merchant_id @merchant_id end
order_status(order_id)
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 119 def order_status(order_id) request_status = send_request(PayULatam.queries_url, build_query_request(:orderId, order_id)) raise ActionViewHelperError, "Invalid response: #{request_status}" unless success_response?(request_status) # Not found? return nil if request_status['result'].nil? or request_status['result']['payload'].nil? { :order_id => request_status['result']['payload']['id'], :status => request_status['result']['payload']['status'], :reference_code => request_status['result']['payload']['referenceCode'], :description => request_status['result']['payload']['description'] } end
orders_statuses(reference_code)
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 148 def orders_statuses(reference_code) request_status = send_request(PayULatam.queries_url, build_query_request(:referenceCode, reference_code)) raise ActionViewHelperError, "Invalid response: #{request_status}" unless success_response?(request_status) # Not found? return nil if request_status['result'].nil? request_status['result']['payload'] end
transaction_status(transaction_id)
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 134 def transaction_status(transaction_id) request_status = send_request(PayULatam.queries_url, build_query_request(:transactionId, transaction_id)) raise ActionViewHelperError, "Invalid response: #{request_status}" unless success_response?(request_status) # Not found? return nil if request_status['result'].nil? or request_status['result']['payload'].nil? { :status => request_status['result']['payload']['state'], :traceability_code => request_status['result']['payload']['trazabilityCode'], :authorization => request_status['result']['payload']['authorizationCode'] } end
Private Instance Methods
build_base_request(command)
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 221 def build_base_request(command) request = {} request[:language] = @fields['language'] request[:command] = command # Should always be false, even in test mode request[:test] = 'false' request[:merchant] = {:apiLogin => api_login, :apiKey => api_key} request end
build_cash_request()
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 178 def build_cash_request shipping_address = {} shipping_address[:street1] = @fields['address1'] unless @fields['address1'].nil? shipping_address[:city] = @fields['city'] unless @fields['city'].nil? shipping_address[:state] = @fields['state'] unless @fields['state'].nil? shipping_address[:country] = @fields['country'] unless @fields['country'].nil? shipping_address[:phone] = @fields['phone'] unless @fields['phone'].nil? buyer = {} buyer[:fullName] = @fields['name'] unless @fields['name'].nil? buyer[:emailAddress] = @fields['email'] unless @fields['email'].nil? buyer[:dniNumber] = @fields['dniNumber'] unless @fields['dniNumber'].nil? buyer[:shippingAddress] = shipping_address order = {} order[:accountId] = account_id order[:referenceCode] = @fields['order'] order[:description] = @fields['description'] order[:language] = @fields['language'] order[:signature] = signature order[:shippingAddress] = {:country => @fields['country']} unless @fields['country'].nil? order[:buyer] = buyer order[:additionalValues] = {:TX_VALUE => {:value => @fields['amount'].to_i, :currency => @fields['currency']}} transaction = {} transaction[:order] = order transaction[:type] = 'AUTHORIZATION_AND_CAPTURE' transaction[:paymentMethod] = @fields['paymentMethod'] transaction[:expirationDate] = @fields['expirationDate'] unless @fields['expirationDate'].nil? request = build_base_request('SUBMIT_TRANSACTION') request[:transaction] = transaction request.to_json end
build_query_request(key, value)
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 214 def build_query_request(key, value) request = build_base_request(QUERY_COMMANDS[key]) request[:details] = {key => value} request.to_json end
send_request(url, request_body)
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 160 def send_request(url, request_body) uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true # PayULatam's test server has an improperly installed cert http.verify_mode = OpenSSL::SSL::VERIFY_NONE if test? request = Net::HTTP::Post.new(uri.request_uri) request['Accept'] = 'application/json' request.content_type = 'application/json' request.body = request_body response = http.request(request) JSON.parse(response.body) rescue JSON::ParserError response.body end
signature()
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 231 def signature raw = "#{api_key}~#{merchant_id}~#{@fields['order']}~#{@fields['amount']}~#{@fields['currency']}" Digest::MD5.hexdigest(raw) end
success_cash_request_response?(cash_request_response)
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 236 def success_cash_request_response?(cash_request_response) success_response?(cash_request_response) and cash_request_response['transactionResponse'].is_a?(Hash) and cash_request_response['transactionResponse']['errorCode'].nil? end
success_response?(response)
click to toggle source
# File lib/offsite_payments/integrations/pay_u_latam.rb, line 240 def success_response?(response) response.is_a?(Hash) and response['code'] == 'SUCCESS' and response['error'].nil? end