function testSerializeError() { $this->assertEquals('[{"message":"this is an error","code":2}]', JsonUtils::serializeError("this is an error", 2)); $this->assertEquals('[{"message":"this is an error","code":null}]', JsonUtils::serializeError("this is an error", null)); $this->assertEquals('[{"message":null,"code":null}]', JsonUtils::serializeError(null, null)); $this->assertEquals('[{"message":"this is a \\"great\\" error","code":2}]', JsonUtils::serializeError('this is a "great" error', 2)); }
public static function handleAPI($instance, $serverKey) { header("Content-type: application/json"); try { if ($instance == null) { throw new MashapeException(EXCEPTION_INSTANCE_NULL, EXCEPTION_SYSTEM_ERROR_CODE); } $requestMethod = isset($_SERVER['REQUEST_METHOD']) ? strtolower($_SERVER['REQUEST_METHOD']) : null; $params; if ($requestMethod == 'post') { $params = array_merge(self::getAllParams($_GET), self::getAllParams($_POST)); } else { if ($requestMethod == 'get') { $params = self::getAllParams($_GET); } else { if ($requestMethod == 'put' || $requestMethod == 'delete') { $params = HttpUtils::parseQueryString(file_get_contents("php://input")); } else { throw new MashapeException(EXCEPTION_NOTSUPPORTED_HTTPMETHOD, EXCEPTION_NOTSUPPORTED_HTTPMETHOD_CODE); } } } $operation = isset($params[OPERATION]) ? $params[OPERATION] : null; unset($params[OPERATION]); // remove the operation parameter if (empty($operation)) { $operation = "call"; } if ($operation != null) { $result; switch (strtolower($operation)) { case "discover": header("Content-type: application/xml"); $discover = new Discover(); $result = $discover->handle($instance, $serverKey, $params, $requestMethod); break; case "call": $call = new Call(); $result = $call->handle($instance, $serverKey, $params, $requestMethod); break; default: throw new MashapeException(EXCEPTION_NOTSUPPORTED_OPERATION, EXCEPTION_NOTSUPPORTED_OPERATION_CODE); } $jsonpCallback = isset($params[CALLBACK]) ? $params[CALLBACK] : null; if (empty($jsonpCallback)) { // Print the output echo $result; } else { if (self::validateCallback($jsonpCallback)) { echo $jsonpCallback . '(' . $result . ')'; } else { throw new MashapeException(EXCEPTION_INVALID_CALLBACK, EXCEPTION_SYSTEM_ERROR_CODE); } } } else { // Operation not supported throw new MashapeException(EXCEPTION_NOTSUPPORTED_OPERATION, EXCEPTION_NOTSUPPORTED_OPERATION_CODE); } } catch (Exception $e) { //If it's an ApizatorException then print the specific code if ($e instanceof MashapeException) { header("Content-type: application/json"); $code = $e->getCode(); switch ($code) { case EXCEPTION_XML_CODE: header("HTTP/1.0 500 Internal Server Error"); break; case EXCEPTION_INVALID_HTTPMETHOD_CODE: header("HTTP/1.0 405 Method Not Allowed"); break; case EXCEPTION_NOTSUPPORTED_HTTPMETHOD_CODE: header("HTTP/1.0 405 Method Not Allowed"); break; case EXCEPTION_NOTSUPPORTED_OPERATION_CODE: header("HTTP/1.0 501 Not Implemented"); break; case EXCEPTION_METHOD_NOTFOUND_CODE: header("HTTP/1.0 404 Not Found"); break; case EXCEPTION_AUTH_INVALID_CODE: self::setUnauthorizedResponse(); break; case EXCEPTION_AUTH_INVALID_SERVERKEY_CODE: self::setUnauthorizedResponse(); break; case EXCEPTION_REQUIRED_PARAMETERS_CODE: header("HTTP/1.0 200 OK"); break; case EXCEPTION_GENERIC_LIBRARY_ERROR_CODE: header("HTTP/1.0 500 Internal Server Error"); break; case EXCEPTION_INVALID_APIKEY_CODE: self::setUnauthorizedResponse(); break; case EXCEPTION_EXCEEDED_LIMIT_CODE: self::setUnauthorizedResponse(); break; case EXCEPTION_SYSTEM_ERROR_CODE: header("HTTP/1.0 500 Internal Server Error"); break; } echo JsonUtils::serializeError($e->getMessage(), $code); } else { //Otherwise print a "generic exception" code header("HTTP/1.0 500 Internal Server Error"); echo JsonUtils::serializeError($e->getMessage(), EXCEPTION_GENERIC_LIBRARY_ERROR_CODE); } } }