/** * call the WS and log if an error occured * * @param string $commandName * @param array $params * @throws Exception * @throws ezcLogWriterException * @return array */ public static function call($commandName, $params) { // $params = DbTool::escapeRecursiveArray($params); $result = ''; WSHelper::instance()->logger->log(var_export($params, true), ezcLog::INFO ); WSHelper::instance()->logger->log( str_pad('', 77, '*'), ezcLog::INFO); try { $command = WSHelper::instance()->client->getCommand($commandName, $params); $command->prepare(); $httpRequest = $command->getRequest(); $httpRequest->setHeader('Content-Type','application/json'); $httpRequest->setHeader('Pragma', 'no-cache'); $httpRequest->setHeader('Content-cache', 'no-cache'); WSHelper::instance()->logger->log("[Guzzle - Request] ".$httpRequest, ezcLog::INFO); eZDB::instance()->close(); // explicitely close the db connection to let it free in case of timeout MMDB::resetInstance(); $httpResponse = $command->getResponse(); $forceDBOpen = eZDB::instance(false, false, true); // force connection reopen eZDB::setInstance( $forceDBOpen ); WSHelper::instance()->logger->log("[Guzzle - Response] ".$httpResponse, ezcLog::INFO); $result = $httpResponse->json(); // log error (header != 200 OK AND login fail) if ( $httpResponse->isError() || ( (isset($result['Login']) && $result['Login'] == "no" ) )) { $logMessage = !empty($result['Msg']) ? $result['Msg'] : "Unkwown"; $logLevel = ezcLog::WARNING; } else { $logLevel = ezcLog::INFO; if ( isset($result['Login']) && $result['Login'] == "yes") $logMessage = "Login success"; else $logMessage = $commandName . ' successful'; } WSHelper::instance()->logger->log($logMessage, $logLevel ); return $result; } catch( Guzzle\Http\Exception\CurlException $e ) { $curlError = self::getCurlError( $e->getMessage() ); $logMessage = "[Guzzle] CurlException #{$curlError['code']}: {$curlError['message']}"; WSHelper::instance()->logger->log($logMessage, ezcLog::ERROR); self::logError($commandName, $params, $result, $logMessage); return array( 'Data' => array( 'Status' => 'Error', 'ErrorCode' => 10, 'Msg' => "#{$curlError['code']}: {$curlError['message']}" ) ); } catch(Guzzle\Common\Exception\BadMethodCallException $e) { $logMessage = '[Guzzle] BadMethodCallException #'.$e->getCode().':'.$e->getMessage(); WSHelper::instance()->logger->log($logMessage, ezcLog::ERROR); self::logError($commandName, $params, $result, $logMessage); } catch(Guzzle\Common\Exception\InvalidArgumentException $e) { $logMessage = '[Guzzle] InvalidArgumentException #'.$e->getCode().':'.$e->getMessage(); WSHelper::instance()->logger->log($logMessage, ezcLog::ERROR); self::logError($commandName, $params, $result, $logMessage); } catch(Guzzle\Common\Exception\RuntimeException $e) { $logMessage = '[Guzzle] RuntimeException #'.$e->getCode().':'.$e->getMessage(); WSHelper::instance()->logger->log($logMessage, ezcLog::ERROR); self::logError($commandName, $params, $result, $logMessage); } catch(Guzzle\Common\Exception\UnexpectedValueException $e) { $logMessage = '[Guzzle] UnexpectedValueException #'.$e->getCode().':'.$e->getMessage(); WSHelper::instance()->logger->log($logMessage, ezcLog::ERROR); self::logError($commandName, $params, $result, $logMessage); } catch(Exception $e) { $logMessage = "[Exception] #".$e->getCode().':'.$e->getMessage(); WSHelper::instance()->logger->log($logMessage, ezcLog::ERROR); self::logError($commandName, $params, $result, $logMessage); } return null; }