Files
thetool/lib/Citycom/OanApiClient.php

527 lines
15 KiB
PHP

<?php
class Citycom_OanApiClient {
private $baseurl;
private $username;
private $password;
private $token;
public $lastError;
public function __construct($user, $pass) {
$this->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 getService($service_id) {
if(!$this->token) {
$this->getAuthToken();
if(!$this->token) {
return false;
}
}
//$url = $this->baseurl.CITYCOM_OAN_API_EP_GET_SERVICES;
$url = str_replace("{service_id}", $service_id, $this->baseurl.CITYCOM_OAN_API_EP_GET_SERVICE);
$ctx_options = [
"http" => [
"ignore_errors" => true,
"method" => "GET",
"header" => [
"Accept: application/json",
"Authorization: Bearer ".$this->token,
],
]
];
$service = $this->runApiRequest($url, $ctx_options);
return $service;
}
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;
}
}