/** * @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; }
/** * @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() ) )); } }