✏️ 正在编辑: Rest.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Facta/Rest.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Service_Facta_Rest { private $_indiceUsuario = 0; private $_dadosUsuarios; private $_usuarioId; private $_config; private $_usuario; private $_senha; protected $_bancoId; private $_url = ''; private $_naoImportados; private $_erros; private $_authorization; public function __construct(array $options = null) { $this->_bancoId = Model_Banco::bancoPorNome('FACTA'); $this->_url = 'https://webservice.facta.com.br/'; if (empty($this->_bancoId)) { throw new Yuppie_Exception("O banco Facta não está cadastrado"); } if ($options) { $this->_usuarioId = $options['id']; $this->_usuario = $options['usuario']; $this->_senha = $options['senha']; } else { $this->_dadosUsuarios = Model_UsuariosApi::getByApi('FACTA', 'importacao'); if (count($this->_dadosUsuarios) == 0) { $msgErro = 'Nenhum usuário de API cadastrado.'; throw new Yuppie_Exception($msgErro); } $this->_usuarioId = $this->_dadosUsuarios[$this->_indiceUsuario]['id']; $this->_usuario = $this->_dadosUsuarios[$this->_indiceUsuario]['usuario']; $this->_senha = $this->_dadosUsuarios[$this->_indiceUsuario]['senha']; $this->_config = $this->_dadosUsuarios[$this->_indiceUsuario]; } } public function getErros() { return $this->_erros; } public function getUsuario() { return $this->_usuario; } public function getSenha() { return $this->_senha; } public function getUrl() { return $this->_url; } public function getBancoId() { return $this->_bancoId; } protected function getTokenApi() { $tokenValido = (new Model_DbTable_BancosTokenApi())->checkTokenValido($this->_bancoId, $this->_usuarioId); if ($tokenValido) { $this->_authorization = $tokenValido['token']; return; } $this->newToken(); } protected function newToken() { $endPoint = '/gera-token'; $curl = curl_init(); curl_setopt_array($curl, [ CURLOPT_URL => $this->_url . $endPoint, CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => [ "Content-Type: application/json", "Authorization: Basic " . base64_encode($this->getUsuario() . ":" . $this->getSenha()) ], ]); $response = curl_exec($curl); curl_close($curl); $token = json_decode($response); if (empty($token->token)) { Yuppie_Log::write("Consulta Facta geração de newToken: " . print_r($response, 1), $this); throw new Core_Exception($token->mensagem); } $this->_authorization = $token->token; $expiraEm = new Zend_Date($token->expira); (new Model_DbTable_BancosTokenApi())->saveToken($this->_bancoId, $this->_usuarioId, $this->_authorization, $expiraEm->get('yyyy-MM-dd HH:mm:ss')); Model_UsuariosApi::gravarDataUtilizacao($this->_usuarioId); Yuppie_Log::write("Novo token gerado. Expira em: " . $expiraEm->get('yyyy-MM-dd HH:mm:ss'), $this); } public function importar($dataImportacao = null) { if (empty($dataImportacao)) { throw new Exception('Data não informada.'); } $dtInicial = (new Zend_Date($dataImportacao))->subDay(3)->get('yyyy-MM-dd'); $dtFinal = (new Zend_Date($dataImportacao))->get('yyyy-MM-dd'); foreach ($this->_dadosUsuarios as $usuario) { // $datas = [ // 'data_ini' => $dtInicial, // 'data_fim' => $dtFinal // ]; // $contratos = []; // $contratos1 = $this->getContratos($datas); $datas = [ 'data_alteracao_ini' => $dtInicial, 'data_alteracao_fim' => $dtFinal ]; $contratos = $this->getContratos($datas); // if (!empty($contratos1->propostas)) { // $contratos += $contratos1->propostas; // } // if (!empty($contratos2->propostas)) { // $contratos += $contratos2->propostas; // } $producao = new Core_Banco_Service_Facta_Producao($this->_bancoId); $arquivo = new stdClass(); $arquivo->arquivo = 'ImportacaoDireta: Facta'; $producao->setArquivoOrigem($arquivo); $result = $producao->importar((array)$contratos->propostas, $this->_config); $this->_naoImportados = array_merge($this->_naoImportados, $result); if (!$this->setProximoUsuario()) { return $this->_naoImportados; } } return $this->_naoImportados; } public function getContratos(array $datas) { if (empty($this->_authorization)) { $this->getTokenApi(); } $endPoint = "proposta/andamento-propostas"; return $this->getResponse($endPoint, $datas); } public function getCliente(string $cpf) { if (empty($this->_authorization)) { $this->getTokenApi(); } $endPoint = "proposta/consulta-cliente"; $params = ['cpf' => $cpf]; return $this->getResponse($endPoint, $params); } protected function getResponse($endPoint, $params, $method = 'GET', $header = null) { $url = $this->_url . $endPoint; $options = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "Authorization: Bearer {$this->_authorization}" ], ]; if ($method == "GET") { $url .= '?' . http_build_query($params); $options[CURLOPT_CUSTOMREQUEST] = "GET"; } elseif ($method == "POST") { $options[CURLOPT_CUSTOMREQUEST] = "POST"; $options[CURLOPT_POSTFIELDS] = $params; } if (!empty($header)) { $options[CURLOPT_HTTPHEADER] = array_merge($options[CURLOPT_HTTPHEADER], $header); } $options[CURLOPT_URL] = $url; $curl = curl_init(); curl_setopt_array($curl, $options); $response = curl_exec($curl); $info = curl_getinfo($curl); curl_close($curl); Yuppie_Log::write("getResponse Service Facta parâmetros enviados para url {$url}:" . print_r($params, true), $this); Yuppie_Log::write("Retorno do getResponse Service Facta:" . print_r($response, true), $this); if ($info['http_code'] != 200) { $retorno = new stdClass(); $retorno->msg = "Falha de comunicação com o Banco Facta"; return $retorno; } $response = json_decode($response); if (!empty($response->erro) && $response->erro == true && stristr($response->mensagem, "Token")) { $this->newToken(); return $this->getResponse($endPoint, $params, $method, $header); } return $response; } protected function setProximoUsuario($erroAutenticacao = false) { if ($erroAutenticacao) { Model_UsuariosApi::desativarUsuario($this->_usuarioId); } $this->_indiceUsuario++; if (!empty($this->_dadosUsuarios[$this->_indiceUsuario]['id'])) { Yuppie_Log::write("Passando para próximo usuário cadastrado.", $this); $this->_usuarioId = $this->_dadosUsuarios[$this->_indiceUsuario]['id']; $this->_usuario = $this->_dadosUsuarios[$this->_indiceUsuario]['usuario']; $this->_senha = $this->_dadosUsuarios[$this->_indiceUsuario]['senha']; $this->_config = $this->_dadosUsuarios[$this->_indiceUsuario]; } else { Yuppie_Log::write("Fim dos usuários.", $this); return false; } return true; } }
💾 保存文件
← 返回文件管理器