/** * @param Order $order * @param string $status * @param string $state * @return void */ protected function setOrderStateAndStatus(Order $order, $status, $state) { if (!$status) { $status = $order->getConfig()->getStateDefaultStatus($state); } $order->setState($state)->setStatus($status); }
/** * Check order status before save * * @param Order $order * @return $this * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function check(Order $order) { if (!$order->getId()) { return $order; } if (!$order->isCanceled() && !$order->canUnhold() && !$order->canInvoice() && !$order->canShip()) { if (0 == $order->getBaseGrandTotal() || $order->canCreditmemo()) { if ($order->getState() !== Order::STATE_COMPLETE) { $order->setState(Order::STATE_COMPLETE)->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_COMPLETE)); } } elseif (floatval($order->getTotalRefunded()) || !$order->getTotalRefunded() && $order->hasForcedCanCreditmemo()) { if ($order->getState() !== Order::STATE_CLOSED) { $order->setState(Order::STATE_CLOSED)->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_CLOSED)); } } } if ($order->getState() == Order::STATE_NEW && $order->getIsInProcess()) { $order->setState(Order::STATE_PROCESSING)->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_PROCESSING)); } return $this; }
/** * @param Order $order */ public function validateCoinGateCallback(Order $order) { try { if (!$order || !$order->getIncrementId()) { $request_order_id = filter_input(INPUT_POST, 'order_id') ? filter_input(INPUT_POST, 'order_id') : filter_input(INPUT_GET, 'order_id'); throw new \Exception('Order #' . $request_order_id . ' does not exists'); } $payment = $order->getPayment(); $get_token = filter_input(INPUT_GET, 'token'); $token1 = $get_token ? $get_token : ''; $token2 = $payment->getAdditionalInformation('coingate_order_token'); if ($token2 == '' || $token1 != $token2) { throw new \Exception('Tokens do match.'); } $request_id = filter_input(INPUT_POST, 'id') ? filter_input(INPUT_POST, 'id') : filter_input(INPUT_GET, 'id'); $this->coingate->getOrder($request_id); if (!$this->coingate->success) { throw new \Exception('CoinGate Order #' . $request_id . ' does not exist'); } if (!is_array($this->coingate->response)) { throw new \Exception('Something wrong with callback'); } if ($this->coingate->response['status'] == 'paid') { $order->setState(Order::STATE_PROCESSING, TRUE)->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_PROCESSING))->save(); } elseif (in_array($this->coingate->response['status'], array('invalid', 'expired', 'canceled'))) { $order->setState(Order::STATE_CANCELED, TRUE)->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_CANCELED))->save(); } } catch (\Exception $e) { exit('Error occurred: ' . $e); } }
/** * @param Order $order */ public function validateKhipuCallback(Order $order) { try { if (!$order || !$order->getIncrementId()) { throw new \Exception('Order #' . $_REQUEST['order_id'] . ' does not exists'); } $payment = $order->getPayment(); $notificationToken = isset($_POST['notification_token']) ? $_POST['notification_token'] : ''; if ($notificationToken == '') { throw new \Exception('Invalid notification token.'); } $configuration = new \Khipu\Configuration(); $configuration->setSecret($this->getConfigData('merchant_secret')); $configuration->setReceiverId($this->getConfigData('merchant_id')); $configuration->setPlatform('magento2-khipu', Payment::KHIPU_MAGENTO_VERSION); $client = new \Khipu\ApiClient($configuration); $payments = new \Khipu\Client\PaymentsApi($client); try { $paymentResponse = $payments->paymentsGet($notificationToken); } catch (\Khipu\ApiException $exception) { throw new \Exception(print_r($exception->getResponseObject(), TRUE)); } if ($paymentResponse->getReceiverId() != $this->getConfigData('merchant_id')) { throw new \Exception('Invalid receiver id'); } if ($paymentResponse->getTransactionId() != $payment->getAdditionalInformation('khipu_order_token')) { throw new \Exception('Invalid transaction id'); } if ($paymentResponse->getStatus() != 'done') { throw new \Exception('Payment not done'); } if ($paymentResponse->getAmount() != number_format($order->getGrandTotal(), $this->getDecimalPlaces($order->getOrderCurrencyCode()), '.', '')) { throw new \Exception('Amount mismatch'); } if ($paymentResponse->getCurrency() != $order->getOrderCurrencyCode()) { throw new \Exception('Currency mismatch'); } $order->setState(Order::STATE_PROCESSING, TRUE)->setStatus($order->getConfig()->getStateDefaultStatus(Order::STATE_PROCESSING))->save(); } catch (\Exception $e) { exit('Error occurred: ' . $e); } }
/** * Capture order's payment using AIM. * * @param \Magento\Sales\Model\Order $order * @return void */ protected function _captureOrder(\Magento\Sales\Model\Order $order) { $payment = $order->getPayment(); if ($payment->getAdditionalInformation('payment_type') == self::ACTION_AUTHORIZE_CAPTURE) { try { $payment->setTransactionId(null)->setParentTransactionId($this->getResponse()->getXTransId())->capture(null); // set status from config for AUTH_AND_CAPTURE orders. if ($order->getState() == \Magento\Sales\Model\Order::STATE_PROCESSING) { $orderStatus = $this->getConfigData('order_status'); if (!$orderStatus || $order->getIsVirtual()) { $orderStatus = $order->getConfig()->getStateDefaultStatus(\Magento\Sales\Model\Order::STATE_PROCESSING); } if ($orderStatus) { $order->setStatus($orderStatus); } } $order->save(); } catch (\Exception $e) { //if we couldn't capture order, just leave it as NEW order. $this->_logger->logException($e); } } }
/** * Update Order Status and State * @param \Magento\Sales\Model\Order $order * @param string $state */ public function setOrderStatusByState($order, $state) { $order->setState($state)->setStatus($order->getConfig()->getStateDefaultStatus($state)); }