/** * Confirm the payment of an order * * @param \Magento\Sales\Model\Order $order * @param \WirecardCEE_Stdlib_Return_ReturnAbstract $return * @param bool $fraudDetected * * @return Order * * @throws \Magento\Framework\Exception\LocalizedException */ public function confirmOrder($order, $return, $fraudDetected) { /** @var \Magento\Sales\Model\Order\Payment $payment */ $payment = $order->getPayment(); /** @var \Wirecard\CheckoutPage\Model\AbstractPayment $paymentInstance */ $paymentInstance = $payment->getMethodInstance(); $additionalInformation = array(); foreach ($return->getReturned() as $fieldName => $fieldValue) { $additionalInformation[htmlentities($fieldName)] = htmlentities($fieldValue); } $payment->setAdditionalInformation($additionalInformation); if ($fraudDetected) { $order->setStatus(\Magento\Sales\Model\Order::STATUS_FRAUD); $message = $this->_dataHelper->__('fraud attemmpt detected, cart has been modified during checkout!'); $this->_logger->debug(__METHOD__ . ':' . $message); $order->addStatusHistoryComment($message); } $doCapture = false; if (!$this->isOrderProcessed($order)) { if ($return->getPaymentState() == \WirecardCEE_QPay_ReturnFactory::STATE_PENDING) { /** @var \WirecardCEE_QPay_Return_Pending $return */ $order->setState(\Magento\Sales\Model\Order::STATE_PENDING_PAYMENT); $message = $this->_dataHelper->__('The payment authorization is pending.'); } else { /** @var \WirecardCEE_QPay_Return_Success $return */ $order->setState(\Magento\Sales\Model\Order::STATE_PROCESSING); $order->setStatus(\Magento\Sales\Model\Order::STATE_PROCESSING); $message = $this->_dataHelper->__('The payment has been successfully completed.'); // invoice payment if ($order->canInvoice()) { $invoice = $order->prepareInvoice(); $invoice->register(); /* capture invoice if toolkit is not availble */ if (!$this->_dataHelper->isBackendAvailable()) { $doCapture = true; } else { $hasBackedOps = false; $orderDetails = $paymentInstance->getOrderDetails($payment->getAdditionalInformation('orderNumber')); foreach ($orderDetails->getOrder()->getPayments() as $wdPayment) { /** @var \WirecardCEE_QPay_Response_Toolkit_Order_Payment $wdPayment */ $this->_logger->debug(__METHOD__ . ':payment-state:' . $wdPayment->getState() . ' allowed operations:' . implode(',', $wdPayment->getOperationsAllowed())); if (count($wdPayment->getOperationsAllowed())) { $hasBackedOps = true; break; } } if (count($orderDetails->getOrder()->getOperationsAllowed())) { $this->_logger->debug(__METHOD__ . ':order allowed operations: ' . implode(',', $orderDetails->getOrder()->getOperationsAllowed())); $hasBackedOps = true; } /* no backend ops allowed anymore, assume final state of payment, capture invoice */ if (!$hasBackedOps) { $doCapture = true; } } if ($doCapture && !$fraudDetected) { $invoice->capture(); } $order->addRelatedObject($invoice); } $this->_orderSender->send($order); } $type = $doCapture ? Transaction::TYPE_CAPTURE : Transaction::TYPE_AUTH; $this->saveTransaction($type, $message, $order, $return); } $order->save(); return $order; }
/** * Confirm the payment of an order * * @param Mage_Sales_Model_Order $order * @param WirecardCEE_Stdlib_Return_ReturnAbstract $return */ protected function _confirmOrder($order, $return) { /** @var Wirecard_CheckoutSeamless_Helper_Data $helper */ $helper = Mage::helper('wirecard_checkoutseamless'); if (!$this->_succeeded($order)) { if ($return->getPaymentState() == WirecardCEE_QMore_ReturnFactory::STATE_PENDING) { $order->setState(Mage_Sales_Model_Order::STATE_PENDING_PAYMENT, true, $helper->__('The payment authorization is pending.'))->save(); } else { $order->setState(Mage_Sales_Model_Order::STATE_PROCESSING, true, $helper->__('The amount has been authorized and captured by Wirecard Checkout Seamless.'))->save(); // invoice payment if ($order->canInvoice()) { $invoice = $order->prepareInvoice(); $invoice->register()->capture(); Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder())->save(); } // send new order email to customer $order->sendNewOrderEmail(); } } $payment = $order->getPayment(); $additionalInformation = array(); foreach ($return->getReturned() as $fieldName => $fieldValue) { $additionalInformation[htmlentities($fieldName)] = htmlentities($fieldValue); } // need to remember whether confirm request was processed // check this within returnAction // could be if confirm request has bee blocked (firewall) $additionalInformation['confirmProcessed'] = true; $payment->setAdditionalInformation($additionalInformation); $payment->setAdditionalData(serialize($additionalInformation)); $payment->save(); }