/**
     * @param EntityEnclosingRequest|EntityEnclosingRequest[]
     * @return array|\Guzzle\Http\Message\Response
     * @throws \Exception
     * @throws \Guzzle\Common\Exception\ExceptionCollection
     * @throws mixed
     */
    public function send($requests)
    {
        if ( is_array($requests) && count($requests) > 1 )
        {
            \eZDebug::writeError( 'Should not receive multiple guzzle requests', __CLASS__.'::'.__METHOD__ );
            return parent::send($requests);
        }

        /* @var $request EntityEnclosingRequest */
        $request = is_array($requests) ? $requests[0] : $requests;

        if ( $request->getMethod() !== 'POST' )
        {
            \eZDebug::writeNotice( 'Not POST method used ('.$request->getMethod().'). Falling back to default Guzzle behaviour' );
            return parent::send($requests);
        }

        return GuzzleCurlHelper::sendRequest( $request );

    }
    /**
     * call the WS and log if an error occured
     *
     * @param string $commandName
     * @param array $params
     * @throws Exception
     * @throws ezcLogWriterException
     *
     * @return string
     */
    public static function call( $commandName, $params )
    {
        // $params = DbTool::escapeRecursiveArray($params);
        $result = '';
        // workaround for autologin - there is no such method in UUMP WS.
        if ( $commandName == 'autologin' ) {
            return null;
        }

        try
        {
            self::instance()->logger->log( str_pad( '', 77, '*' ), ezcLog::INFO );

            if ( in_array($commandName, array("login", "create") ) )
            {
                $commandName .= "?fullProfile=true";
            }

            $request = self::instance()->client->post( $commandName, array(
                'Content-Type' => 'application/json',
                'Accept'       => 'application/json'
            ), json_encode( $params ) );

            /* @var \Guzzle\Http\Message\Response $response */
            $response = \Merck\Service\GuzzleCurlHelper::sendRequest( $request );
            $result = $response->json();

            // Hide password for logging purposes
            if ( array_key_exists( 'password', $params['data'] ) )
            {
                $params['data']['password'] = str_pad( '', strlen( $params['data']['password'] ), '*' );
            }
            elseif ( array_key_exists( 'password', $params['data']['profile'] ) )
            {
                $params['data']['profile']['password'] = str_pad( '', strlen( $params['data']['profile']['password'] ), '*' );
            }
            $request->setBody( json_encode( $params ) );

            self::instance()->logger->log( "[Guzzle - Request] " . $request, ezcLog::INFO );
            self::instance()->logger->log( "[Guzzle - Response] " . $response, ezcLog::INFO );

            // log error (header != 200 OK AND login fail)
            if ( $response->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';
                }
            }
            self::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']}";
            self::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();
            self::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();
            self::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();
            self::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();
            self::instance()->logger->log( $logMessage, ezcLog::ERROR );
            self::logError($commandName, $params, $result, $logMessage);
        }
        catch ( Exception $e )
        {
            $logMessage = "[Exception] #" . $e->getCode() . ':' . $e->getMessage();
            self::instance()->logger->log( $logMessage, ezcLog::ERROR );
            self::logError($commandName, $params, $result, $logMessage);
        }

        return null;
    }
    /**
     * call the WS and log if an error occured
     *
     * @param string $commandName
     * @param array $params
     * @throws Exception
     * @throws ezcLogWriterException
     *
     * @return string
     */
    public static function call( $commandName, $params )
    {
        try
        {
            self::instance()->logger->log( str_pad( '', 77, '*' ), ezcLog::INFO );

            $request = self::instance()->client->post( $commandName, array(
                'Content-Type' => 'application/json',
                'Accept'       => 'application/json'
            ), json_encode( $params ) );

            /* @var \Guzzle\Http\Message\Response $response */
            $response = \Merck\Service\GuzzleCurlHelper::sendRequest( $request );

            $result = $response->json();

            $request->setBody( json_encode( $params ) );

            self::instance()->logger->log( "[Guzzle - Request] " . $request, ezcLog::INFO );
            self::instance()->logger->log( "[Guzzle - Response] " . $response, ezcLog::INFO );

            // log error (header != 200 OK AND login fail)
            if ( $response->isError() )
            {
                $logMessage = !empty($result['Msg']) ? $result['Msg'] : "Unkwown";
                $logLevel = ezcLog::WARNING;
            }
            else
            {
                $logLevel = ezcLog::INFO;
                $logMessage = $commandName . ' successful';
            }
            self::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']}";
            self::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']}",
                    'profile'   => array()
                )
            );
        }
        catch ( Guzzle\Common\Exception\BadMethodCallException $e )
        {
            $logMessage = '[Guzzle] BadMethodCallException #' . $e->getCode() . ':' . $e->getMessage();
            self::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();
            self::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();
            self::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();
            self::instance()->logger->log( $logMessage, ezcLog::ERROR );
            self::logError($commandName, $params, $result, $logMessage);
        }
        catch ( Exception $e )
        {
            $logMessage = "[Exception] #" . $e->getCode() . ':' . $e->getMessage();
            self::instance()->logger->log( $logMessage, ezcLog::ERROR );
            self::logError($commandName, $params, $result, $logMessage);
        }

        return null;
    }
Пример #4
0
    /**
     * @param string $action
     * @param array $data
     * @return Response
     */
    protected function sendRequest($action, $data = null)
    {
        try
        {
            $headers = array(
                'Content-Type' => 'application/json'
            );
            $proxyUrl = false;
            
            if(\SolrSafeOperatorHelper::featureIsActive('UUMP'))
            {
                $proxyUrl = \SolrSafeOperatorHelper::feature('UUMP', 'WSProxy');
                $headers['Accept'] = 'application/json';
            }
            
            $esbRequest = new Request();
            $esbRequest->setDataArray($data);
            \eZLog::write(print_r($esbRequest->getBody('json'),true), 'esb_uump.log');
            $request = $this->post($action, $headers, $esbRequest->getBody('json'));

            if ($proxyUrl)
            {
                $request->getCurlOptions()->set(CURLOPT_PROXY, $proxyUrl);
            }
            $response = GuzzleCurlHelper::sendRequest( $request );

            \eZLog::write($response->getBody(true), 'esb_uump.log');
            if ($response->getStatusCode() == Response::STATUS_NO_CONTENT)
            {
                return new Response(array(
                    'data'      => array(
                    'errorCode' => ResponseError::ERROR_INVALID_USER,
                    'msg'       => 'Invalid user'
                    )
                ));
            }

            return new Response($response->json());
        }
        catch(\Exception $e)
        {
            return new Response(array(
                'data' => array(
                    'errorCode' => ResponseError::ERROR_REQUEST_EXECUTION,
                    'msg'       => $e->getMessage()
                )
            ));
        }
    }