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!在订单上。要做到这一点。您需要确保您的付款处于“已完成”状态。