baseurl = CITYCOM_OAN_API_URL; $this->username = $user; $this->password = $pass; } public function getLocations() { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_LOCATIONS; $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "GET", "header" => [ "Accept: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $locations = $this->runApiRequest($url, $ctx_options); return $locations; } public function getHomes($location_id) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_HOMES; $url = str_replace("{location_id}", $location_id, $url); $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "GET", "header" => [ "Accept: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $homes = $this->runApiRequest($url, $ctx_options); return $homes; } public function getProducts() { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_PRODUCTS; $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_PRODUCTS; $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "GET", "header" => [ "Accept: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $products = $this->runApiRequest($url, $ctx_options); return $products; } public function createProduct($data) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } if(!array_key_exists("name", $data) || !array_key_exists("bb_down", $data) || !array_key_exists("bb_up", $data)) { return false; } $url = $this->baseurl.CITYCOM_OAN_API_EP_CREATE_PRODUCT; $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "POST", "content" => json_encode($data), "header" => [ "Accept: application/json", "Content-Type: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $new_product = $this->runApiRequest($url, $ctx_options); return $new_product; } public function updateProduct($product_id, $data) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = str_replace("{product_id}", $product_id, $this->baseurl.CITYCOM_OAN_API_EP_UPDATE_PRODUCT); } public function deleteProduct($product_id) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = str_replace("{product_id}", $product_id, $this->baseurl.CITYCOM_OAN_API_EP_DELETE_PRODUCT); } public function getServices() { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_SERVICES; $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "GET", "header" => [ "Accept: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $services = $this->runApiRequest($url, $ctx_options); return $services; } public function createService($data) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } if(!array_key_exists("billing_date", $data) || !$data["billing_date"]) { $data["billing_date"] = date("Y-m-d"); } $url = $this->baseurl.CITYCOM_OAN_API_EP_CREATE_SERVICES; $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "POST", "content" => json_encode($data), "header" => [ "Accept: application/json", "Content-type: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $new_service = $this->runApiRequest($url, $ctx_options); return $new_service; } public function updateService($service_id, $data) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = str_replace("{service_id}", $service_id, $this->baseurl.CITYCOM_OAN_API_EP_UPDATE_SERVICES); $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "PUT", "content" => json_encode($data), "header" => [ "Accept: application/json", "Content-type: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $result = $this->runApiRequest($url, $ctx_options); return $result; } public function cancelService($service_id, $data) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = str_replace("{service_id}", $service_id, $this->baseurl.CITYCOM_OAN_API_EP_CANCEL_SERVICES); } public function getServiceTypes() { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_SERVICE_TYPES; $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "GET", "header" => [ "Accept: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $ctx = stream_context_create($ctx_options); $output = file_get_contents($url, false, $ctx); $resp = json_decode($output); if(!is_object($resp) || !property_exists($resp, "success") || !$resp->success) { return false; } $types = $resp->data; return $types; } public function getOntStatus($oan_id) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_ONT_STATUS; $url = str_replace("{oan_id}", $oan_id, $url); $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "GET", "header" => [ "Accept: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $ctx = stream_context_create($ctx_options); $output = file_get_contents($url, false, $ctx); $resp = json_decode($output); if(!is_object($resp)) { return false; } if(!property_exists($resp, "success") || !$resp->success || !property_exists($resp, "data")) { return false; } return $resp->data; } public function getOntPortStatus($oan_id) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_ONT_PORTSTATUS; $url = str_replace("{oan_id}", $oan_id, $url); $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "GET", "header" => [ "Accept: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $ctx = stream_context_create($ctx_options); $output = file_get_contents($url, false, $ctx); $resp = json_decode($output); if(!is_object($resp)) { return false; } if(!property_exists($resp, "success") || !$resp->success || !property_exists($resp, "data")) { return false; } return $resp->data; } public function getOntMacAddresses($oan_id) { if(!$this->token) { $this->getAuthToken(); if(!$this->token) { return false; } } $url = $this->baseurl.CITYCOM_OAN_API_EP_GET_ONT_MACADDRESSES; $url = str_replace("{oan_id}", $oan_id, $url); $ctx_options = [ "http" => [ "ignore_errors" => true, "method" => "GET", "header" => [ "Accept: application/json", "Authorization: Bearer ".$this->token, ], ] ]; $ctx = stream_context_create($ctx_options); $output = file_get_contents($url, false, $ctx); $resp = json_decode($output); if(!is_object($resp)) { return false; } if(!property_exists($resp, "success") || !$resp->success || !property_exists($resp, "data")) { return false; } return $resp->data; } public function getOntStatusDetail($oan_id) { $ont_status = $this->getOntStatus($oan_id); $ont_port_status = $this->getOntPortStatus($oan_id); $ont_mac_addresses = $this->getOntMacAddresses($oan_id); return [ $ont_status, $ont_port_status, $ont_mac_addresses ]; } private function getAuthToken() { $token = new mfConfig("adb.import.citycom.auth.token"); if($token && $token->value()) { $this->token = $token->value(); return true; } $url = $this->baseurl.CITYCOM_OAN_API_EP_LOGIN; $ctx_options = ["http" => [ "ignore_errors" => true, "method" => "POST", "headers" => [ "Accept: application/json", "Content-Type: multipart/form-data", ], "content" => http_build_query([ "email" => $this->username, "password" => $this->password, ]), ]]; $ctx = stream_context_create($ctx_options); $output = file_get_contents($url, false, $ctx); $resp = json_decode($output); if(!is_object($resp) || !property_exists($resp, "success") || !$resp->success) { return false; } if(!$resp->data->token) { return false; } $this->token = $resp->data->token; // save token $token->value($this->token); $token->save(); return true; } private function runApiRequest($url, $ctx_opts, $url_params = [], $page_num = 1) { $current_page = $page_num; $return_data = []; $ctx = stream_context_create($ctx_opts); // build final url with url_params and page_num $final_url_params = $url_params; if($page_num > 1) { $final_url_params["page"] = $page_num; } if(count($final_url_params)) { $qs = http_build_query($final_url_params); $final_url = "$url?$qs"; } else { $final_url = "$url"; } // run request //echo "URL: $final_url\n"; $output = file_get_contents($final_url, false, $ctx); $resp = json_decode($output); //var_dump($resp);exit; if(!is_object($resp) || (property_exists($resp, "success") && !$resp->success)) { $this->lastError = $output; return false; } $response = $resp->data; if(is_array($response)) { $return_data = $response; } elseif(is_object($response) && (!property_exists($response, "data") || !is_array($response->data))) { $return_data = $response; } elseif(is_object($response) && property_exists($response, "data") && is_array($response->data)) { $return_data = $response->data; if(property_exists($response, "last_page") && $response->last_page > 1) { if($current_page < $response->last_page) { $next_page = $current_page + 1; $next_data = $this->runApiRequest($url, $ctx_opts, $url_params, $next_page); if(!$next_data) { return $return_data; } $return_data = array_merge($return_data, $next_data); } } } else { throw new Exception(__METHOD__.": Unknown API return type"); } return $return_data; } }