class GpWebpay::Ws::BaseSignedRequest

Constants

DEFAULT_ATTRIBUTES
OPERATION_NAME
REQUEST_NAME
RESPONSE_ENTITY_NAME
RESPONSE_NAME
SERVICE_EXCEPTION

Attributes

attributes[R]
config[R]

Public Class Methods

new(attributes, merchant_number: :default) click to toggle source
Calls superclass method GpWebpay::Service::new
# File lib/gp_webpay/ws/base_signed_request.rb, line 28
def initialize(attributes, merchant_number: :default)
  @attributes = attributes
  @merchant_number = merchant_number
  @config = GpWebpay.config[@merchant_number] || GpWebpay.config.default
  super()
end

Public Instance Methods

call() click to toggle source
# File lib/gp_webpay/ws/base_signed_request.rb, line 35
def call
  attrs = WsRequest.new(final_attributes).to_gpwebpay

  Rails.logger.debug([self.class::OPERATION_NAME, { message: { self.class::REQUEST_NAME => attributes_with_signature(attrs) } }])
  res = client.call(self.class::OPERATION_NAME, { message: { self.class::REQUEST_NAME => attributes_with_signature(attrs) } })
  WsResponse.from_success(res.body, self.class::RESPONSE_NAME, self.class::RESPONSE_ENTITY_NAME, config.merchant_number)
rescue Savon::HTTPError => e
  rescue_from_http(e)
rescue Savon::SOAPFault => e
  rescue_from_soap(e)
end

Protected Instance Methods

attributes_with_signature(attrs) click to toggle source
# File lib/gp_webpay/ws/base_signed_request.rb, line 59
def attributes_with_signature(attrs)
  digest = OpensslSecurity.generate_digest(config, digest_text(attrs))
  attrs.merge('ins0:signature' => digest)
end
client() click to toggle source
# File lib/gp_webpay/ws/base_signed_request.rb, line 64
def client
  @client ||= Savon.client(wsdl: config.wsdl_file,
                           endpoint: config.ws_url,
                           pretty_print_xml: true,
                           open_timeout: 300,
                           read_timeout: 300)
end
digest_text(attrs) click to toggle source
# File lib/gp_webpay/ws/base_signed_request.rb, line 55
def digest_text(attrs)
  attrs.values.join('|')
end
final_attributes() click to toggle source
# File lib/gp_webpay/ws/base_signed_request.rb, line 49
def final_attributes
  {}.merge(self.class::DEFAULT_ATTRIBUTES,
           attributes,
           { provider: config.provider, merchant_number: config.merchant_number })
end
rescue_from_http(error) click to toggle source
# File lib/gp_webpay/ws/base_signed_request.rb, line 72
def rescue_from_http(error)
  WsResponse.from_http_error(error.to_hash, config.merchant_number)
end
rescue_from_soap(error) click to toggle source
# File lib/gp_webpay/ws/base_signed_request.rb, line 76
def rescue_from_soap(error)
  WsResponse.from_fault_error(error.to_hash, self.class::SERVICE_EXCEPTION, config.merchant_number)
end