✏️ 正在编辑: Bmg.php
路径:
/srv/systems_dir/yuppiecred-lidernegocios/library/Core/Banco/Service/Bmg.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php class Core_Banco_Service_Bmg { private $_usuario; private $_senha; private $_url = "https://ws1.bmgconsig.com.br/webservices/SaqueComplementar?wsdl"; private $_client = null; private $_codEntidade = 1581; //INSS por padrão private $_sequencialOrgao = ""; private $_erros = ""; function __construct(array $options = null) { if( !$options ){ $config = new Zend_Config_Ini( CLIENT_PATH . '/configs/application.ini', APPLICATION_ENV); if( !isset($config->bancos->bmgws )){ $msgErro = 'WS do BMG não está configurado.'; throw new Core_Exception($msgErro); } $options = $config->bancos->bmgws->toArray(); } $this->setOptions($options); } public function setOptions(array $options) { $this->_usuario = $options['usuario']; $this->_senha = $options['senha']; return $this; } public function getUsuario() { return $this->_usuario; } public function getSenha() { return $this->_senha; } public function getUrl() { return $this->_url; } public function getErros() { return $this->_erros; } public function getCodEntidade() { return $this->_codEntidade; } public function setCodEntidade($codEntidade) { if (!empty($codEntidade)) { if (strstr("-", $codEntidade)) { $cods = explode("-", $codEntidade); $this->_codEntidade = String_Refatorar::soNumeros($cods[0]); $this->_sequencialOrgao = String_Refatorar::soNumeros($cods[1]); return; } $this->_codEntidade = $codEntidade; } } public function buscarPorCpf($cpfCliente) { $dados['cpf'] = String_Refatorar::formatarCpf($cpfCliente); $validate = new Validators_Cpf(); if( !$validate->isValid($dados['cpf']) ){ throw new Core_Exception("O CPF {$dados['cpf']} é inválido"); } return $this->buscarCartoesDisponiveis($dados); } 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 _requestBuscarCartoes($dados) { $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:buscarCartoesDisponiveis soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <param xsi:type="web:CartaoDisponivelParameter"> <login xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">{$this->_usuario}</login> <senha xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">{$this->_senha}</senha> <codigoEntidade xsi:type="xsd:int">{$this->_codEntidade}</codigoEntidade> <sequencialOrgao xsi:type="xsd:int">{$this->_sequencialOrgao}</sequencialOrgao> <cpf xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">{$dados['cpf']}</cpf> </param> </web:buscarCartoesDisponiveis> </soapenv:Body> </soapenv:Envelope> XML; $request = $this->_doRequest($request); return $this->_extrairDadosBuscaCartoes($request); } private function buscarCartoesDisponiveis(&$dados) { // try{ $result = $this->_requestBuscarCartoes($dados); $cartao['cpf'] = $dados['cpf']; $cartao['codigoEntidade'] = $this->_codEntidade; $cartao['cartoes'] = []; $qtdCartoes = count($result->cartoesRetorno); if( $qtdCartoes > 0 ){ foreach( $result->cartoesRetorno as $itemCartao ){ $item = (array)$itemCartao; $this->buscarLimiteSaque($dados['cpf'], $item, 1); $cartao['cartoes'][] = $item; } } return $cartao; // }catch(Exception $ex){ // $msg = str_replace("com.bmg.econsig.common.exception.ServiceException", "", $ex->getMessage()); // //vd($this->_client->__getLastRequest()); // throw new Core_Exception("Dados não localizados. (Retorno: {$msg})"); // } } protected function _requestBuscarLimiteSaque($cpfCliente, $cartao, $tipoSaque = 1) { $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:buscarLimiteSaque> <param xsi:type="ns1:DadosCartaoParameter"> <login xsi:type="SOAP-ENC:string">{$this->_usuario}</login> <senha xsi:type="SOAP-ENC:string">{$this->_senha}</senha> <loginConsig xsi:nil="true"/> <codigoEntidade xsi:type="xsd:int">{$this->_codEntidade}</codigoEntidade> <cpf xsi:type="SOAP-ENC:string">{$cpfCliente}</cpf> <sequencialOrgao xsi:type="xsd:int">{$this->_sequencialOrgao}</sequencialOrgao> <agregacaoDeMargemParaSaqueComplementar xsi:type="xsd:boolean">false</agregacaoDeMargemParaSaqueComplementar> <!-- <codigoTipoSeguro xsi:nil="true"/> --> <cpfImpedidoComissionar xsi:type="xsd:boolean">false</cpfImpedidoComissionar> <dadosLimiteDeSaqueComplementar xsi:nil="true"/> <ipUsuario xsi:nil="true"/> <matricula xsi:type="SOAP-ENC:string">{$cartao['matricula']}</matricula> <matriculaInstituidor xsi:nil="true"/> <numeroContaInterna xsi:type="xsd:long">{$cartao['numeroContaInterna']}</numeroContaInterna> <script xsi:nil="true"/> <tipoSaque xsi:type="xsd:int">{$tipoSaque}</tipoSaque> <valorAgregacaoDeMargemParaSaqueComplementar xsi:nil="true"/> <vinculoMatricula xsi:nil="true"/> </param> </ns1:buscarLimiteSaque> </SOAP-ENV:Body> </SOAP-ENV:Envelope> XML; $request = $this->_doRequest($request); return $this->_extrairDadosBuscaLimiteSaque($request); } /** * * @param string $cpfCliente * @param array $cartao * @param int $tipoSaque 1-SaqueAutorizado 2-SaqueAutorizadoParcelado 3-SaqueAutorizadoLojista 4-SaqueAutorizadoParceladoLojista 5-SaqueAutorizadoDecimoTerceiro */ private function buscarLimiteSaque($cpfCliente, &$cartao, $tipoSaque = 1) { $cartao['limite_cartao'] = 0; $cartao['valor_margem'] = 0; $cartao['saque_maximo'] = 0; $cartao['saque_minimo'] = 0; $cartao['saque_margem_complementar'] = 0; $result = $this->_requestBuscarLimiteSaque($cpfCliente, $cartao, $tipoSaque); Yuppie_Log::write(print_r($result, 1), $this); $cartao['limite_cartao'] = $result->limiteCartao->__toString(); $cartao['valor_margem'] = $result->valorMargem->__toString(); $cartao['saque_maximo'] = $result->valorSaqueMaximo->__toString(); $cartao['saque_minimo'] = $result->valorSaqueMinimo->__toString(); $cartao['saque_margem_complementar'] = $result->valorSaqueParaMargemComplementarComAgregacaoDeMargem->__toString(); } 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); curl_close($ch); $xml = simplexml_load_string($response, NULL, 0, "http://webservice.econsig.bmg.com"); if (false === $xml) { throw new Core_Exception('Não pode acessar WS BMG'); } if( !empty($xml->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->Fault->children()) ){ $msg = (string)$xml->children('http://schemas.xmlsoap.org/soap/envelope/') ->Body->Fault->children() ->faultstring; $msg = str_replace("com.bmg.econsig.common.exception.ServiceException:", "", $msg); throw new Core_Exception($msg); } return $xml; } protected function _extrairDadosBuscaCartoes($response) { $data = $response->children("soapenv", true)->children("ns1", true)->children(); return $data->buscarCartoesDisponiveisReturn->cartoesRetorno; } protected function _extrairDadosBuscaLimiteSaque($response) { $data = $response->children("soapenv", true)->children("ns1", true)->children(); return $data->buscarLimiteSaqueReturn; } protected function _clearCpf($cpf) { $number = preg_replace("/[^0-9]/", '', $cpf); if( strlen($number) < 11 ){ for( $i=0; $i<11; $i++ ){ $number = "0" . $number; } } return $number; } }
💾 保存文件
← 返回文件管理器