✏️ 正在编辑: Api.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Credfranco/Api.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php use Carbon\Carbon; class Core_Banco_Service_Credfranco_Api { private $_url = 'https://gestao.sistemas-credfranco.com.br'; private $_indiceUsuario = 0; private $_dadosUsuarios; private $_usuarioId; private $_usuario; private $_senha; private $_authorization; private $_naoImportados = []; private $_erros; public function __construct() { $this->_dadosUsuarios = Model_UsuariosApi::getByApi('CREDFRANCO', 'importacao'); if (count($this->_dadosUsuarios) <= 0) { $msgErro = 'Nenhum usuário de API cadastrado.'; throw new Core_Exception($msgErro); } $this->_usuarioId = $this->_dadosUsuarios[$this->_indiceUsuario]['id']; $this->_usuario = $this->_dadosUsuarios[$this->_indiceUsuario]['usuario']; $this->_senha = $this->_dadosUsuarios[$this->_indiceUsuario]['senha']; } public function getUrl() { return $this->_url; } public function getUsuario() { return $this->_usuario; } public function getSenha() { return $this->_senha; } public function getAutorization() { return $this->_authorization; } public function getErros() { return $this->_erros; } 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() { $endPoint = '/api/v2/login'; $curl = curl_init(); $params = [ 'login' => $this->getUsuario(), 'senha' => $this->getSenha() ]; curl_setopt_array($curl, [ CURLOPT_URL => $this->getUrl() . $endPoint, CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => "POST", CURLOPT_POSTFIELDS => json_encode($params), CURLOPT_HTTPHEADER => [ "Content-Type: application/json" ], ]); $response = curl_exec($curl); $info = curl_getinfo($curl); curl_close($curl); $token = json_decode($response); Yuppie_Log::write("Retorno da geração de token => " . print_r($response, true), $this); Yuppie_Log::write("INFO da geração de token => " . print_r($info, true), $this); if (empty($token->data->jwt)) { if (!$this->setProximoUsuario(true)) { throw new Core_Exception($token->message); } return $this->newToken(); } $dataExpiracao = Carbon::now()->addHour(2)->format('Y-m-d H:i:s'); (new Model_DbTable_BancosTokenApi())->saveToken(0, $this->_usuarioId, $token->data->jwt, $dataExpiracao); Model_UsuariosApi::gravarDataUtilizacao($this->_usuarioId); $this->_authorization = $token->data->jwt; } protected function setProximoUsuario($erroAutenticacao = false) { $this->_authorization = null; 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; } public function importar($dataImportacao = null) { if (empty($dataImportacao)) { throw new Core_Exception('Data não informada.'); } $subEstabelecidoId = Model_Parceiro::getOrCreateSubstabelecido('CREDFRANCO'); foreach ($this->_dadosUsuarios as $usuario) { $contratos = $this->getContratos($dataImportacao); $contratosDetalhe = $this->getContratosDetalhe($contratos); $contratosFull = $this->tratarContratos($contratosDetalhe); $producao = new Core_Banco_Service_Credfranco_Producao(); $arquivo = new stdClass(); $arquivo->arquivo = 'ImportacaoDireta: Credfranco'; $producao->setArquivoOrigem($arquivo); $producao->setSubestabelecidoId($subEstabelecidoId); $result = $producao->importar($contratosFull); $this->_naoImportados = array_merge($this->_naoImportados, $result); if (!$this->setProximoUsuario()) { return $this->_naoImportados; } } return $this->_naoImportados; } public function getContratos($data) { if (empty($this->getAutorization())) { $this->getTokenApi(); } $dtProposta = new Zend_Date($data); $endPoint = "/api/v2/proposal/filter"; $params = [ 'dataMovimentacaoInicio' => $dtProposta->get('yyyy-MM-dd'), 'dataMovimentacaoFim' => $dtProposta->get('yyyy-MM-dd') ]; $response = $this->getResponse($endPoint, $params); $contratos = []; foreach ($response->data as $item) { $contratos[] = $item->Codigo_Proposta_Webcred; } return $contratos; } public function getContratosDetalhe($contratos) { if (empty($this->getAutorization())) { $this->getTokenApi(); } $endPoint = "/api/v2/proposal/details"; $contratosDetalhe = []; foreach ($contratos as $key => $contrato) { $contratosDetalhe[$key] = $this->getResponse($endPoint, $contrato); } return $contratosDetalhe; } public function tratarContratos($contratosDetalhe) { $contratosFull = []; foreach ($contratosDetalhe as $key => $contrato) { $contatos = is_array($contrato->data->client->Contatos) ? current($contrato->data->client->Contatos) : $contrato->data->client->Contatos; $contratosFull[$key] = array_merge( (array) $contrato->data->proposal, (array) $contrato->data->client, (array) $contatos, (array) $contrato->data->operation, (array) $contrato->data->commission ); } return $contratosFull; } protected function getResponse($endPoint, $params, $method = 'GET') { $url = $this->_url . $endPoint; $options = [ CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => [ "Authorization: Bearer {$this->getAutorization()}" ], ]; if ($method == "GET") { $url .= is_array($params) ? '?' . http_build_query($params) : '/' . $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 Credfranco parâmetros enviados para url {$url}:" . print_r($params, true), $this); Yuppie_Log::write("Retorno do getResponse Service Credfranco:" . print_r($response, true), $this); if ($info['http_code'] != 200) { $retorno = new stdClass(); $retorno->msg = "Falha de comunicação com o Credfranco"; return $retorno; } $response = json_decode($response); if (stristr($response->message, "Token Expirado")) { $this->newToken(); return $this->getResponse($endPoint, $params, $method); } if (!empty($response->error) || !empty($response->message)) { Yuppie_Log::write($response->message ?? 'Houve um erro inesperado.', $this); } return $response; } }
💾 保存文件
← 返回文件管理器