Class: AmazonFlexPay::API::BaseRequest

Inherits:
Model
  • Object
show all
Defined in:
lib/amazon_flex_pay/api/base_request.rb

Defined Under Namespace

Classes: BaseResponse, ErrorResponse

Instance Method Summary collapse

Methods inherited from Model

attribute, attribute_names, collection_attribute, complex_attribute, enumerated_attribute, #initialize, #to_hash

Constructor Details

This class inherits a constructor from AmazonFlexPay::Model

Instance Method Details

#submitObject

This compiles an API request object into a URL, sends it to Amazon, and processes the response.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/amazon_flex_pay/api/base_request.rb', line 5

def submit
  url = AmazonFlexPay.api_endpoint + '?' + AmazonFlexPay.query_string(self.to_params)
  ActiveSupport::Notifications.instrument("amazon_flex_pay.api", :action => action_name, :request => url) do |payload|
    begin
      http = RestClient.get(url)

      payload[:response] = http.body
      payload[:code] = http.code

      response = self.class::Response.from_xml(http.body)
      response.request = self
      response

    rescue RestClient::BadRequest, RestClient::Unauthorized, RestClient::Forbidden => e
      payload[:response] = e.http_body
      payload[:code] = e.http_code

      er = ErrorResponse.from_xml(e.response.body)
      klass = AmazonFlexPay::API.const_get(er.errors.first.code)
      raise klass.new(er.errors.first.code, er.errors.first.message, er.request_id, self)
    end
  end
end

#to_paramsObject

Converts the API request object into parameters and signs them.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
# File 'lib/amazon_flex_pay/api/base_request.rb', line 30

def to_params
  params = self.to_hash.merge(
    'Action' => action_name,
    'AWSAccessKeyId' => AmazonFlexPay.access_key,
    'Version' => AmazonFlexPay::API_VERSION,
    'Timestamp' => format_value(Time.now)
  )

  params['SignatureVersion'] = 2
  params['SignatureMethod'] = 'HmacSHA256'
  params['Signature'] = AmazonFlexPay.signature(AmazonFlexPay.api_endpoint, params)

  params
end