Source of file api.hlstv.php
Size: 9,644 Bytes - Last Modified: 2024-04-27T15:26:05+03:00
/tmp/current_snapshot/api/libs/api.hlstv.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349 | <?php /** * OmegaTV low-level API implementation */ class HlsTV { /** * Contains system alter config as key=>value * * @var array */ protected $altCfg = array(); /** * Contains public key * * @var string */ protected $publicKey = ''; /** * Contains private key * * @var string */ protected $privateKey = ''; /** * Current timestamp for all API requests * * @var int */ protected $currentTimeStamp = 0; /** * Debug flag * * @var bool */ protected $debug = false; /** * Default HLS API URL */ const URL_API = 'https://api.hls.tv/'; /** * Default debug log path */ const LOG_PATH = 'exports/omegatv.log'; /** * Configs options naming */ const OPTION_PUBLIC = 'OMEGATV_PUBLIC_KEY'; const OPTION_PRIVATE = 'OMEGATV_PRIVATE_KEY'; /** * Creates new low-level API object instance * * @return void */ public function __construct() { $this->loadConfigs(); $this->setOptions(); } /** * Loads required configs into protected properties for further usage * * @global object $ubillingConfig * * @return void */ protected function loadConfigs() { global $ubillingConfig; $this->altCfg = $ubillingConfig->getAlter(); } /** * Sets default options to object instance properties * * @return void */ protected function setOptions() { if ((isset($this->altCfg[self::OPTION_PUBLIC])) AND ( (isset($this->altCfg[self::OPTION_PRIVATE])))) { $this->publicKey = $this->altCfg[self::OPTION_PUBLIC]; $this->privateKey = $this->altCfg[self::OPTION_PRIVATE]; } if (isset($this->altCfg['OMEGATV_DEBUG'])) { if ($this->altCfg['OMEGATV_DEBUG']) { $this->debug = true; } } $this->currentTimeStamp = time(); } /** * Returns new API_HASH for some message * * @param array $message * * @return string */ protected function generateApiHash($message = array()) { $message = $this->currentTimeStamp . $this->publicKey . http_build_query($message, '', '&'); $result = hash_hmac('sha256', $message, $this->privateKey); return ($result); } /** * Pushes some request to remote API and returns decoded array or raw JSON reply. * * @param string $request * @param array $data * @param bool $raw * * @return array/json */ public function pushApiRequest($request, $data = array(), $raw = false) { if ($this->debug) { file_put_contents(self::LOG_PATH, curdatetime() . "\n", FILE_APPEND); file_put_contents(self::LOG_PATH, '>>>>>QUERY>>>>>' . "\n", FILE_APPEND); file_put_contents(self::LOG_PATH, print_r($request, true) . "\n", FILE_APPEND); file_put_contents(self::LOG_PATH, print_r($data, true) . "\n", FILE_APPEND); } $curl = curl_init(self::URL_API . $request); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'API_ID: ' . $this->publicKey, 'API_TIME: ' . $this->currentTimeStamp, 'API_HASH:' . $this->generateApiHash($data) )); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($data)); $jsonResponse = curl_exec($curl); $status = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($status != 200) { show_error('Error: call to URL ' . self::URL_API . ' failed with status ' . $status . ', response ' . $jsonResponse . ', curl_error ' . curl_error($curl) . ', curl_errno ' . curl_errno($curl)); } curl_close($curl); if (!$raw) { $result = json_decode($jsonResponse, true); } else { $result = $jsonResponse; } if ($this->debug) { file_put_contents(self::LOG_PATH, '<<<<<RESPONSE<<<<<' . "\n", FILE_APPEND); file_put_contents(self::LOG_PATH, print_r($result, true) . "\n", FILE_APPEND); file_put_contents(self::LOG_PATH, '==================' . "\n", FILE_APPEND); } return ($result); } /** * Returns list of promo tariffs * * @return array */ public function getTariffsPromo() { $result = $this->pushApiRequest('tariff/promo/list'); return ($result); } /** * Returns list of main tariffs * * @return array */ public function getTariffsBase() { $result = $this->pushApiRequest('tariff/base/list'); return ($result); } /** * Returns list of bundle tariffs * * @return array */ public function getTariffsBundle() { $result = $this->pushApiRequest('tariff/bundle/list'); return ($result); } /** * Get all user info. * * @param int $customerId Unique user ID * * @return array */ public function getUserInfo($customerId) { $result = $this->pushApiRequest('customer/get', array('customer_id' => $customerId)); return ($result); } /** * Sets base tariff or some additional tariffs * * @param int $customerId unique user ID * @param array $tariffs example: array('base' =>1036, 'bundle' => 1046) * * @return array */ public function setUserTariff($customerId, $tariffs) { $data = array('customer_id' => $customerId); if (!empty($tariffs)) { foreach ($tariffs as $io => $each) { $data[$io] = $each; } } $result = $this->pushApiRequest('customer/tariff/set', $data); return ($result); } /** * Sets user as blocked * * @param int $customerId * * @return array */ public function setUserBlock($customerId) { $result = $this->pushApiRequest('customer/block', array('customer_id' => $customerId)); return ($result); } /** * Sets user as unblocked * * @param int $customerId * * @return array */ public function setUserActivate($customerId) { $result = $this->pushApiRequest('customer/activate', array('customer_id' => $customerId)); return ($result); } /** * Returns user device activation code * * @param int $customerId * * @return array */ public function getDeviceCode($customerId) { $result = $this->pushApiRequest('customer/device/get_code', array('customer_id' => $customerId)); return ($result); } /** * Removes user device * * @param int $customerId * @param string $deviceId * * @return array */ public function deleteDevice($customerId, $deviceId) { $result = $this->pushApiRequest('customer/device/remove', array('customer_id' => $customerId, 'uniq' => $deviceId)); return ($result); } /** * Adds user device * * @param int $customerId * @param string $deviceId * * @return array */ public function addDevice($customerId, $deviceId) { $result = $this->pushApiRequest('customer/device/add', array('uniq' => $deviceId, 'customer_id' => $customerId)); return ($result); } /** * Returns list of all devices of company * * @return array */ public function getDeviceList() { $result = array(); $tmp = $this->pushApiRequest('device/list'); //devices is now in items key if (isset($tmp['result'])) { if (isset($tmp['result']['items'])) { if (!empty($tmp['result']['items'])) { foreach ($tmp['result']['items'] as $io => $each) { $result['result'][] = $each; } } } } //shitty pagination processing here if (isset($tmp['result']['pages_count'])) { if ($tmp['result']['pages_count'] > 1) { $pagesCount = $tmp['result']['pages_count']; for ($i = 1; $i <= $pagesCount; $i++) { $tmp = $this->pushApiRequest('device/list', array('page' => $i)); if (isset($tmp['result']['items'])) { if (!empty($tmp['result']['items'])) { foreach ($tmp['result']['items'] as $io => $each) { $result['result'][] = $each; } } } } } } return ($result); } /** * Assigns new playlist to some customer * * @param int $customerId * * @return array */ public function addPlayList($customerId) { $result = $this->pushApiRequest('customer/url/add', array('customer_id' => $customerId)); return ($result); } /** * Deletes playlist by its uniq * * @param int $customerId * @param string $playlistId * * @return array */ public function deletePlayList($customerId, $playlistId) { $result = $this->pushApiRequest('customer/url/remove', array('customer_id' => $customerId, 'uniq' => $playlistId)); return ($result); } } |