class OffsitePayments::Integrations::Przelewy24::Notification
Public Class Methods
# File lib/offsite_payments/integrations/przelewy24.rb, line 103 def initialize(post, options = {}) raise ArgumentError if post.blank? super end
# 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
# File lib/offsite_payments/integrations/przelewy24.rb, line 112 def account params['p24_merchant_id'] end
# 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
# File lib/offsite_payments/integrations/przelewy24.rb, line 120 def amount params['p24_amount'] end
# File lib/offsite_payments/integrations/przelewy24.rb, line 108 def complete? !params['error'].present? end
# File lib/offsite_payments/integrations/przelewy24.rb, line 132 def currency params['p24_currency'] end
# File lib/offsite_payments/integrations/przelewy24.rb, line 124 def item_id params['p24_session_id'] end
# File lib/offsite_payments/integrations/przelewy24.rb, line 136 def method params['p24_method'] end
# File lib/offsite_payments/integrations/przelewy24.rb, line 116 def pos_id params['p24_pos_id'] end
# File lib/offsite_payments/integrations/przelewy24.rb, line 144 def security_key params['p24_sign'] end
# File lib/offsite_payments/integrations/przelewy24.rb, line 140 def statement params['p24_statement'] end
# File lib/offsite_payments/integrations/przelewy24.rb, line 128 def transaction_id params['p24_order_id'] end
Private Instance Methods
# 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
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
# 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