✏️ 正在编辑: Api.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Bevicred/Api.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Carbon\Carbon; use Core_Banco_Service_Bevicred_Factory as Factory; class Core_Banco_Service_Bevicred_Api { private $_url = ''; private $_indiceUsuario = 0; private $_dadosUsuarios; private $_usuarioId; private $_usuario; private $_senha; private $_authorization; private $_modulo; private $_assunto; private $_naoImportados = []; public const CODIGO_BANCOS = [ 'Banrisul' => 'BANRISUL', 'Bmg' => 'BMG', 'Bonsucesso' => 'BONSUCESSO', 'Bradesco' => 'BRADESCO', 'Itau' => 'JVITAU', 'Pan' => 'PAN', 'Safra' => 'SAFRA', 'Mercantil' => 'MERCANTIL', 'Facta' => 'FACTA', 'Daycoval' => 'DAYCOVAL', 'Quero Mais' => 'QUEROMAIS', 'C6 Bank' => 'C6', // 'Bgn' => 'BGN' - FALTA, // 'Bv' => 'BV' - FALTA, // 'Lucree' => 'LUCREE', -FALTA ]; public function __construct() { $this->_dadosUsuarios = Model_UsuariosApi::getByApi('BEVICRED', 'importacao'); if (count($this->_dadosUsuarios) <= 0) { $msgErro = 'Nenhum usuário de API cadastrado.'; throw new Core_Exception($msgErro); } $this->_url = 'https://sistema.bevicred.com.br/webserviceApi/service.php'; $this->_usuarioId = $this->_dadosUsuarios[$this->_indiceUsuario]['id']; $this->_usuario = $this->_dadosUsuarios[$this->_indiceUsuario]['usuario']; $this->_senha = $this->_dadosUsuarios[$this->_indiceUsuario]['senha']; $this->_modulo = 'AGENTE'; $this->_assunto = 'PRODUCAOBANCO'; } protected function getTokenApi() { //verifica se já tem token gerado $tokenValido = (new Model_DbTable_BancosTokenApi())->checkTokenValido(0, $this->_usuarioId); if ($tokenValido) { $this->_authorization = $tokenValido['token']; return; } $this->newToken(); } protected function newToken() { $curl = curl_init(); $auth = base64_encode($this->_usuario . ":" . $this->_senha); $fields = [ 'modulo' => $this->_modulo, 'assunto' => $this->_assunto ]; curl_setopt_array($curl, [ CURLOPT_URL => $this->_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_MAXREDIRS => 10, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $fields, CURLOPT_HTTPHEADER => [ "Authorization: Basic $auth" ], ]); $response = curl_exec($curl); curl_close($curl); $retorno = json_decode($response); if ($retorno->success != true) { if (!$this->setProximoUsuario(true)) { throw new Core_Exception("Bevicred: Falha na autenticação."); } return $this->newToken(); } $dataExpiracao = Carbon::now()->addHour(1)->format('Y-m-d H:i:s'); (new Model_DbTable_BancosTokenApi())->saveToken(0, $this->_usuarioId, $retorno->dados, $dataExpiracao); Model_UsuariosApi::gravarDataUtilizacao($this->_usuarioId); $this->_authorization = $retorno->dados; } 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']; } else { Yuppie_Log::write("Fim dos usuários.", $this); return false; } return true; } protected function getResponse($params) { $curl = curl_init(); $auth = base64_encode($this->_usuario . ':'); $fields = [ 'token' => $this->_authorization, 'modulo' => $this->_modulo, 'assunto' => $this->_assunto ] + $params; curl_setopt_array($curl, [ CURLOPT_URL => $this->_url, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_POSTFIELDS => $fields, CURLOPT_HTTPHEADER => [ "Authorization: Basic $auth" ], ]); $response = curl_exec($curl); curl_close($curl); return json_decode($response); } public function importar($dataImportacao) { if (empty($this->_authorization)) { $this->getTokenApi(); } foreach ($this->_dadosUsuarios as $usuario) { $result = $this->getProducao($dataImportacao); $this->_naoImportados = array_merge($this->_naoImportados, $result); if (!$this->setProximoUsuario()) { return $this->_naoImportados; } } return $this->_naoImportados; } public function getProducao($dataImportacao) { $modelBanco = new Model_Banco(); $propostas = []; $dataInicial = (new Zend_Date($dataImportacao))->subDay(3)->get('yyyy-MM-dd'); $dataFinal = (new Zend_Date($dataImportacao))->get('yyyy-MM-dd'); foreach (self::CODIGO_BANCOS as $key => $codigo) { $bancoId = $modelBanco->bancoPorNome($key); if (empty($bancoId)) { continue; } $params = [ 'periodoinicio' => $dataInicial, 'periodofim' => $dataFinal, 'codigobanco' => $codigo, ]; $response = $this->getResponse($params); if (empty($response)) { Yuppie_Log::write("Nenhuma informação retornada pelo serviço da Bevicred.", $this); return []; } if ($response->success == false && stristr($response->message, "Token Inválido")) { $this->newToken(); return $this->getProducao($dataImportacao); } $propostas[$key] = $response->dados; } return $this->importarContratos($propostas); } protected function importarContratos($propostas) { if (empty($propostas)) { Yuppie_Log::write("Nenhum contrato encontrato.", $this); return []; } $subEstabelecidoId = Model_Parceiro::getOrCreateSubstabelecido('BEVICRED'); $arquivo = new stdClass(); $naoImportados = []; foreach ($propostas as $banco => $contratos) { if (empty($contratos)) { continue; } $contratos = $this->toArray($contratos); $classBanco = Factory::load($banco); $arquivo->arquivo = 'Importação Bevicred: ' . $banco; $classBanco->setSubestabelecidoId($subEstabelecidoId); $classBanco->setInicioLaco(0); $classBanco->setArquivoOrigem($arquivo); $naoImportados = $classBanco->importar($contratos); } return $naoImportados; } protected function toArray($objeto): array { $return = []; array_map(function ($key) use (&$return) { $return[] = (array) $key; }, $objeto); return $return; } public function getErros() { } }
💾 保存文件
← 返回文件管理器