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.
 
 

216 lines
6.8 KiB

<?php
require_once 'Integracao.php';
include_once "config.php";
class Xpro extends Integracao {
/** DADOS PARA REQUISICAO */
private $token;
private $url;
private $metodo;
private $query;
private $curl;
private $debug;
private $params = array();
########################################################################
## FUNCOES DA API ##
########################################################################
/*
*
id_chamada - (String, Obrigat?rio) identificador ?nico da liga??o
telefone - (int, Obrigat?rio) n?mero do telefone chamador (cliente) (bina, identificador de chamada)
Protocolo (int, opcional) * Id da solicita??o, Passado no momento da liga??o possibilitando a explos?o de aba, para o usu?rio logado.
? codigo_agente - (int, Opcional) * id interno do operador no sistema de telefonia usado para vincular a solicita??o ao operador
? emailusuario - (String, Opcional) * e_mail do operador, usado para vincular a solicita??o ao operador
? consultor - (Int, Opcional) * id do usu?rio no Xpro, usado para vincular a solicita??o ao operador
*/
public function recebeChamada($numero, $id_chamada) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
'telefone' => $numero,
'id_chamada' => $id_chamada,
'token' => $this->token
);
$this->setMetodo('receberchamada');
return $this->setParams();
} else {
return false;
}
}
/*
id_chamada (string, obrigat?rio) id da liga??o passado no receber chamada
audio (string, opcional) URL do ?udio da liga??o para download
duracao (int, opcional) tempo da liga??o em segundos
tempo_espera (int, opcional) tempo de espera da liga??o em segundos
atendida (bool, opcional) 1 para indicar que a liga??o foi atendida
abandonada (bool, opcional) 1 para indicar que a liga??o foi abandonada
retida_na_ura (bool, opcional) 1 para indicar que a liga??o foi retida na URA
perdida (bool, opcional) 1 para indicar que a liga??o foi perdida
*/
public function encerraChamada($id_chamada, $audio, $duracao) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
'token' => $this->token,
'id_chamada' => $id_chamada,
'audio' => $audio,
'duracao' => $duracao
);
$this->setMetodo('terminachamada');
return $this->setParams();
} else {
return false;
}
}
public function encerraChamadaCron($id_chamada, $audio, $duracao, $token) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->params = array(
'token' => $token,
'id_chamada' => $id_chamada,
'audio' => $audio,
'duracao' => $duracao
);
$this->setMetodo('terminachamada');
return $this->setParams();
} else {
return false;
}
}
########################################################################
## FUNCOES DEFAULT DA CLASSE ##
########################################################################
/**
* Coleta as informacoes iniciais para o inicio da integracao com a API.
*
* @param string $token
* @param string $url
* @param boolean $log
*/
public function __construct($url = CONF_URL_API, $token = CONF_TOKEN_API, $log = CONF_LOGGER_ATIVO) {
$this->setLog($log);
if(end(str_split($url)) != '/'){
$url .= '/';
}
$this->token = $token;
$this->url = $url;
//$this->integracaoReg();
$this->log->info("Iniciando integracao", debug_backtrace());
}
/**
* Parametriza o metodo utilizado para a consulta.
*
* @param type $metodo
*/
private function setMetodo($metodo) {
$this->metodo = $metodo;
}
/**
* Escreve a query para ser passada para o curl
*
* @param string $query
*/
private function setQuery($query) {
return $this->query .= $query;
}
/**
* retorna a string pronta da query do curl e limpa a variavel.
*
* @return string $query
*/
private function getQuery() {
$query = $this->query;
unset($this->query);
return $query;
}
/**
* Constroi de forma dinamica a string para ser passada para a execucao do Curl
*
* @void
*/
private function curl() {
/*
* Final da linha para pegar os dados da variavel
*/
$this->curl = curl_init();
curl_setopt($this->curl, CURLOPT_URL, $this->url.$this->metodo);
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->curl, CURLOPT_TIMEOUT, 120);
curl_setopt($this->curl, CURLOPT_POST, 1);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $this->params);
$this->log()->debug("Curl: ". print_r(curl_getinfo($this->curl), true), debug_backtrace());
}
/**
* Recebe array de forma de indice e valor
*
* @example array("qtype" => 'test_api', "query" => '123', "oper" => '=')
*
* @obs sempre chamar a fun??o debug_backtrace() para ser dispon?vel em log
*
* @param type $params
* @debug_track function debug_backtrace()
*/
private function setParams() {
$this->curl();
unset($this->params);
return $this->exec();
}
/**
* Recebe as informa??es e realiza a execucao da API
*
* @void
*/
private function exec() {
/**
* Caso tenha problema de requisi??o
*/
$content = curl_exec($this->curl);
if (curl_errno($this->curl)) {
$this->log->error(curl_error($this->curl), debug_backtrace());
curl_close($this->curl);
$this->audioError();
return false;
}
curl_close($this->curl);
return $this->response($content);
}
/**
* Prepara dos dados para ser transmitidos para o metodo a ser retornado a
* integracao.
*
* @return array
*/
private function response($data) {
$this->log->debug("Reponse API: " . print_r(json_decode($data, true), true), $this->debug);
if ($data) {
return json_decode($data, true);
} else {
return false;
}
}
}