/**
  * Returns an singleton instance of this class
  *
  * @param object $config
  * @param object $args
  * @return
  */
 public static function getInstance($config, $args)
 {
     if (self::$instance == null) {
         self::$instance = new PaypalTransactionsManager($config, $args);
     }
     return self::$instance;
 }
 public function service()
 {
     $token = urlencode($_SESSION['TOKEN']);
     $ordersManager = OrdersManager::getInstance($this->config, $this->args);
     $orderBy3rdPartyToken = $ordersManager->getOrderBy3rdPartyToken($token);
     if (!isset($orderBy3rdPartyToken)) {
         $_SESSION['error_message'] = $this->getPhrase(595);
         $this->redirect('orders');
     }
     $paypalTransactionsManager = PaypalTransactionsManager::getInstance($this->config, $this->args);
     $orderId = $orderBy3rdPartyToken->getId();
     $res = $this->getPaypalShippingDetails();
     if ($res === true) {
         $res = $this->confirmOrder();
         if ($res === true) {
             $_SESSION['success_message'] = sprintf($this->getPhrase(593), $orderId);
             $ordersManager->updateNumericField($orderId, '3rd_party_payment_received', 1);
             $paypalTransactionsManager->setOrderCompleted($orderId);
         } else {
             $paypalTransactionsManager->setOrderPaymentError($orderId, $res);
             $_SESSION['error_message'] = $res;
         }
     } else {
         $paypalTransactionsManager->setOrderPaymentError($orderId, $res);
         $_SESSION['error_message'] = $res;
     }
     $this->redirect('orders');
 }