pedro-teixeira / correios

Módulo de frete para Magento com tracking
https://pedroteixeira.io
MIT License
110 stars 72 forks source link

Pop up com rastreamento não carrega #204

Closed hallandellon closed 7 years ago

hallandellon commented 7 years ago

Utilizava a versão 4.5. Depois que atualizei para a versão 4.7.2 do módulo, o popup que aparece quando clicamos no link para rastrear, tanto no frontend como no backend abre, porém fica carregando até dar time out. Já alterei o time out do ws no config.xml mas não resolveu. Detalhe: apesar do SUPEE 6788 estar instalado, estou com a função de compatibilidade ativada devido a incompatibilidade com alguns módulos ainda sem solução. Será que pode ser isso?

Versão Magento: 1.9.1 Módulo Correios: 4.7.2

jarjar123 commented 7 years ago

Hallan, aparece algum erro nos logs? É difícil diagnosticar sem ver alguma mensagem de erro. Envie os logs, inclusive do PHP. Mas pelo que descreveu, pode ser um problema com requisições externas no seu host, algum bloqueio no Soap, ou algo assim.

Em 21 de dez de 2016 1:53 PM, "Hallan" notifications@github.com escreveu:

Utilizava a versão 4.5. Depois que atualizei para a versão 4.7.2 do módulo, o popup que aparece quando clicamos no link para rastrear, tanto no frontend como no backend abre, porém fica carregando até dar time out. Já alterei o time out do ws no config.xml mas não resolveu. Detalhe: apesar do SUPEE 6788 estar instalado, estou com a função de compatibilidade ativada devido a incompatibilidade com alguns módulos ainda sem solução. Será que pode ser isso?

Versão Magento: 1.9.1 Módulo Correios: 4.7.2

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/pedro-teixeira/correios/issues/204, or mute the thread https://github.com/notifications/unsubscribe-auth/ADhJXml_Om_tFTMxw2a5ZJdF3-LCFreeks5rKUttgaJpZM4LTFvz .

hallandellon commented 7 years ago

@jarjar123 Verifiquei vários logs e nada de achar uma pista. Porém, através de outro post #176, comecei a ter uma linha de pensamento que poderia estar relacionado ao cron. Foi daí que verifiquei ontem um arquivo do cron do aoe_scheduler e descobri uma pasta tmp que estava na raiz do servidor e que tinha uns arquivos wsdl. Não tinha muita ideia do que fazer, mas vi que as permissões de 2 arquivos estavam para o root. Então, logo que alterei para o usuário do sistema, parece que destravou e voltou a funcionar normalmente. Sabe o que pode ter ocasionado isso?

rafaelpatro commented 7 years ago

Olá @hallandellon, que bom que funcionou!

Com a informação que me passou não sei dizer exatamente o que ocorreu. Mas parece estar relacionado com o parâmetro _wsdlcache. Sugiro manter este parâmetro do PHP desativado.

hallandellon commented 7 years ago

@jarjar123 Estava verificando o rastreamento de algumas encomendas e voltou a ocorrer novamente o looping de carregamento. Verifiquei o arquivo na pasta /tmp e as permissões foram alteradas sozinhas. Alterei novamente para o usuário www-data e voltou a funcionar. Desabilitando o o _wsdlcache não afeta outros recursos do sistema como comunicação com outras APIs? No meu caso estou integrado com o Bling.

rafaelpatro commented 7 years ago

Desativar o _wsdlcache não deve comprometer outros recursos ou APIs que utilizam o Soap no PHP. Contudo existe o risco de diminuir a performance das requisições Soap. Mas enfim, talvez isso nem faça diferença no desempenho. E talvez resolva seu problema.

brenofabio commented 7 years ago

Olá @rafaelpatro

Estou com o mesmo problema, porém desativar o wsdl_cache não resolveu, fiz alguns testes e salvei os logs.

NGINX/error.log

2017/03/08 03:29:18 [error] 9729#9729: *1504 upstream timed out (110: Connection timed out) while reading response header from upstream (fastcgi unix php-fpm.sock)

PHP-FPM/error.log

[08-Mar-2017 03:37:17] WARNING: [pool www] child 11046, script '/.../index.php' (request: "GET /index.php") executing too slow (12.812424 sec), logging
[08-Mar-2017 03:37:17] NOTICE: child 11046 stopped for tracing
[08-Mar-2017 03:37:17] NOTICE: about to trace 11046
[08-Mar-2017 03:37:17] NOTICE: finished trace of 11046

PHP-FPM/slow.log

[08-Mar-2017 03:37:17]  [pool www] pid 11046
script_filename = /.../html/index.php
[0x00007fee31215110] SoapClient() /.../app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php:607
[0x00007fee31215040] _getTrackingRequest() /.../app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php:689
[0x00007fee31214f60] _getTracking() /.../app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php:579
[0x00007fee31214ec0] getTracking() /.../app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php:556
[0x00007fee31214e10] getTrackingInfo() /.../app/code/core/Mage/Sales/Model/Order/Shipment/Track.php:153
[0x00007fee31214d60] getNumberDetail() /.../app/code/core/Mage/Shipping/Model/Info.php:123
[0x00007fee31214c40] getTrackingInfoByOrder() /.../app/code/core/Mage/Shipping/Model/Info.php:53
[0x00007fee31214b80] loadByHash() /.../app/code/community/MercadoPago/MercadoEnvios/Model/Observer.php:65
[0x00007fee31214ac0] trackingPopup() /.../app/code/core/Mage/Core/Model/App.php:1358
[0x00007fee312149f0] _callObserverMethod() /.../app/code/core/Mage/Core/Model/App.php:1331
[0x00007fee31214860] dispatchEvent() /.../app/Mage.php:448
[0x00007fee312147b0] dispatchEvent() /.../app/code/core/Mage/Core/Controller/Varien/Action.php:531
[0x00007fee312146e0] preDispatch() /.../app/code/core/Mage/Core/Controller/Front/Action.php:69
[0x00007fee31214660] preDispatch() /.../app/code/core/Mage/Core/Controller/Varien/Action.php:407
[0x00007fee312144e0] dispatch() /.../app/code/core/Mage/Core/Controller/Varien/Router/Standard.php:254
[0x00007fee31214370] match() /.../app/code/core/Mage/Core/Controller/Varien/Front.php:172
[0x00007fee312142b0] dispatch() /.../app/code/core/Mage/Core/Model/App.php:365
[0x00007fee312141e0] run() /.../app/Mage.php:683
[0x00007fee31214100] run() /.../index.php:83~
marcospaf commented 7 years ago

olá pessoal, estamos com o mesmo problema aqui depois que atualizamos para a versão. Existe alguma maneira de desabilitar este monitoramento automático? estávamos utilizando a versão 4.2 e resolvemos atualizar para 4.7 estamos tendo estes problemas. existe alguma maneira de desabilitar este rastreio automático?

rafaelpatro commented 7 years ago

Sim. É bem simples, basta remover a tag cron do arquivo config.xml

Em 13 de mar de 2017 9:17 PM, "Marcos" notifications@github.com escreveu:

olá pessoal, estamos com o mesmo problema aqui depois que atualizamos para a versão. Existe alguma maneira de desabilitar este monitoramento automático? estávamos utilizando a versão 4.2 e resolvemos atualizar para 4.7 estamos tendo estes problemas. existe alguma maneira de desabilitar este rastreio automático?

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/pedro-teixeira/correios/issues/204#issuecomment-286283750, or mute the thread https://github.com/notifications/unsubscribe-auth/ANLIzHlwaTUfLSNLebndONFYkYUhoT6yks5rldyvgaJpZM4LTFvz .

brenofabio commented 7 years ago

No meu caso desabilitar o rastreio automático também não resolveu, ao clicar no link para abir o pop-up de rastreamento o erro ocorre novamente.

O problema do wsdl_cache está ocorrendo somente com servidores nginx?

rafaelpatro commented 7 years ago

Olá @brenofabio Você consegue testar o SoapClient em um script isolado para ver se funciona no seu servidor?

rafaelpatro commented 7 years ago

Tenta algo assim:

            $client = new SoapClient('http://webservice.correios.com.br/service/rastro/Rastro.wsdl');
            $response = $client->buscaEventos(array(
                'usuario' => 'ECT',
                'senha' => 'SRO',
                'tipo' => 'L',
                'resultado' => 'U',
                'lingua' => '101',
                'objetos' => 'CODIGO_DE_RASTREAMENTO_VALIDO',
            ));
            var_dump($response);
brenofabio commented 7 years ago

Olá @rafaelpatro Fiz o teste com seu script e deu o mesmo problema, só consegui a resposta depois de 240 segundos. newrelic

brenofabio commented 7 years ago

Retorno: object(stdClass)#2 (1) { ["return"]=> object(stdClass)#3 (3) { ["versao"]=> string(3) "2.0" ["qtd"]=> string(1) "1" ["objeto"]=> object(stdClass)#4 (5) { ["numero"]=> string(13) "DW892651174BR" ["sigla"]=> string(2) "DW" ["nome"]=> string(30) "ENCOMENDA SEDEX (ETIQ LÓGICA)" ["categoria"]=> string(5) "SEDEX" ["evento"]=> object(stdClass)#5 (10) { ["tipo"]=> string(2) "DO" ["status"]=> string(2) "01" ["data"]=> string(10) "28/03/2017" ["hora"]=> string(5) "17:50" ["descricao"]=> string(19) "Objeto encaminhado " ["local"]=> string(18) "CTE BELO HORIZONTE" ["codigo"]=> string(8) "31276970" ["cidade"]=> string(14) "BELO HORIZONTE" ["uf"]=> string(2) "MG" ["destino"]=> object(stdClass)#6 (5) { ["local"]=> string(12) "CTCE GOIANIA" ["codigo"]=> string(8) "74905970" ["cidade"]=> string(20) "APARECIDA DE GOIANIA" ["bairro"]=> string(13) "VILA BRASILIA" ["uf"]=> string(2) "GO" } } } } }

brenofabio commented 7 years ago

Segui uma dica no stackoverflow , fiz alguns testes e aparentemente resolveu.

Parece que por causa do keep-alive, a conexão não é fechada e só recebo a resposta após o timeout. Ajustando o cabeçalho da requisição com o _streamcontext dá pra contornar o problema.

Alterei a linha 607 do arquivo CorreiosMethod.php

$client = new SoapClient($this->getConfigData('url_sro_correios'),array(
    'stream_context'=>stream_context_create(
        array('http'=>
            array(
                'protocol_version'=>'1.1',
                'header' => 'Connection: Close'
            )
        )
    )
));
hallandellon commented 7 years ago

Olá @brenofabio

Após a alteração que você sugeriu no CorreiosMethod.php, aparentemente resolveu o problema. Vou acompanhar para ver se não volta a ocorrer.

Obrigado pelas informações.

On Wed, Mar 29, 2017 at 1:05 AM, brenofabio notifications@github.com wrote:

Segui uma dica no stackoverflow http://stackoverflow.com/questions/5944067/php-soapclient-constructor-is-very-slow-takes-3-minutes, fiz alguns testes e aparentemente resolveu.

Parece que por causa do keep-alive, a conexão não é fechada e só recebo a resposta após o timeout. Ajustando o cabeçalho da requisição com o stream_context dá pra contornar o problema.

Alterei a linha 607 do arquivo CorreiosMethod.php

$client = new SoapClient($this->getConfigData('url_sro_correios'),array( 'stream_context'=>stream_context_create( array('http'=> array( 'protocol_version'=>'1.1', 'header' => 'Connection: Close' ) ) )));

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/pedro-teixeira/correios/issues/204#issuecomment-289976142, or mute the thread https://github.com/notifications/unsubscribe-auth/ADIOQ_JaCHiMgTMFPID01Cwks8NcYd3jks5rqdhygaJpZM4LTFvz .

rafaelpatro commented 7 years ago

Bom dia @brenofabio. Que bom que conseguiu resolver.

Envia uma PR com as alterações que vc fez. Tenho certeza que vai ajudar muita gente.

Se possível coloca a versão do Nginx, do PHP, e do SOAP. Pois sabemos que é um problema que não ocorre em todos os ambientes.

brenofabio commented 7 years ago

@rafaelpatro enviei a PR com as alterações.