class OffsitePayments::Integrations::Przelewy24::Notification

Public Class Methods

new(post, options = {}) click to toggle source
Calls superclass method
# File lib/offsite_payments/integrations/przelewy24.rb, line 103
def initialize(post, options = {})
  raise ArgumentError if post.blank?
  super
end
recognizes?(params) click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 99
def self.recognizes?(params)
  params.key?('p24_session_id') && params.key?('p24_amount')
end

Public Instance Methods

account() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 112
def account
  params['p24_merchant_id']
end
acknowledge(_authcode = nil) click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 148
def acknowledge(_authcode = nil)
  payload = {
    p24_merchant_id: params['p24_merchant_id'],
    p24_pos_id: params['p24_pos_id'],
    p24_session_id: params['p24_session_id'],
    p24_amount: params['p24_amount'],
    p24_currency: params['p24_currency'],
    p24_order_id: params['p24_order_id']
  }

  payload[:p24_sign] = verify_sign(payload)

  response = ssl_post(Przelewy24.verification_url, parameterize(payload),
    'User-Agent' => 'Active Merchant -- http://activemerchant.org'
  )
  parsed_response = parse_response(response)
  parsed_response.error == '0'
end
amount() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 120
def amount
  params['p24_amount']
end
complete?() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 108
def complete?
  !params['error'].present?
end
currency() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 132
def currency
  params['p24_currency']
end
item_id() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 124
def item_id
  params['p24_session_id']
end
method() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 136
def method
  params['p24_method']
end
pos_id() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 116
def pos_id
  params['p24_pos_id']
end
security_key() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 144
def security_key
  params['p24_sign']
end
statement() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 140
def statement
  params['p24_statement']
end
transaction_id() click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 128
def transaction_id
  params['p24_order_id']
end

Private Instance Methods

parameterize(params) click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 169
def parameterize(params)
  params.reject { |k, v| v.blank? }.keys.sort.collect { |key| "#{key}=#{CGI.escape(params[key].to_s)}" }.join("&")
end
parse_response(response) click to toggle source
P24 Error codes

err00: Incorrect call err01: Authorization answer confirmation was not received. err02: Authorization answer was not received. err03: This query has been already processed. err04: Authorization query incomplete or incorrect. err05: Store configuration cannot be read. err06: Saving of authorization query failed. err07: Another payment is being concluded. err08: Undetermined store connection status. err09: Permitted corrections amount has been exceeded. err10: Incorrect transaction value! err49: To high transaction risk factor. err51: Incorrect reference method. err52: Incorrect feedback on session information! err53: Transaction error !: err54: Incorrect transaction value! err55: Incorrect transaction id! err56: Incorrect card err57: Incompatibility of TEST flag err58: Incorrect sequence number ! err101: Incorrect call err102: Allowed transaction time has expired err103: Incorrect transfer value. err104: Transaction awaits confirmation. err105: Transaction finished after allowed time. err106: Transaction result verification error err161: Transaction request terminated by user err162: Transaction request terminated by user

# File lib/offsite_payments/integrations/przelewy24.rb, line 201
def parse_response(response)
  ret = OpenStruct.new
  response.split('&').each do |arg|
    line = arg.split('=')
    ret[line[0].strip] = line[1].force_encoding('ISO-8859-2').encode!('UTF-8')
  end
  ret
end
verify_sign(payload) click to toggle source
# File lib/offsite_payments/integrations/przelewy24.rb, line 210
def verify_sign(payload)
  Digest::MD5.hexdigest([
    payload[:p24_session_id],
    payload[:p24_order_id],
    Przelewy24.make_amount(payload[:p24_amount]),
    payload[:p24_currency],
    ENV.fetch('PRZELEWY24_CRC_KEY')
  ].join('|'))
end