✏️ 正在编辑: Banrisul.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Banrisul/Banrisul.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Service_Banrisul_Banrisul implements Core_Banco_Service_ImportacaoDireta { private $_usuario; private $_senha; private $_tipo; private $_bancoId; private $_url = ''; private $_tokenPath = ''; private $_token = ''; private $_client = null; private $_erros; public function __construct(Zend_Config $config, $bancoNome = null) { $this->_bancoId = Model_Banco::bancoPorNome('banrisul'); if(empty($this->_bancoId)){ throw new Yuppie_Exception("O banco Banrisul não foi configurado"); } $this->_tokenPath = APPLICATION_PATH . '/../data/access/' . Yuppie_Auth::getSiteKey() . '-' . $config->usuario . '-token.php'; $this->_url = 'https://webservice.bempromotora.com.br:4443/IntegracaoCorban.asmx?wsdl'; $this->_usuario = $config->usuario; $this->_senha = $config->senha; $this->_tipo = ($bancoNome == 'BANRISUL-COMISSAO') ? 'comissao' : 'producao'; } function getUsuario() { return $this->_usuario; } function getSenha() { return $this->_senha; } function getUrl() { return $this->_url; } function getErros() { return $this->_erros; } protected function getClient() { $opts = array( 'http'=>array( 'user_agent' => 'PHP/SOAP' ) ); $context = stream_context_create($opts); ini_set('default_socket_timeout', 600); $client = new SoapClient($this->getUrl(), array( 'trace' => true, 'soap_version' => SOAP_1_1, 'connection_timeout' => 500000, 'cache_wsdl' => WSDL_CACHE_BOTH, 'keep_alive' => true, 'stream_context' => $context, 'exception' => true, )); return $client; } public function importar($dataImportacao = null) { $data = self::formatData($dataImportacao); if($this->autenticacao()){ switch ($this->_tipo){ case "comissao": $propostas = $this->getPropostasComissao($data); $result = $this->detalhamentoPropostasComissao($propostas); $planilha = new Core_Banco_Service_Banrisul_WebServiceComissionamento($this->_bancoId, null); $return = $planilha->importar($result); break; case "producao" : $propostas = $this->getPropostas($data); $result = $this->detalhamentoPropostas($propostas); $planilha = new Core_Banco_Service_Banrisul_WebServiceProducao($this->_bancoId, null); $return = $planilha->importar($result); break; } return $return; } } /** * 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 de importação não pode ser convertida'); } return $data; } /** * 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() { $this->_client = $this->getClient(); if( $this->tokenIsValid() ){ $this->_token = $this->getToken(); return true; } $this->geraNovoToken(); return true; } /** * Acessa o webservice e retorna o detalhamento de determinada proposta * * @param string $proposta * @return string xml response */ protected function consultaDetalhamentoProposta($proposta) { $this->_client->ConsultaDetalhamentoProposta(array( 'tokenParam' => $this->_token, 'proposta' => $proposta )); return $this->_client->__getLastResponse(); } /** * Acessa o webservice e retorna o detalhamento da comissao de determinada proposta * * @param string $contrato * @return string xml response */ protected function consultaDetalhamentoComissao($contrato) { $this->_client->ConsultaDetalhamentoComissao(array( 'tokenParam' => $this->_token, 'Contrato' => $contrato )); return $this->_client->__getLastResponse(); } /** * Acessa o webservice e retorna comissões de determinada data * * @param string $dataMovimento * @return string xml response */ protected function consultaComissoesProposta($dataMovimento) { $result = $this->_client->ConsultaComissao(array( 'tokenParam' => $this->_token, 'DataComissao' => $dataMovimento )); if($result->ConsultaComissaoResult->any == '<ERRO xmlns="">Token inválido!</ERRO>'){ $this->geraNovoToken(); } return $this->_client->__getLastResponse(); } /** * Acessa o webservice e retorna o número das propostas de determinada data * * @param string $dataMovimento * @return string xml response */ protected function consultaPropostasMovimentadas($dataMovimento) { $result = $this->_client->ConsultaPropostasMovimentadas(array( 'tokenParam' => $this->_token, 'DataMovimento' => $dataMovimento )); if($result->ConsultaPropostasMovimentadasResult->any == '<ERRO xmlns="">Token inválido!</ERRO>'){ $this->geraNovoToken(); } return $this->_client->__getLastResponse(); } /** * Número das propostas de determinada data com tratamento XML * * @param string $dataMovimento * @return array */ protected function getPropostas($dataMovimento) { $propostas = array(); $xmlString = $this->consultaPropostasMovimentadas($dataMovimento); $xml = simplexml_load_string($xmlString, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/"); $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); $response = $xml->xpath('//soap:Body//Proposta//Numero/text()'); foreach ( $response as $proposta ) { array_push($propostas, $proposta->__toString()); } return $propostas; } /** * Número das propostas de determinada data com tratamento XML * * @param string $dataMovimento * @return array */ protected function getPropostasComissao($dataMovimento) { $propostas = array(); $xmlString = $this->consultaComissoesProposta($dataMovimento); $xml = simplexml_load_string($xmlString, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/"); $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); $response = $xml->xpath('//soap:Body//DadosComissao//Contrato/text()'); foreach ( $response as $proposta ) { array_push($propostas, $proposta->__toString()); } return $propostas; } /** * Todas as propostas detalhadas * * @param array $propostas * @return array */ protected function detalhamentoPropostas($propostas) { $propostasDetalhadas = array(); foreach ( $propostas as $proposta ) { $result = $this->detalheProposta($proposta); if( $result ){ array_push($propostasDetalhadas, $result); } } return $propostasDetalhadas; } /** * Todas as comissoes detalhadas * * @param array $propostas * @return array */ protected function detalhamentoPropostasComissao($propostas) { $propostasDetalhadas = array(); foreach ( $propostas as $proposta ) { $result = $this->detalhePropostaComissao($proposta); if( $result ){ array_push($propostasDetalhadas, $result); } } return $propostasDetalhadas; } /** * Trata o XML de cada proposta * * @param string $proposta * @return array */ public function detalheProposta($proposta) { $fieldsProposta = array(); $xmlString = $this->consultaDetalhamentoProposta($proposta); $xml = simplexml_load_string($xmlString, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/"); $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); $codigoResponse = $xml->xpath('//soap:Body//CodRetorno//text()'); if( empty($codigoResponse) || $codigoResponse[0]->__toString() != '0' ){ return null; } $response = $xml->xpath('//soap:Body//DadosProposta//text()'); $observacoes = $xml->xpath('//soap:Body//Observacoes'); $numeroProposta = $xml->xpath('//soap:Body//Proposta//text()'); $numeroProposta = $numeroProposta[0]->__toString(); foreach ( $response as $proposta ) { if (!isset($fieldsProposta[$numeroProposta][$proposta->getName()])){ $fieldsProposta[$numeroProposta][$proposta->getName()] = $proposta->__toString(); } } if ( !isset($fieldsProposta[$numeroProposta]['obs']) && dom_import_simplexml(current($observacoes))->childNodes->length ){ $texto = ""; foreach( $observacoes[0]->Observacao as $obs ){ $texto .= $obs->Texto . "\n" . $obs->Usuario . "\n" . $obs->DataHora . "\n\n"; } $fieldsProposta[$numeroProposta]['obs'] = $texto; } return $fieldsProposta; } /** * Transforma o XML de cada proposta num array indexado * * @param string $proposta * @return array */ public function detalhePropostaComissao($proposta) { $dadosComissao = array(); $xmlString = $this->consultaDetalhamentoComissao($proposta); $xml = simplexml_load_string($xmlString, NULL, NULL, "http://schemas.xmlsoap.org/soap/envelope/"); $xml->registerXPathNamespace('soap', 'http://schemas.xmlsoap.org/soap/envelope/'); $codigoResponse = $xml->xpath('//soap:Body//CodRetorno//text()'); if( empty($codigoResponse) || $codigoResponse[0]->__toString() != '0' ){ return null; } $dadosTemp = $xml->xpath('//soap:Body//DadosComissao'); $numeroProposta = $xml->xpath('//soap:Body//Contrato//text()'); $numeroProposta = $numeroProposta[0]->__toString(); foreach ( $dadosTemp as $key => $value ) { foreach ( $value as $k => $v ) { $dadosComissao[$numeroProposta][$key][$k] = $v->__toString(); } } return $dadosComissao; } /** * Verifica se o token expirou depois de 24hrs * * @return boolean */ protected function tokenIsValid() { if( !file_exists($this->_tokenPath)){ return false; } $config = include $this->_tokenPath; if( !$config || $config['data_hora'] <= strtotime('-24 hours') ){ return false; } return true; } /** * Coleta o token definido na construcao do objeto * * @return string token */ protected function getToken() { $config = include $this->_tokenPath; if( $config ){ return isset($config['token']) ? $config['token'] : null; } } /** * Salva o token no arquivo * * @param string $token * * @throws Zend_Config_Exception */ protected function saveToken($token) { $config = new Zend_Config(array( 'token' => $token, 'data_hora' => Zend_Date::now()->getTimestamp() ), true); $writer = new Zend_Config_Writer_Array(array( 'config' => $config, 'filename' => $this->_tokenPath )); $writer->write(); } /** * Se alguém acessar com o mesmo usuário e senha o token no servidor é modificado, é necessário gerar outro, caso isso ocorra. */ protected function geraNovoToken() { $result = $this->_client->Autenticacao(array( "usuario" => $this->getUsuario(), "senha" => $this->getSenha())); $this->saveToken($result->AutenticacaoResult); } }
💾 保存文件
← 返回文件管理器