IPTV PORTAL - простое решение.

Технические вопросы по UTM 5.0
Ответить
gtk
Сообщения: 232
Зарегистрирован: Пт янв 21, 2005 18:33

IPTV PORTAL - простое решение.

Сообщение gtk »

Коллеги, хочу с вами поделится очень простым решением интеграции

iptvportal к UTM5.


Имеем биллинг + виртуальную машину на которой установлен php5 + json + mysql.

На этой виртуальной машине размещаем следующий скрипт.

<?php

$_auth_uri = 'https://go.iptvportal.ru/api/jsonrpc/';
$_username = 'admin'; $_password = 'password';
$_jsonsql_uri = 'https://admin.operator.iptvportal.ru/api/jsonsql/';
$_iptvportal_header = null;

function send ($url, $data, $extra_headers=null) {
$ch = curl_init ();
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt ($ch, CURLOPT_TIMEOUT, 10);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt ($ch, CURLOPT_POST, true);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $data);
if (isset ($extra_headers)) {
curl_setopt ($ch, CURLOPT_HTTPHEADER, $extra_headers);
}
//echo "HTTP fetching '$url'...\n";
$content = curl_exec ($ch);
$http_code = curl_getinfo ($ch, CURLINFO_HTTP_CODE);
if ($content === false) {
$err_msg = "HTTP error: $http_code (" . curl_error($ch) . ')' . '\n';
echo $err_msg;
throw new Exception ($err_msg);
}
if ($http_code != 200) {
$err_msg = "HTTP request failed ($http_code)\n";
echo $err_msg;
throw new Exception ($err_msg);
}
//echo "HTTP OK ($http_code)\n";
curl_close ($ch);
return $content;
}

function jsonrpc_call ($url, $method, $params, $extra_headers=null) {
static $req_id = 1;

$req = array (
"jsonrpc" => '2.0',
"id" => $req_id++,
"method" => $method,
"params" => $params
);
$req = json_encode ($req);
$res = send ($url, $req, $extra_headers=$extra_headers);
#echo $res;
$res = json_decode ($res, true);
if (!isset ($res)) {
echo "error: not result\n";
return null;
} else if (!array_key_exists ('result', $res) || !isset ($res ['result'])) {
print_r ($res ['error']);
return null;
} else {
return $res ['result'];
}
return $res;
}

function jsonsql_call ($cmd, $params) {
global $_jsonsql_uri, $_iptvportal_header;
//echo 'iptvportal_header: '; print_r ($_iptvportal_header);
return jsonrpc_call ($_jsonsql_uri, $cmd, $params, $extra_headers=$_iptvportal_header);
}

function authorize_user ($auth_uri, $username, $password) {
global $_iptvportal_header;
$res = jsonrpc_call ($auth_uri, $cmd="authorize_user", $params=array (
'username' => $username,
'password' => $password
));
if (isset ($res) && array_key_exists ('session_id', $res)) {
$_iptvportal_header = array ('Iptvportal-Authorization: ' . 'sessionid=' . $res ['session_id']);
}
return $res;
}


// аргумент(параметр) которые берет имя логина из командной строки
$name1 = $argv[1];
echo $name1;


$user = authorize_user ($auth_uri=$_auth_uri, $username=$_username, $password=$_password);
echo 'authorize user result: '; print_r ($user);



$res = jsonsql_call ("update", array (
"table" => "subscriber",
"set" => array (
# "disabled" => false

// Второй аргумент который мы меняем, если хотим включить или выключить абонента.

"disabled" => $argv[2]
),
"where" => array ("eq" => array ("username", $name1)),
"returning" => "id"
));
echo 'update cmd result: '; print_r ($res);



?>

Параметры rfw5.cfg


shell_path=/bin/sh
firewall_path=/usr/local/bin/php /root/test1.php
#sync_flags=enable
sudo_path=/usr/local/bin/sudo



В самой админке на включение инета(в правила firewall) ставим строчку LOGIN false

И LOGIN true на выключение.


Поясню, суть работы. Вы создаете Тариф Инет + Иптв.

Привязываете , правила к тарифу Инет + Иптв. При отрицательном балансе, rfw выключает пользователя из системы(middleware). При Положительном включает.


Это также важно для отчетов, кто в теме. Чтобы не выходить, за рамки гарантированного платежа. Минус скрипта в том, что оператор вручную подключает(меняет) пакет ИПТВ в middleware.

Ответить