repositório com os arquivos utilizados para integração entre o sistema SimplesIP e diversos sistemas.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123 lines
4.7 KiB

3 years ago
<?php
#######################################
### WEBHOOK PARA SIGMA ###
#######################################
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: OPTIONS,GET,POST,PUT,DELETE");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
/**
* DEFINE REQUEST AUTENTICACAO API
*/
define('CONF_AUTH_LOGIN', '28af9b7eda6fd6f0ad22c65b0ed85804');
define('CONF_AUTH_PASSWORD', 'c757ea2752a9ed97b8dcd0645eb91eff');
define('CONF_AUTH_TOKEN', 'af7ff548c996e6afc7999b57586268618ef019f2');
/**
* DEFINE REQUEST AUTENTICACAO API SIMPLES IP
*/
define('CONF_AUTH_SIMPLESIP_LOGIN', 'user.api');
define('CONF_AUTH_SIMPLESIP_PASSWORD', '0000');
/**
* CONFIGURACAO DE LOG
*/
define('CONF_LOGGER_REQUEST', '/var/log/asterisk/sigma_request.log');
$arquivo = fopen('teste.txt', 'w');
fwrite($arquivo, print_r($_SERVER, true));
fclose($arquivo);
try {
$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
$uri = explode('/', $uri);
$requestMethod = $_SERVER["REQUEST_METHOD"];
$data['data_request'] = date('Y-m-d H:i:s');
$data['remote_address'] = $_SERVER['REMOTE_ADDR'];
$data['user_agent_browser'] = $_SERVER['HTTP_USER_AGENT'];
$data = filter_input_array(INPUT_GET, FILTER_SANITIZE_SPECIAL_CHARS);
if (!isset($data['usuario']) || !isset($data['senha']) || !isset($data['token'])) {
header('WWW-Authenticate: Basic realm="Click to Call"');
header('HTTP/1.0 401 Unauthorized');
throw new Exception("Sem credenciais para autenticacao!");
} else {
if($data['usuario'] == CONF_AUTH_LOGIN && $data['senha'] == CONF_AUTH_PASSWORD && $data['token'] == CONF_AUTH_TOKEN){
header('WWW-Authenticate: Basic realm="Click to Call"');
header('HTTP/1.0 200 OK');
message(print_r($data, true));
}else{
throw new Exception("Autenticacao invalida para o WebHook. Verifique os dados de acesso.");
}
}
$urlChamada = "http://127.0.0.1/integracao/?method=ChamadaRamal&numeroDiscar=" . removemask($data['exten']) . "&ramal={$data['ramal']}&login=" . CONF_AUTH_SIMPLESIP_LOGIN . "&senha=" . CONF_AUTH_SIMPLESIP_PASSWORD . "&tipoRetorno=JSON";
$result = json_decode(file_get_contents($urlChamada));
$data['uniqueid'] = $result->id_chamada;
if (!$data['uniqueid']) {
throw new Exception('Nao foi possivel realizar a chamada');
}
if ($result->id_chamada) {
$data['result'] = $result->result;
message(print_r(
array(
"Server" => $_SERVER['SERVER_NAME'],
"Request" => $requestMethod,
"URI" => $uri,
"Body" => $data,
"Data" => array(removemask($data['destination']), $data['exten']),
"API Simples IP" => $result)
, true));
}
$responseApi = array(
"status" => "OK",
"callstatus" => "Trying",
"message" => "Call in Progress",
"callid" => $result->id_chamada,
"userfild" => $result->id_chamada,
"id" => $result->id_chamada);
response($responseApi);
} catch (Exception $ex) {
message($ex->getMessage(), $data);
response('fail', $data, $ex->getMessage());
}
function removemask($phone) {
$array = str_split($phone);
$remove = array('(', ')', ' ', '-');
foreach ($array as $key => $value) {
if (in_array($value, $remove)) {
unset($array[$key]);
}
}
return implode($array);
}
function message($param, $data = array()) {
$log = "[DATE] " .date('Y-m-d H:i:s'). " [MESSAGE]: {$param} [DATA]: " . print_r($data, true) . "\n";
$log .= "------------------------------------------------------------------------------------------------\n";
file_put_contents(CONF_LOGGER_REQUEST, $log, FILE_APPEND);
}
function auth($login, $password) {
if (($login == CONF_AUTH_LOGIN) && ($password == CONF_AUTH_PASSWORD)) {
return true;
}
return false;
}
function response($response) {
echo json_encode( $response );
}