/** * Return from payment gateway * * :TODO: to revise * :FIXME: decompose * * @return void */ protected function doActionReturn() { // some of gateways can't accept return url on run-time and // use the one set in merchant account, so we can't pass // 'order_id' in run-time, instead pass the order id parameter name $orderId = \XLite\Core\Request::getInstance()->order_id; /** @var \XLite\Model\Order $cart */ $cart = \XLite\Core\Database::getRepo('XLite\\Model\\Cart')->find($orderId) ?: \XLite\Core\Database::getRepo('XLite\\Model\\Order')->find($orderId); if ($cart) { \XLite\Model\Cart::setObject($cart); } if (!$cart) { // Cart not found unset(\XLite\Core\Session::getInstance()->order_id); \XLite\Core\TopMessage::addError('Order not found'); $this->setReturnURL($this->buildURL('cart')); } elseif ($cart->getOpenTotal() > 0) { // Order still not payed $this->assignTransactionMessage(); $this->setReturnURL($this->buildURL('checkout')); } else { // Order payed or pending if ($cart instanceof \XLite\Model\Cart) { $cart->tryClose(); \XLite\Core\Database::getEM()->flush(); } \XLite\Core\Session::getInstance()->last_order_id = $orderId; \XLite\Core\TopMessage::getInstance()->clearTopMessages(); $this->setReturnURL($this->buildURL($this->getStatusTarget($cart->getPaymentStatusCode()), '', $cart->getOrderNumber() ? array('order_number' => $cart->getOrderNumber()) : array('order_id' => $orderId))); } }
/** * Return from payment gateway * * :TODO: to revise * :FIXME: decompose * * @return void */ protected function doActionReturn() { // some of gateways can't accept return url on run-time and // use the one set in merchant account, so we can't pass // 'order_id' in run-time, instead pass the order id parameter name $orderId = \XLite\Core\Request::getInstance()->order_id; $cart = \XLite\Core\Database::getRepo('XLite\\Model\\Order')->find($orderId); if ($cart) { \XLite\Model\Cart::setObject($cart); } if (!$cart) { \XLite\Core\Session::getInstance()->order_id = null; \XLite\Core\TopMessage::addError('Order not found'); $this->setReturnURL($this->buildURL('cart')); } elseif (0 < $cart->getOpenTotal() && !in_array($cart->getStatus(), array(\XLite\Model\Order::STATUS_FAILED, \XLite\Model\Order::STATUS_DECLINED))) { \XLite\Core\TopMessage::addWarning('Payment was not finished', array('url' => $this->buildURL('cart', 'add_order', array('order_id' => $cart->getOrderId())))); $this->setReturnURL($this->buildURL(\XLite\Core\Auth::getInstance()->isLogged() ? 'order_list' : '')); } else { if ($cart->isPayed()) { $status = \XLite\Model\Order::STATUS_PROCESSED; $hasIncompletePayment = 0 < $cart->getOpenTotal(); $hasAuthorizedPayment = false; foreach ($cart->getPaymentTransactions() as $t) { $hasAuthorizedPayment = $hasAuthorizedPayment || $t->isAuthorized(); } if ($hasIncompletePayment) { $status = \XLite\Model\Order::STATUS_QUEUED; } elseif ($hasAuthorizedPayment) { $status = \XLite\Model\Order::STATUS_AUTHORIZED; } } else { $status = \XLite\Model\Order::STATUS_QUEUED; $transactions = $cart->getPaymentTransactions(); if (!empty($transactions)) { $lastTransaction = $transactions[count($transactions) - 1]; if ($lastTransaction->isFailed()) { $status = \XLite\Model\Order::STATUS_FAILED; } } } $cart->setStatus($status); $this->processSucceed(); \XLite\Core\TopMessage::getInstance()->clearTopMessages(); $this->setReturnURL($this->buildURL(\XLite\Model\Order::STATUS_FAILED == $status ? 'checkoutFailed' : 'checkoutSuccess', '', array('order_id' => $orderId))); } }
/** * Try close * * @param \XLite\Controller\Customer\Checkout $controller Controller OPTIONAL * * @return boolean */ public function tryClose(\XLite\Controller\Customer\Checkout $controller = null) { $result = false; if (!$this->isOpen()) { if (!$controller) { \XLite\Model\Cart::setObject($this); if ($this instanceof \XLite\Model\Cart) { $this->assignOrderNumber(); } } $paymentStatus = $this->getCalculatedPaymentStatus(true); $this->setPaymentStatus($paymentStatus); if (!$controller) { $controller = new \XLite\Controller\Customer\Checkout(); } $controller->processSucceed(); $result = true; } return $result; }
public static function func_amazon_pa_save_order_extra($orderid, $key, $val) { global $sql_tbl; $cart = \XLite\Core\Database::getRepo('XLite\\Model\\Order')->find($orderid); if ($cart) { \XLite\Model\Cart::setObject($cart); } else { self::func_amazon_pa_debug("Cant find order {$orderid} to save extra data"); return; } $cart->setDetail($key, $val); \XLite\Core\Database::getEM()->flush(); }