From 9c69354c942f8e9df18265aac59e8442a93fb4e7 Mon Sep 17 00:00:00 2001 From: Hans Bonini Date: Wed, 17 Aug 2016 22:54:18 -0300 Subject: [PATCH 1/3] =?UTF-8?q?Verificando=20se=20SOAPClient=20est=C3=A1?= =?UTF-8?q?=20ativo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Atualização para verificar se a biblioteca SOAP existe no PHP e executar a função busca CEP sem interferencias. --- .../controllers/AjaxController.php | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/app/code/community/Inovarti/Onestepcheckout/controllers/AjaxController.php b/app/code/community/Inovarti/Onestepcheckout/controllers/AjaxController.php index 70f0c00..ce1ab51 100755 --- a/app/code/community/Inovarti/Onestepcheckout/controllers/AjaxController.php +++ b/app/code/community/Inovarti/Onestepcheckout/controllers/AjaxController.php @@ -731,6 +731,7 @@ public function check_taxvatAction() } $this->getResponse()->setBody(Zend_Json::encode($data)); } + public function busca_cepAction() { if ($this->getRequest()->getPost()) { $cep = $this->getRequest()->getPost('cep', false); @@ -747,29 +748,34 @@ public function busca_cepAction() { ); $return = ''; - try { + if ( class_exists("SOAPClient") ) { + try { - $clientSoap = new SoapClient("https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl", array( - 'soap_version' => SOAP_1_1, 'encoding' => 'utf-8', 'trace' => true, 'exceptions' => true, - 'cache_wsdl' => WSDL_CACHE_BOTH, 'connection_timeout' => 5 - )); + $clientSoap = new SoapClient("https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl", array( + 'soap_version' => SOAP_1_1, 'encoding' => 'utf-8', 'trace' => true, 'exceptions' => true, + 'cache_wsdl' => WSDL_CACHE_BOTH, 'connection_timeout' => 5 + )); - $result = $clientSoap->consultaCep($soapArgs); - $dados = $result->return; + $result = $clientSoap->consultaCep($soapArgs); + $dados = $result->return; - if (is_soap_fault($result)) { - $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; - }else{ - $return = "var resultadoCEP = { 'uf' : '".$dados->uf."', 'cidade' : '".$dados->cidade."', 'bairro' : '".$dados->bairro."', 'tipo_logradouro' : '', 'logradouro' : '".$dados->end."', 'resultado' : '1', 'resultado_txt' : 'sucesso%20-%20cep%20completo' }"; - } + if (is_soap_fault($result)) { + $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; + }else{ + $return = "var resultadoCEP = { 'uf' : '".$dados->uf."', 'cidade' : '".$dados->cidade."', 'bairro' : '".$dados->bairro."', 'tipo_logradouro' : '', 'logradouro' : '".$dados->end."', 'resultado' : '1', 'resultado_txt' : 'sucesso%20-%20cep%20completo' }"; + } - } catch (SoapFault $e) { - $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; - } catch (Exception $e) { - $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; - } + } catch (SoapFault $e) { + $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; + } catch (Exception $e) { + $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; + } - $this->getResponse()->setBody($return); + $this->getResponse()->setBody($return); + } + else { + Mage::log('Módulo SOAPClient desabilitado no PHP.', null, 'onestepcheckout.log'); + } } } From 2230d1267744c1d5d3bb829affaae56ab9262fb4 Mon Sep 17 00:00:00 2001 From: Hans Bonini Date: Wed, 17 Aug 2016 23:11:59 -0300 Subject: [PATCH 2/3] =?UTF-8?q?Verifica=20se=20SOAPClient=20est=C3=A1=20at?= =?UTF-8?q?ivo=20e=20se=20URL=20do=20Webservice=20est=C3=A1=20ativa?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Função ping adicionada para verificar além do módulo PHP SoapClient ativo, a URL do Webservice do correios também está ativa. --- .../controllers/AjaxController.php | 71 +++++++++++++------ 1 file changed, 49 insertions(+), 22 deletions(-) diff --git a/app/code/community/Inovarti/Onestepcheckout/controllers/AjaxController.php b/app/code/community/Inovarti/Onestepcheckout/controllers/AjaxController.php index ce1ab51..6d98bec 100755 --- a/app/code/community/Inovarti/Onestepcheckout/controllers/AjaxController.php +++ b/app/code/community/Inovarti/Onestepcheckout/controllers/AjaxController.php @@ -748,34 +748,61 @@ public function busca_cepAction() { ); $return = ''; + $soapURI = "https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl"; + if ( class_exists("SOAPClient") ) { - try { - - $clientSoap = new SoapClient("https://apps.correios.com.br/SigepMasterJPA/AtendeClienteService/AtendeCliente?wsdl", array( - 'soap_version' => SOAP_1_1, 'encoding' => 'utf-8', 'trace' => true, 'exceptions' => true, - 'cache_wsdl' => WSDL_CACHE_BOTH, 'connection_timeout' => 5 - )); - - $result = $clientSoap->consultaCep($soapArgs); - $dados = $result->return; - - if (is_soap_fault($result)) { - $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; - }else{ - $return = "var resultadoCEP = { 'uf' : '".$dados->uf."', 'cidade' : '".$dados->cidade."', 'bairro' : '".$dados->bairro."', 'tipo_logradouro' : '', 'logradouro' : '".$dados->end."', 'resultado' : '1', 'resultado_txt' : 'sucesso%20-%20cep%20completo' }"; - } - - } catch (SoapFault $e) { - $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; - } catch (Exception $e) { - $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; - } + if ( $this->ping($soapURI) ) { + try { + + $clientSoap = new SoapClient($soapURI, array( + 'soap_version' => SOAP_1_1, 'encoding' => 'utf-8', 'trace' => true, 'exceptions' => true, + 'cache_wsdl' => WSDL_CACHE_BOTH, 'connection_timeout' => 5 + )); + + $result = $clientSoap->consultaCep($soapArgs); + $dados = $result->return; - $this->getResponse()->setBody($return); + if (is_soap_fault($result)) { + $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; + }else{ + $return = "var resultadoCEP = { 'uf' : '".$dados->uf."', 'cidade' : '".$dados->cidade."', 'bairro' : '".$dados->bairro."', 'tipo_logradouro' : '', 'logradouro' : '".$dados->end."', 'resultado' : '1', 'resultado_txt' : 'sucesso%20-%20cep%20completo' }"; + } + + } catch (SoapFault $e) { + $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; + } catch (Exception $e) { + $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'cep nao encontrado' }"; + } + } + else { + $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'Webservice SOAP dos Correios bloqueado ou indisponível.' }"; + Mage::log('Webservice SOAP dos Correios bloqueado ou indisponível.', null, 'onestepcheckout.log'); + } } else { + $return = "var resultadoCEP = { 'uf' : '', 'cidade' : '', 'bairro' : '', 'tipo_logradouro' : '', 'logradouro' : '', 'resultado' : '0', 'resultado_txt' : 'Módulo SOAPClient desabilitado no PHP.' }"; Mage::log('Módulo SOAPClient desabilitado no PHP.', null, 'onestepcheckout.log'); } + $this->getResponse()->setBody($return); + } + + protected function ping ($host, $timeout = 1) { + /* ICMP ping packet with a pre-calculated checksum */ + $package = "\x08\x00\x7d\x4b\x00\x00\x00\x00PingHost"; + $socket = socket_create(AF_INET, SOCK_RAW, 1); + socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, array('sec' => $timeout, 'usec' => 0)); + socket_connect($socket, $host, null); + + $ts = microtime(true); + socket_send($socket, $package, strLen($package), 0); + if (socket_read($socket, 255)) { + $result = true; + } else { + $result = false; + } + socket_close($socket); + + return $result; } } From cf7fa4e068dcbad3386d1f4a69a8062e935c45f3 Mon Sep 17 00:00:00 2001 From: Hans Bonini Date: Wed, 17 Aug 2016 23:19:45 -0300 Subject: [PATCH 3/3] Validation.js alterado para mensagem de erro Validation.js alterado para receber mensagem de erro do atributo resultado_txt da resposta JSON. --- skin/frontend/base/default/onestepcheckout/js/validation.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/skin/frontend/base/default/onestepcheckout/js/validation.js b/skin/frontend/base/default/onestepcheckout/js/validation.js index e0ecbc3..f3bd540 100644 --- a/skin/frontend/base/default/onestepcheckout/js/validation.js +++ b/skin/frontend/base/default/onestepcheckout/js/validation.js @@ -175,7 +175,7 @@ function buscaCep(quale) { }); jQuery('input[name*="street[2]"]').focus(); } else { - alert("Endereço não encontrado para o cep "); + alert(resultadoCEP["resultado_txt"]); } }); } @@ -196,7 +196,7 @@ function buscaCep(quale) { }); jQuery('input[name*="' + quale + '[street][2]"]').focus(); } else { - alert("Endereço não encontrado para o cep "); + alert(resultadoCEP["resultado_txt"]); } }); }