✏️ 正在编辑: WebService.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Bmg/WebService.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Service_Bmg_WebService implements Core_Banco_Service_ImportacaoDireta { private $_indiceUsuario = 0; private $_dadosUsuarios; private $_usuarioId; private $_usuario; private $_senha; private $_usuarioConsig; private $_senhaConsig; private $_bancoId; private $_erros; protected $_client = null; private $_url = ''; private $_naoImportados; protected $naoImportados = []; public function __construct() { $this->_bancoId = Model_Banco::bancoPorNome('BMG'); if(empty($this->_bancoId)){ throw new Yuppie_Exception("O banco BMG não foi configurado"); } $this->_dadosUsuarios = Model_UsuariosApi::getByApi('BMG', 'importacao'); if (count($this->_dadosUsuarios) == 0) { $msgErro = 'Nenhum usuário de WS 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->_usuarioConsig = $this->_dadosUsuarios[$this->_indiceUsuario]['usuario_consig']; $this->_senhaConsig = $this->_dadosUsuarios[$this->_indiceUsuario]['senha_consig']; $this->_erros = []; } public function getBancoId() { return $this->_bancoId; } public function getErros() { return $this->_erros; } private function addErro($mensagem) { array_push($this->_erros, $mensagem); } function getUsuario() { return $this->_usuario; } function getSenha() { return $this->_senha; } function getUrl() { return $this->_url; } protected function getClient() { $opts = [ 'http'=> [ 'user_agent' => 'PHPSoapClient' ] ]; $context = stream_context_create($opts); ini_set('default_socket_timeout', 600); $client = new SoapClient($this->getUrl(), [ 'trace' => true, 'soap_version' => SOAP_1_1, 'connection_timeout' => 500000, 'cache_wsdl' => WSDL_CACHE_NONE, 'keep_alive' => true, 'stream_context' => $context, 'exception' => true, ]); return $client; } protected function getLogger($tipoImportacao) { /* Apenas para LOG */ $urlSistema = Yuppie_Auth::getSiteKey(); $writer = new Zend_Log_Writer_Stream("/var/log/sistemayuppie/zf_log_webservice_{$urlSistema}_" . date('dmY') . ".txt"); $classeChamada = get_class($this); $log = new Zend_Log($writer); $log->log('#######################', Zend_Log::INFO); $log->log("IMPORTAÇÃO $tipoImportacao: " . $classeChamada, Zend_Log::INFO); $log->log('ARQUIVO IMPORTADO: ' . print_r('webservice', true), Zend_Log::INFO); $log->log("Usuário logado: " . Yuppie_Auth::getIdentity()->login, Zend_Log::INFO); return $log; } public function importar($dataImportacao = null) { foreach ($this->_dadosUsuarios as $usuario) { if (empty($dataImportacao)) { $dt = new DateTime(); $dataImportacao = $dt->format('Y-m-d'); } $data = Core_Util::convertDate($dataImportacao); $retorno = $this->buscarStatus($data); if (!empty($retorno['erro'])) { if (!$this->setProximoUsuario()) { throw new Core_Exception($retorno['erro']); } continue; } $statusLista = $this->extrairDadosStatus($retorno); $contratos = $this->buscarContratos($statusLista); $producao = new Core_Banco_Service_Bmg_Producao($this->getBancoId()); $arquivo = new stdClass(); $arquivo->arquivo = 'ImportacaoDireta: WebService BMG'; $producao->setArquivoOrigem($arquivo); $result = $producao->importar($contratos); $this->_naoImportados = array_merge($this->_naoImportados, $result); if (!$this->setProximoUsuario()) { return $this->_naoImportados; } } return $this->_naoImportados; } public function buscarStatus($dataMovimento) { $this->_url = "https://ws1.bmgconsig.com.br/webservices/ConsultaStatusAde?wsdl"; $request = <<<XML <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://webservice.econsig.bmg.com"> <soapenv:Header/> <soapenv:Body> <web:consultaStatusAde soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <param xsi:type="web:ConsultaStatusAdeParameter"> <login xsi:type="soapenc:string">{$this->_usuario}</login> <senha xsi:type="soapenc:string">{$this->_senha}</senha> <dataFinal xsi:type="xsd:dateTime">{$dataMovimento}T23:59:59</dataFinal> <dataInicial xsi:type="xsd:dateTime">{$dataMovimento}T00:00:00</dataInicial> <listaAdes xsi:type="con:ArrayOf_soapenc_string" soapenc:arrayType="soapenc:string[]" xmlns:con="http://localhost:8080/webservices/ConsultaStatusAde" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/> <loginConsig xsi:type="soapenc:string">{$this->_usuarioConsig}</loginConsig> <senhaConsig xsi:type="soapenc:string">{$this->_senhaConsig}</senhaConsig> </param> </web:consultaStatusAde> </soapenv:Body> </soapenv:Envelope> XML; return $this->_doRequest($request, $this->_url, 'consultaStatusAde', 0); } private function extrairDadosStatus($response) { $data = $response->children("soapenv", true)->children("ns1", true)->children(); return $data->consultaStatusAdeReturn->listaStatus; } protected function buscarContratos($sheetDataStatus) { if (empty($sheetDataStatus)) { return; } $sheetData = []; foreach ($sheetDataStatus->listaStatus as $adesao) { $numeroAde = $adesao->numero; $cpf = $adesao->cpfCliente; try { $xml = $this->buscarAdesao($numeroAde, $cpf); if (is_array($xml) && !empty($xml['erro'])) { continue; } $dados = $xml->children("soapenv", true)->children("ns1", true)->children()->children()->children(); $sheetData[] = $this->montarDados($dados); Yuppie_Log::write("Dados retornados pelo montarDados => " . print_r($dados, true), $this); } catch ( Exception $e ) { Yuppie_Log::write("Falha na importação direta BMG. ADE: {$adesao->numero}, CPF: {$adesao->cpfCliente}" . $e->getMessage()); } } Yuppie_Log::write("BMG contratos retonados => " . print_r($sheetData, true), $this); return $sheetData; } protected function buscarAdesao($numeroAde, $cpfCliente) { $this->_url = "https://ws1.bmgconsig.com.br/webservices/DadosAdesao?wsdl"; $request = <<<XML <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://webservice.econsig.bmg.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://parameter.common.econsig.bmg.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP-ENV:Body> <ns1:buscaAdesao> <parameter xsi:type="ns1:BuscaAdesaoParameter"> <login xsi:type="SOAP-ENC:string">{$this->_usuario}</login> <senha xsi:type="SOAP-ENC:string" >{$this->_senha}</senha> <adeNumero xsi:type="SOAP-ENC:string">{$numeroAde}</adeNumero> <cpf xsi:type="SOAP-ENC:string">{$cpfCliente}</cpf> <loginConsig xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"></loginConsig> <senhaConsig xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"></senhaConsig> <senhaSME xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"></senhaSME> <status xsi:type="xsd:int">-1</status> <utilizaUserConsig xsi:type="xsd:boolean">false</utilizaUserConsig> </parameter> </ns1:buscaAdesao> </SOAP-ENV:Body> </SOAP-ENV:Envelope> XML; return $this->_doRequest($request); } protected function _doRequest($xmlPostString) { $headers = [ "Content-type: text/xml;charset=\"utf-8\"", "Accept: text/xml", "Cache-Control: no-cache", "Pragma: no-cache", "SOAPAction: {$this->_url}", "Content-length: ".strlen($xmlPostString), ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_URL, $this->_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 10); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlPostString); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $response = curl_exec($ch); $info = curl_getinfo($ch); curl_close($ch); Yuppie_Log::write("Request Webservice BMG => " . print_r($xmlPostString, true)); Yuppie_Log::write("Response Webservice BMG => " . print_r($response, true)); Yuppie_Log::write("INFO Webservice BMG => " . print_r($info, true)); if (empty($response)) { return ['erro' => 'Webservice não retornou nenhuma informação!']; } $xml = simplexml_load_string($response, NULL, 0, "http://webservice.econsig.bmg.com"); if (false === $xml) { return ['erro' => 'Não pode acessar WS BMG']; } if (!empty($xml->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault)) { $msg = (string)$xml->children('http://schemas.xmlsoap.org/soap/envelope/') ->Body->Fault->children() ->faultstring; $msg = str_replace("com.bmg.econsig.common.exception.ServiceException:", "", $msg); return ['erro' => $msg]; } return $xml; } protected function montarDados($dados) { return [ 'numero_contrato' => current($dados->identificador), 'numero_ade' => current($dados->numero), 'codigo_convenio' => current($dados->registro->orgao->codigoEntidade), 'convenio' => current($dados->registro->orgao->nome), 'codigo_tabela' => current($dados->coeficiente->codigoTabela), 'tabela' => current($dados->produto) . ' - ' . current($dados->verbaConvenio->convenio->servico->descricao), 'produto' => current($dados->produto), 'nome_produto' => current($dados->produto) . ' - ' . current($dados->verbaConvenio->convenio->servico->descricao), 'nome_servico' => current($dados->verbaConvenio->convenio->servico->descricao), 'situacao_proposta' => current($dados->situacao), 'status_proposta' => current($dados->statusDescricao), 'prazo' => current($dados->coeficiente->quantidadePrestacoes), 'valor_liquido' => current($dados->valorLiberado), 'valor_bruto' => current($dados->valorLiberado), 'valor_prestacao' => current($dados->valorPrestacao), 'valor_adiantamento' => current($dados->adiantamento->valorLiberado), 'data_emissao' => current($dados->data), 'data_liberacao' => current($dados->dataPagamento), 'taxa_emprestimo' => current($dados->coeficiente->taxa), 'obs' => current($dados->informacao), 'agencia_beneficiado' => current($dados->dadosBancarios->agencia->numero), 'banco_beneficiado' => current($dados->dadosBancarios->banco->codigo), 'conta_beneficiado' => current($dados->dadosBancarios->conta->numero), 'forma_liberacao' => current($dados->dadosBancarios->finalidadeCredito->descricao), 'tipo_formalizacao' => current($dados->documentacaoEletronica) == 'true' ? 'Digital' : 'Fisica', 'cpf_agente' => current($dados->agente->cpf), 'codigo_agente' => current($dados->usuario->login), 'cpf_cliente' => current($dados->registro->servidor->cpf), 'nome_cliente' => current($dados->registro->servidor->nome), 'data_nascimento' => current($dados->registro->servidor->dataNascimento), 'rg' => current($dados->registro->servidor->identidade->numero), 'data_expedicao' => current($dados->registro->servidor->identidade->dataEmissao), 'orgao_expedidor' => current($dados->registro->servidor->identidade->emissor), 'uf_expedidor' => current($dados->registro->servidor->identidade->uf), 'sexo' => current($dados->registro->servidor->sexo), 'cep' => current($dados->registro->servidor->contato->formaContato->endereco->cep), 'endereco' => current($dados->registro->servidor->contato->formaContato->endereco->logradouro), 'complemento' => current($dados->registro->servidor->contato->formaContato->endereco->complemento), 'numero' => current($dados->registro->servidor->contato->formaContato->endereco->numero), 'bairro' => current($dados->registro->servidor->contato->formaContato->endereco->bairro), 'cidade' => current($dados->registro->servidor->contato->formaContato->endereco->cidade), 'uf' => current($dados->registro->servidor->contato->formaContato->endereco->uf), 'email' => current($dados->registro->servidor->contato->formaContato->email->email), 'fone' => current($dados->registro->servidor->contato->formaContato->telefone->ddd) . ' ' . current($dados->registro->servidor->contato->formaContato->telefone->numero), 'celular' => current($dados->registro->servidor->contato->formaContato->telefoneCelular1->ddd) .' '. current($dados->registro->servidor->contato->formaContato->telefoneCelular1->numero), 'renda' => current($dados->registro->renda), 'numero_beneficio' => current($dados->registro->matricula), 'especie' => current($dados->registro->tipoBeneficio->codigo), 'nome_mae' => current($dados->registro->servidor->nomeMae), 'nome_pai' => current($dados->registro->servidor->nomePai) ]; } 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->_usuarioConsig = $this->_dadosUsuarios[$this->_indiceUsuario]['usuario_consig']; $this->_senhaConsig = $this->_dadosUsuarios[$this->_indiceUsuario]['senha_consig']; } else { Yuppie_Log::write("Fim dos usuários.", $this); return false; } return true; } }
💾 保存文件
← 返回文件管理器