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