✏️ 正在编辑: BonsucessoStatus.php
路径:
/srv/systems_dir/yuppiecred/library/Core/Banco/Service/BonsucessoStatus.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Service_BonsucessoStatus implements Core_Banco_Service_ImportacaoDireta { private $_indiceUsuario = 0; private $_dadosUsuarios; private $_usuarioId; private $_oleKey; private $_devKey; private $_bancoId; private $_url = ''; private $_token; private $_erros; public function __construct() { $this->_bancoId = Model_Banco::bancoPorNome('BONSUCESSO'); if (empty($this->_bancoId)) { throw new Yuppie_Exception("O banco Bonsucesso não está cadastrado."); } $this->_dadosUsuarios = Model_UsuariosApi::getByApi('BONSUCESSO'); 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->_oleKey = $this->_dadosUsuarios[$this->_indiceUsuario]['usuario']; $this->_devKey = $this->_dadosUsuarios[$this->_indiceUsuario]['senha']; $this->_erros = []; $this->_url = 'https://gw-externo.oleconsignado.com.br/'; } public function getErros() { return $this->_erros; } private function addErro($mensagem) { array_push($this->_erros, $mensagem); } public function importar($dataImportacao = null) { $falhaImportacao = []; foreach ($this->_dadosUsuarios as $usuario) { if ($this->autenticacao()) { $data = self::formatData($dataImportacao); $planilha = new Core_Banco_Service_Bonsucesso_WebService($this->_bancoId, null); $result = $this->getContratos($data); if (count($result) > 0) { $retorno = $planilha->importarStatus($result); } $falhaImportacao = array_merge($falhaImportacao, $retorno); if (!$this->setProximoUsuario()) { return $falhaImportacao; } } } return $falhaImportacao; } /** * Transforma a data para o padrão Y-m-d * * @param string $dataImportacao * @return string * * @throws Yuppie_Exception */ private static function formatData($dataImportacao) { if (empty($dataImportacao)){ $dt = new DateTime(); return $dt->sub(new DateInterval('P1D'))->format('Y-m-d'); } $data = Core_Util::convertDate($dataImportacao, 'd/m/Y'); if( is_array($data) ){ throw new Yuppie_Exception('Data inválida'); } return $data; } /** * Consulta os dados no webservice do banco * * @param $metodo * @param $tipo * @param $data * @return array * * @throws Core_Exception */ public function getContratos($data) { $url = $this->_url.'openpropostaapi/v2/propostas'; $params = [ 'Status' => 'Todos', 'DataInicio' => $data, 'DataFim' => $data ]; $response = $this->getResponse($url, $params); if( empty($response) ){ $this->addErro("Houve uma falha na comunicação com o serviço. Por favor tente novamente em alguns instantes."); return; }elseif( empty($response->propostas) ){ $this->addErro("Não houve atualização de status para esta data."); return; } return $this->extrairDados((array) $response->propostas); } /** * Extrai os dados do json retornado pelo webservice * * @param string $metodo * @param string $response * @return array */ private function extrairDados($propostas) { $dados = []; foreach ( $propostas as $key => $proposta ) { if(empty($proposta->numero)){ continue; } $dados[$key]['numero_proposta'] = $proposta->numero; $dados[$key]['nome_cliente'] = $proposta->cliente->nome; $dados[$key]['cpf_cliente'] = $proposta->cliente->cpf; $dados[$key]['tipo_operacao'] = $proposta->tipoOperacao; $dados[$key]['codigo_produto'] = $proposta->produto->codigo; $dados[$key]['descricao_produto'] = $proposta->produto->descricao; $dados[$key]['descricao_status'] = $proposta->status->descricao; $dados[$key]['data_atualizacao'] = $proposta->dataUltimaAtualizacao; $dados[$key]['descricao_fase'] = $proposta->fase->descricao; $dados[$key]['codigo_fase'] = $proposta->fase->codigo; $dados[$key]['data_fase'] = $proposta->fase->dataAtualizacao; $dados[$key]['codigo_convenio'] = $proposta->convenio->codigo; $dados[$key]['descricao_convenio'] = $proposta->convenio->nome; } return $dados; } /** * Método responsável por gerar a chave de acesso (TOKEN) para consumir os demais métodos. * OBS.: Cada token tem validade de 24 horas * * @return boolean */ public function autenticacao() { $url = $this->_url.'opensegurancaapi/v1/auth'; $this->_token = $this->requestToken($url, null, true, true); Model_UsuariosApi::gravarDataUtilizacao($this->_usuarioId); if (empty($this->_token)) { if ($this->setProximoUsuario(true)) { return $this->autenticacao(); } return false; } return true; } public function requestToken($url, $params, $auth = false, $post = false) { $headerAuth = [ "x-ole-auth-key:".strtolower($this->_oleKey), "x-developer-application-key:".strtolower($this->_devKey) ]; $curl = curl_init(); curl_setopt($curl,CURLOPT_RETURNTRANSFER,true); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_POSTFIELDS,$params); curl_setopt($curl,CURLOPT_POST,$post); curl_setopt($curl,CURLOPT_ENCODING,"UTF-8"); curl_setopt($curl,CURLOPT_HEADER, 1); curl_setopt($curl,CURLOPT_HTTPHEADER, $headerAuth); $response = curl_exec($curl); curl_close($curl); preg_match_all("/access-token:\s([^\n\r]+)/", $response, $match); return current($match[1]); } public function getResponse($url, $params) { $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url."?".http_build_query($params), CURLOPT_RETURNTRANSFER => true, CURLOPT_ENCODING => "", CURLOPT_MAXREDIRS => 10, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_POSTFIELDS => "", CURLOPT_HTTPHEADER => array( "Authorization: bearer ". $this->_token, "cache-control: no-cache", "x-developer-application-key: ". strtolower($this->_devKey) ), )); $response = json_decode(curl_exec($curl)); $err = curl_error($curl); curl_close($curl); 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->_oleKey = $this->_dadosUsuarios[$this->_indiceUsuario]['usuario']; $this->_devKey = $this->_dadosUsuarios[$this->_indiceUsuario]['senha']; } else { Yuppie_Log::write("Fim dos usuários.", $this); return false; } return true; } }
💾 保存文件
← 返回文件管理器