Improved handling of declined echecks
This commit is contained in:
parent
1b400a9398
commit
a6ad630b02
|
@ -3,17 +3,17 @@ class PaypalExpressCallbacksController < Spree::BaseController
|
|||
skip_before_filter :verify_authenticity_token
|
||||
|
||||
def notify
|
||||
retrieve_details #need to retreive details first to ensure ActiveMerchant gets configured correctly.
|
||||
|
||||
@notification = Paypal::Notification.new(request.raw_post)
|
||||
|
||||
# we only care about eChecks (for now?)
|
||||
if @notification.params["payment_type"] == "echeck" && @notification.acknowledge
|
||||
if @notification.params["payment_type"] == "echeck" && @notification.acknowledge && @payment
|
||||
case @notification.params["payment_status"]
|
||||
when "Denied"
|
||||
retrieve_details
|
||||
create_txn PaypalTxn::TxnType::DENIED
|
||||
|
||||
when "Completed"
|
||||
retrieve_details
|
||||
create_txn PaypalTxn::TxnType::CAPTURE
|
||||
end
|
||||
|
||||
|
@ -24,16 +24,25 @@ class PaypalExpressCallbacksController < Spree::BaseController
|
|||
|
||||
private
|
||||
def retrieve_details
|
||||
@order = Order.find_by_number(@notification.params["invoice"])
|
||||
@order = Order.find_by_number(params["invoice"])
|
||||
|
||||
if @order
|
||||
@payment = @order.checkout.payments.find(:first,
|
||||
:conditions => {"transactions.txn_type" => PaypalTxn::TxnType::AUTHORIZE,
|
||||
"transactions.payment_type" => @notification.params["payment_type"]},
|
||||
"transactions.payment_type" => params["payment_type"]},
|
||||
:joins => :transactions)
|
||||
|
||||
@payment.try(:payment_method).try(:provider) #configures ActiveMerchant
|
||||
end
|
||||
end
|
||||
|
||||
def create_txn(txn_type)
|
||||
if @payment.can_finalize?
|
||||
@payment.finalize!
|
||||
if txn_type == PaypalTxn::TxnType::CAPTURE
|
||||
@payment.finalize! if @payment.can_finalize?
|
||||
elsif txn_type == PaypalTxn::TxnType::DENIED
|
||||
#maybe we should do something?
|
||||
end
|
||||
|
||||
PaypalTxn.create(:payment => @payment,
|
||||
:txn_type => txn_type,
|
||||
:amount => @notification.params["payment_gross"].to_f,
|
||||
|
@ -42,7 +51,6 @@ class PaypalExpressCallbacksController < Spree::BaseController
|
|||
:transaction_type => @notification.params["txn_type"],
|
||||
:payment_type => @notification.params["payment_type"])
|
||||
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
|
|
|
@ -32,7 +32,7 @@ class PaypalAccount < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def can_capture?(payment)
|
||||
find_capture(payment).nil?
|
||||
!echeck?(payment) && find_capture(payment).nil?
|
||||
end
|
||||
|
||||
def credit(payment, amount=nil)
|
||||
|
@ -86,7 +86,9 @@ class PaypalAccount < ActiveRecord::Base
|
|||
:order => 'created_at DESC')
|
||||
end
|
||||
|
||||
|
||||
def echeck?(payment)
|
||||
payment.txns.exists?(:payment_type => "echeck")
|
||||
end
|
||||
|
||||
def gateway_error(text)
|
||||
msg = "#{I18n.t('gateway_error')} ... #{text}"
|
||||
|
|
Loading…
Reference in New Issue