コード例 #1
0
ファイル: CheckoutAbstract.php プロジェクト: kewaunited/xcart
 /**
  * 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)));
     }
 }
コード例 #2
0
ファイル: Checkout.php プロジェクト: kingsj/core
 /**
  * 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)));
     }
 }
コード例 #3
0
ファイル: Cart.php プロジェクト: kewaunited/xcart
 /**
  * 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;
 }
コード例 #4
0
ファイル: AMZ.php プロジェクト: kirkbauer2/kirkxc
 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();
 }