Rails Spree 无法从付款过渡到完成
Rails Spree Cannot transition from payment to complete
我正在将自定义支付方式集成到我的 rails 应用程序中。但我不能这样做,我的订单从付款状态变为完成状态。我确保在订单中注册的付款处于完成状态,所以我无法弄清楚为什么状态机告诉我“未找到付款”
这是我的代码。
def perform_payment payment_id, state
Rails.logger.info("PERFORM PAYMENT => payment_id: #{payment_id}, state: #{state}")
payment = Spree::Payment.find payment_id
return unless payment
order = payment.order
begin
if state == "accepted"
payment.started_processing!
payment.capture!
Rails.logger.info("PERFORM PAYMENT => order_id:#{order.id}, current_order_state: #{order.state}")
Rails.logger.info("PERFORM PAYMENT => order_payments:#{order.payments.size}")
order.next! unless order.state == "completed"
elsif state == "rejected"
payment.started_processing!
payment.failure!
end
rescue Exception => e
Rails.logger.error("Error al procesar pago orden #{order.number}: E -> #{e.message}")
return false
end
end
这是我遇到的错误
StateMachines::InvalidTransition(无法通过 :next from :payment 转换状态(原因:未找到付款))
其实是@Alex提到的。只需要 .next!在订单上。要做到这一点。您需要确保您的付款处于“已完成”状态。
我正在将自定义支付方式集成到我的 rails 应用程序中。但我不能这样做,我的订单从付款状态变为完成状态。我确保在订单中注册的付款处于完成状态,所以我无法弄清楚为什么状态机告诉我“未找到付款”
这是我的代码。
def perform_payment payment_id, state
Rails.logger.info("PERFORM PAYMENT => payment_id: #{payment_id}, state: #{state}")
payment = Spree::Payment.find payment_id
return unless payment
order = payment.order
begin
if state == "accepted"
payment.started_processing!
payment.capture!
Rails.logger.info("PERFORM PAYMENT => order_id:#{order.id}, current_order_state: #{order.state}")
Rails.logger.info("PERFORM PAYMENT => order_payments:#{order.payments.size}")
order.next! unless order.state == "completed"
elsif state == "rejected"
payment.started_processing!
payment.failure!
end
rescue Exception => e
Rails.logger.error("Error al procesar pago orden #{order.number}: E -> #{e.message}")
return false
end
end
这是我遇到的错误
StateMachines::InvalidTransition(无法通过 :next from :payment 转换状态(原因:未找到付款))
其实是@Alex提到的。只需要 .next!在订单上。要做到这一点。您需要确保您的付款处于“已完成”状态。