class Payanyway::Request::Check

Constants

RESPONSE_CODE
SPECIAL_CODE

Public Class Methods

new(params) click to toggle source
Calls superclass method Payanyway::Request::Base::new
# File lib/payanyway/request/check.rb, line 34
def initialize(params)
  super
  @valid_signature = (@pretty_params[:signature] == Payanyway::Helpers::SignatureGenerate.for_check(@params))
end

Public Instance Methods

response(attr) click to toggle source
# File lib/payanyway/request/check.rb, line 43
def response(attr)
  # Возвращает Nokogiri::XML документ
  #  * _attr[:amount]      - сумма заказа
  #  * _attr[:state]       - статус платежа (см. RESPONSE_CODE)
  #  * _attr[:description] - Произвольное описание заказа (необязятельно)
  #  * _attr[:attributes]  - Произвольный атрибуты заказа (необязятельно)

  validate_status!(attr[:state])

  xml = base_xml(attr[:amount], attr[:state], attr[:description])
  parent = xml.at_css('MNT_RESPONSE')

  parent.add_child(signature_node(xml))
  parent.add_child(attributes_node(attr[:attributes], xml)) if attr[:attributes].present?

  add_to_logger(xml) if attr[:logger]

  xml
end
success?() click to toggle source
# File lib/payanyway/request/check.rb, line 39
def success?
  @valid_signature
end

Private Instance Methods

add_to_logger(xml) click to toggle source
# File lib/payanyway/request/check.rb, line 115
def add_to_logger(xml)
  Rails.logger.info("PAYANYWAY: XML response for check: \r\n #{ xml.to_xml }")
end
attributes_node(attributes, xml) click to toggle source
# File lib/payanyway/request/check.rb, line 99
def attributes_node(attributes, xml)
  Nokogiri::XML::Node.new('MNT_ATTRIBUTES', xml).tap do |node|
    attributes.each do |key, value|
      attr_node = Nokogiri::XML::Node.new('ATTRIBUTE', xml)
      attr_node.add_child(create_new_node('KEY', key.to_s, xml))
      attr_node.add_child(create_new_node('VALUE', value.to_s, xml))

      node.add_child(attr_node)
    end
  end
end
base_xml(amount, state, description) click to toggle source
# File lib/payanyway/request/check.rb, line 70
      def base_xml(amount, state, description)
        xml = <<-EOXML
          <MNT_RESPONSE>
            <MNT_ID>#{ Payanyway::Gateway.config['moneta_id'] }</MNT_ID>
            <MNT_TRANSACTION_ID>#{ @pretty_params[:transaction_id] }</MNT_TRANSACTION_ID>
            <MNT_RESULT_CODE>#{ result_code_of(amount, state) }</MNT_RESULT_CODE>
            <MNT_DESCRIPTION>#{ description }</MNT_DESCRIPTION>
            <MNT_AMOUNT>#{ amount }</MNT_AMOUNT>
          </MNT_RESPONSE>
        EOXML

        ::Nokogiri::XML(xml, nil, 'UTF-8')
      end
create_new_node(name, content, xml) click to toggle source
# File lib/payanyway/request/check.rb, line 111
def create_new_node(name, content, xml)
  Nokogiri::XML::Node.new(name, xml).tap { |node| node.content = content }
end
result_code_of(amount, state) click to toggle source
# File lib/payanyway/request/check.rb, line 91
def result_code_of(amount, state)
  if @pretty_params[:amount].blank? && amount.present?
    SPECIAL_CODE
  else
    RESPONSE_CODE[state.to_sym]
  end
end
signature_node(xml) click to toggle source
# File lib/payanyway/request/check.rb, line 84
def signature_node(xml)
  create_new_node('MNT_SIGNATURE',
    Payanyway::Helpers::SignatureGenerate.for_check_response(Hash.from_xml(xml.to_s)['MNT_RESPONSE']),
    xml
  )
end
validate_status!(state) click to toggle source
# File lib/payanyway/request/check.rb, line 65
def validate_status!(state)
  return if RESPONSE_CODE.keys.include?(state.to_s.to_sym)
  raise Payanyway::Response::InvalidState.new("PAYANYWAY: Invalid response state! State must be eq #{ RESPONSE_CODE.keys }")
end