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.
 
 

476 lines
18 KiB

<?php
require_once 'Integracao.php';
include "config.php";
/**
* DESCRICAO DO DESENVOLVEDOR
*
* @author Lucas Awade
* @function developer
* @documentation http://api.elitesoft.com.br/menu/
* @ISPIntegrator 5.0
* @version 1.0.0
*/
class ISPIntegrator extends Integracao {
private $user;
private $password;
private $url;
private $metodo;
private $subMetodo;
private $query;
private $curl;
private $debug;
private $params = array();
private $ssl = false;
########################################################################
## FUNCOES DA API ##
########################################################################
public function identificarDocumentoJson($documento) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$doc = $this->mask_cpf_cnpj($documento);
$this->setSubMetodo("client.exists");
$this->params[(strlen($documento) == 11 ? 'cpf' : 'cnpj')] = $doc;
return $this->setParamsJSON();
} else {
return false;
}
}
public function clienteInformacoes($codcli) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("client.getInfo");
$this->params['codcli'] = $codcli;
return $this->setParamsJSON();
} else {
return false;
}
}
public function identificarDocumento($documento) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("view.execute");
$doc = $this->mask_cpf_cnpj($documento);
if ($doc) {
$this->params['_consulta'] = "011G0NP05B";
$this->params['formato_padrao'] = "X";
$this->params[(strlen($documento) == 11 ? 'cpf' : 'cnpj')] = $doc;
return $this->setParamsXML();
}
$this->log->error("Mask CPF/CNPJ: {$doc} Nao foi encontrado!", $this->debug);
return false;
} else {
return false;
}
}
public function identificarTelefone($telefone) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("view.execute");
$telefone = $this->mask_phone_tel($telefone);
if ($telefone) {
$this->params['_consulta'] = "011G0NP05B";
$this->params['formato_padrao'] = "X";
$this->params[$telefone['type']] = $telefone['telefone'];
return $this->setParamsXML();
}
$this->log->error("Mask Phone/Tel: " . print_r($telefone, true) . " Nao foi encontrado!", $this->debug);
return false;
} else {
return false;
}
}
public function faturasCliente($codcli, $from = '01-01-2000', $to = null) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("faturas.cliente");
$this->params['codcli'] = $codcli;
$this->params['from'] = $from;
$this->params['to'] = $to ? $to : date('d-m-Y');
return $this->setParamsXML();
} else {
return false;
}
}
public function faturasClienteJson($codcli, $from = '01-01-2000') {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("listar");
$this->setSubMetodo("faturas.cliente");
$this->params['codcli'] = $codcli;
$this->params['from'] = $from;
$this->params['to'] = date('d-m-Y');
return $this->setParamsJSON();
} else {
return false;
}
}
public function verBoleto($codFat) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("datasource.verBoleto");
$this->params['codfat'] = $codFat;
return $this->setParamsJSON();
} else {
return false;
}
}
public function linhaDigitavel($codFat) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("datasource.linhaDigitavel");
$this->params['codfat'] = $codFat;
return $this->setParamsJSON();
} else {
return false;
}
}
public function enviarFaturaEmail($codFat, $email, $assunto = CONF_EMAIL_TITLE_INVOICE, $messagem = CONF_EMAIL_SUBTITLE_INVOICE) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("execute");
$this->setSubMetodo("datasource.enviarBoleto");
$this->params['email'] = $email;
$this->params['assunto'] = $assunto;
$this->params['messagem'] = urlencode($messagem);
$this->params['codfat'] = $codFat;
return $this->setParamsJSON();
} else {
return false;
}
}
public function enviarFaturaSms($codFat, $celular, $texto, $codigo) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("listar");
$this->setSubMetodo("datasource.enviarLinhaDigitavelSms");
$this->params['celular'] = $celular;
$this->params['texto'] = $texto;
$this->params['codigo'] = $codigo;
$this->params['codfat'] = $codFat;
return $this->setParamsJSON();
} else {
return false;
}
}
public function listaServico($codcli) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("services.details");
$this->params['codcli'] = $codcli;
return $this->setParamsJSON();
} else {
return false;
}
}
public function planInfo2($codcli) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("plan.getInfo2");
$this->params['codcli'] = $codcli;
return $this->setParamsJSON();
} else {
return false;
}
}
public function habilitacaoProvisoria($codsercli) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("habilitacaoProvisoria.execute");
$this->params['codsercli'] = $codsercli;
return $this->setParamsJSON();
} else {
return false;
}
}
public function verificaIncidente($codcli) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("view.execute");
$this->params['_consulta'] = "02A50HOX3E";
$this->params['formato_padrao'] = "X";
$this->params['codcli'] = $codcli;
return $this->setParamsXML();
} else {
return false;
}
}
public function verificaIncidenteJson($codcon) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("incidente.list");
$this->params['codcon'] = $codcon;
return $this->setParamsJSON();
} else {
return false;
}
}
public function abreAtendimento($codcli, $codsercli, $codocop) {
$this->debug = debug_backtrace();
if ($this->getArgs(func_get_args())) {
$this->setMetodo("list");
$this->setSubMetodo("ati.criarAtendimento");
$this->params['codcli'] = $codcli;
$this->params['codsercli'] = $codsercli;
$this->params['codocop'] = $codocop;
return $this->setParamsJSON();
} else {
return false;
}
}
/**
* Envia email das faturas solicitadas.
*
* $faturaMes => Coleta todas as faturas do m<EFBFBD>s para ser enviadas.
*
* @param string|int $documento
* @param boolean $faturasMes
* @return boolean
*/
public function enviarBoletoFatura($cliente) {
$this->debug = debug_backtrace();
$pathFileMail = __DIR__ . "/email.html";
if (!$this->mail) {
$this->log->error('Antes de enviar o email e necessario configurar o SimpleMail e SMTP!');
return false;
}
$dados = $cliente->params->param[1]->value->DOMElement->result->row;
$fatura = $this->faturasCliente($dados->codcli);
$invoices = $fatura->params->param[1]->value->DOMElement->result->row;
if (!$invoices) {
$this->log->info("Nao foi possivel encontrar nenhuma fatura em aberto do solicitante!");
return false;
}
foreach ($invoices as $value) {
$invoice = $this->verBoleto($value->codfat);
$line = $this->linhaDigitavel($value->codfat)['data']['results'][0]['codigo_barras'];
$linkInvoice = $this->url . $invoice['data']['results'][0]['linkBoleto'];
$link .= "Fatura Num.: {$value->codfat} Codigo do boleto:[ $line ] <a href='{$linkInvoice}' target='_blank'>Visualizar Boleto</a>";
sleep(1);
}
$data = array('$titulo' => "Envio de Fatura", '$nome' => $dados->nome_cli, '$link' => $link);
$this->log->info("Faturas inseridas do E-mail!");
if (file_exists($pathFileMail)) {
$this->mail->pathBodyMail($pathFileMail, $data);
} else {
$this->mail->bodyMessage("<h4>Ola, <b>{$dados->nome_cli}</b></h4><p>Conforme solicitado estamos lhe enviando a segunda via de sua fatura.</p><p>{$link}</p>");
}
$this->log->info("Encaminhando boleto por E-mail!");
if ($this->mail->mailing($dados->e_mail)) {
$this->log->success("O Boleto foi enviado com sucesso!");
return true;
} else {
$this->log->error("Nao foi possivel enviar o boleto para o email do solicitante!");
$this->log->error("Error SimpleMail: " . $this->mail->getErrorSend());
return false;
}
}
########################################################################
## FUNCOES DEFAULT DA CLASSE ##
########################################################################
/**
* Coleta as informacoes iniciais para o inicio da integracao com a API.
*
* @param string $user
* @param string $password
* @param boolean $url
*/
public function __construct($user=CONF_USER_API, $password=CONF_PASSWORD_API, $url=CONF_URL_API) {
$this->user = $user;
$this->password = $password;
if(end(str_split($url)) != '/'){
$url .= '/';
}
if (strpos($url, 'https')) {
$this->ssl = true;
}
$this->url = $url;
$this->setLog(CONF_LOGGER_ATIVO);
$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;
}
/**
* Parametriza do submetodo utilizado para a consulta.
*
* @param type $submetodo
*/
private function setSubMetodo($submetodo) {
$this->subMetodo = $submetodo;
}
/**
* 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($type) {
$this->log->debug($this->query);
$this->curl = curl_init();
curl_setopt($this->curl, CURLOPT_URL, $this->url . (strtoupper($type) == 'XML' ? 'server.php' : 'integrator.server.php'));
curl_setopt($this->curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($this->curl, CURLOPT_POST, 1);
curl_setopt($this->curl, CURLOPT_SSL_VERIFYHOST, $this->ssl);
curl_setopt($this->curl, CURLOPT_POSTFIELDS, $this->getQuery());
if (strtoupper($type) == 'XML') {
curl_setopt($this->curl, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8'));
} else {
curl_setopt($this->curl, CURLOPT_ENCODING, "deflate,gzip,br");
curl_setopt($this->curl, CURLOPT_HTTPHEADER, array('Cache-Control: no-cache', 'Content-Type: application/json','ApplicationV: Integrator/6'));
}
/*
* Final da linha para pegar os dados da variavel
*/
$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<EFBFBD><EFBFBD>o debug_backtrace() para ser dispon<EFBFBD>vel em log
*
* @param type $params
* @debug_track function debug_backtrace()
*/
private function setParamsXML() {
$this->params['_user'] = $this->user;
$this->params['_passwd'] = $this->password;
$this->setQuery("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><methodCall><methodName>{$this->metodo}</methodName><params>");
foreach ($this->params as $key => $value) {
$this->setQuery("<param name=\"$key\"><value><string><![CDATA[$value]]></string></value></param>");
}
$this->setQuery("</params></methodCall>");
unset($this->params);
return $this->exec('XML');
}
private function setParamsJSON() {
$x = 0;
$this->setQuery("{");
$this->setQuery(sprintf('"request": {"sendRequest": "integrator.server", "method": "%s", "submethod": "%s",', $this->metodo, $this->subMetodo));
$this->setQuery(sprintf('"params": {"_user":"%s","_passwd":"%s",', $this->user, $this->password));
foreach ($this->params as $key => $value) {
$x++;
$this->setQuery(sprintf('"%s":"%s"', $key, $value));
if (count($this->params) != $x) {
$this->setQuery(", ");
}
}
$this->setQuery("}}}");
unset($this->params);
return $this->exec('JSON');
}
/**
* Recebe as informa<EFBFBD><EFBFBD>es e realiza a execucao da API
*
* @void
*/
private function exec($type) {
$this->curl($type);
$response = 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);
if (strtoupper($type) == 'XML') {
return $this->response(simplexml_load_string($response));
} else {
return $this->response(json_decode($response, true));
}
}
/**
* 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($data, true), $this->debug);
if ($data) {
return $data;
} else {
return false;
}
}
}