/**
  * singleton pattern
  *
  * @return StoreToken
  */
 public static function getInstance()
 {
     if (!isset(self::$instance) || !self::$instance instanceof StoreToken) {
         self::$instance = new StoreToken();
     }
     return self::$instance;
 }
 /**
  * run get GetAuthentificationToken and call setSoapHeader()
  *
  * @throws Exception
  */
 private function doAuthentification()
 {
     /*
      * request object
      */
     $oPlentySoapRequest_GetAuthentificationToken = new PlentySoapRequest_GetAuthentificationToken();
     $oPlentySoapRequest_GetAuthentificationToken->Username = SOAP_USER;
     $oPlentySoapRequest_GetAuthentificationToken->Userpass = SOAP_PASSWORD;
     /*
      * response object
      */
     $oPlentySoapResponse_GetAuthentificationToken = new PlentySoapResponse_GetAuthentificationToken();
     try {
         $oPlentySoap = new PlentySoap(WSDL_URL);
         $oPlentySoapResponse_GetAuthentificationToken = $oPlentySoap->GetAuthentificationToken($oPlentySoapRequest_GetAuthentificationToken);
         if ($oPlentySoapResponse_GetAuthentificationToken->Success == true) {
             $userId = $oPlentySoapResponse_GetAuthentificationToken->UserID;
             $token = $oPlentySoapResponse_GetAuthentificationToken->Token;
             /*
              * save token and userId
              */
             StoreToken::getInstance()->saveToken(SOAP_USER, $token, $userId);
             $this->setSoapHeader($userId, $token);
             return;
         } else {
             $messages = '';
             // error messages
             if (is_array($oPlentySoapResponse_GetAuthentificationToken->ResponseMessages->item)) {
                 foreach ($oPlentySoapResponse_GetAuthentificationToken->ResponseMessages->item as $Message) {
                     if (is_array($Message->ErrorMessages->item)) {
                         foreach ($Message->ErrorMessages->item as $ErrorMessage) {
                             $messages .= $ErrorMessage->Value . ': ' . $ErrorMessage->Key;
                         }
                     }
                 }
             }
             $this->getLogger()->crit(__FUNCTION__ . ': error getting token: ' . $messages);
             throw new Exception('error getting token');
         }
     } catch (Exception $e) {
         /*
          * catch exception only for logging, than throw a new one
          */
         $this->getLogger()->crit(__FUNCTION__ . ': exception getting token: ' . $e->getMessage());
         throw $e;
     }
 }