Module: Effective::Providers::Moneris

Extended by:
ActiveSupport::Concern
Included in:
OrdersController
Defined in:
app/controllers/effective/providers/moneris.rb

Instance Method Summary collapse

Instance Method Details

#moneris_postbackObject



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/controllers/effective/providers/moneris.rb', line 14

def moneris_postback
  @order ||= Effective::Order.find(params[:response_order_id])

  (EffectiveOrders.authorized?(self, :update, @order) rescue false)

  # Delete the Purchased and Declined Redirect URLs
  purchased_redirect_url = params.delete(:rvar_purchased_redirect_url)
  declined_redirect_url = params.delete(:rvar_declined_redirect_url)

  if @order.purchased?  # Fallback to a success condition of the Order is already purchased
    order_purchased(details: params, provider: 'moneris', card: params[:card], redirect_url: purchased_redirect_url)
    return
  end

  if params[:result].to_s == '1' && params[:transactionKey].present?
    verify_params = parse_moneris_response(send_moneris_verify_request(params[:transactionKey])) || {}

    response_code = verify_params[:response_code].to_i # Sometimes moneris sends us the string 'null'

    if response_code > 0 && response_code < 50  # Less than 50 means a successful validation
      order_purchased(details: params.merge(verify_params), provider: 'moneris', card: params[:card], redirect_url: purchased_redirect_url)
    else
      order_declined(details: params.merge(verify_params), provider: 'moneris', card: params[:card], redirect_url: declined_redirect_url)
    end
  else
    order_declined(details: params, provider: 'moneris', card: params[:card], redirect_url: declined_redirect_url)
  end
end