/** * @param Order $order * @param PaymentOperation $operation * @param mixed $transactionType */ protected function processPaymentOperation($order, $operation, $transactionType) { $this->pixie->dispatcher->dispatch(Events::PAYMENT_OPERATION_SUCCEEDED, new PaymentOperationSucceededEvent($order->payment, $operation, $this->request)); if ($transactionType == PaymentOperation::TR_TYPE_IMMEDIATE_PAYMENT) { if ($order->payment->isPayable()) { $order->payment->status = PaymentModel::STATUS_PAYED; $order->payment->save(); $this->pixie->dispatcher->dispatch(Events::PAYMENT_PAYED, new PaymentPayedEvent($order->payment)); } if ($order->isPayable()) { $order->status = Order::STATUS_PROCESSING; $order->save(); $this->pixie->dispatcher->dispatch(Events::ORDER_STATUS_CHANGED, new OrderStatusChangedEvent($order, $order->status)); $this->pixie->dispatcher->dispatch(Events::ORDER_PAYED, new OrderPayedEvent($order, $order->payment)); } $this->redirect('/checkout/order/' . $order->uid); } else { if ($transactionType == PaymentOperation::TR_TYPE_REFUND) { if ($order->payment->isRefundable()) { $order->payment->status = PaymentModel::STATUS_REFUNDED; $order->payment->save(); $this->pixie->dispatcher->dispatch(Events::PAYMENT_REFUNDED, new PaymentRefundedEvent($order->payment)); } if ($order->isRefundable()) { $order->status = Order::STATUS_REFUNDED; $order->save(); $this->pixie->dispatcher->dispatch(Events::ORDER_STATUS_CHANGED, new OrderStatusChangedEvent($order, $order->status)); $this->pixie->dispatcher->dispatch(Events::ORDER_REFUNDED, new OrderRefundedEvent($order, $order->payment)); } $this->redirect('/account/orders/' . $order->uid); } } }