rafaelpatro / Quack_TntBrasil

Módulo de frete via TNT Mercúrio, para Magento
GNU General Public License v3.0
6 stars 6 forks source link

Uso do módulo #2

Closed AndreiLN closed 6 years ago

AndreiLN commented 6 years ago

Olá, Não conseguimos utilizar o módulo, temos uma página que calcula o frete quando acionada via ajax, e ela não retorna a opção TNT mesmo estando habilitado no painel adm, e porque não tem configuração da senha de acesso ao Webservice da TNT?

Página:

<?php
error_reporting(E_ALL);
set_time_limit(0);
require_once '../app/Mage.php';
Mage::app();

$cep        = $_POST['cep'];
$qty        = (int)$_POST['qty'];
$productid  = $_POST['produto'];
$_product   = Mage::getModel('catalog/product')->load($productid);
$quote      = Mage::getModel('sales/quote');
$cdServico = array('04162'=>'SEDEX', '04669'=>'PAC');

if($cep == ""){
    echo "Cep não informado";
    exit();
}

if($qty == "" || $qty == 0 || !is_numeric($qty)){
    echo "A quantidade informada é inválida.";
    exit();
}

//echo $_product->type_id;die();
if($_product->type_id == 'grouped'){
    $grouped_products = $_product->getTypeInstance(true)->getAssociatedProducts($_product);
    foreach($grouped_products as $grouped){
        $quote->addProductAdvanced($grouped, $grouped->getQty());
    }
}
elseif($_product->type_id == 'configurable'){
    $conf = Mage::getModel('catalog/product_type_configurable')->setProduct($_product);
    $simple_collection = $conf->getUsedProductCollection()->addAttributeToSelect('*')->addFilterByRequiredOptions();
    foreach($simple_collection as $simple_product){
        $quote->addProductAdvanced($simple_product, $qty);
        break;
    }
}
elseif($_product->type_id == 'simple'){
    $quote->addProductAdvanced($_product, $qty);
}
else{
    echo "O tipo de produto é inválido.";
    exit();
}

$quote->getShippingAddress()->setCountryId('BR');
$quote->getShippingAddress()->setPostcode($cep);
$quote->getShippingAddress()->collectTotals();
$quote->getShippingAddress()->setCollectShippingRates(true);
$quote->getShippingAddress()->collectShippingRates();
$rates = $quote->getShippingAddress()->getShippingRatesCollection();

$metodos = array();
foreach ($rates as $rate) {
    $title = $rate->getMethodTitle();

    if($cdServico[$rate->getMethod()]){
        $msgDias = explode('-', $title);
        $title = $cdServico[$rate->getMethod()];
        $title .= count($msgDias)==3 ? ' - '.$msgDias[2] : '';
    }
    $metodos[$rate->getCarrierTitle()][] = array(
        'title' => $title,
        'price' => Mage::helper('core')->currency( $rate->getPrice() )
    );  
}

$html = '<dl class="sp-methods">';
foreach ($metodos as $key => $value) {
    $html .= '<dt>'.$key.'</dt>';
    $html .= '<dd><ul style="margin:0">';
    foreach ( $value as $v) {
        $html .= '<li style="margin:0"><label>'.$v['title'].': <span class="price">'.$v['price'].'</span></label></li>';
    }
    $html .= '</ul></dd>';
}
$html .= '</dl>';
echo $html;

Alguém consegue nos dar uma mãozinha e dizer se estamos fazendo algo errado?

rafaelpatro commented 6 years ago

Boa tarde @AndreiLN

Realmente a TNT não solicita senha. Mas vc precisa solicitar o cadastro do seu e-mail, e precisa informar o e-mail nas configurações do módulo. É assim q eles identificam o cliente.

Testou seu script com outros métodos de entrega, e funcionou? Pode enviar um print das configurações do módulo?

AndreiLN commented 6 years ago

Sim Sr, Segundo o nosso cliente o email dele já está cadastrado e configurado no painel.

Com outras formas de entrega funciona tudo normalmente. Prints da configuração: tool1 tool2 tool3

rafaelpatro commented 6 years ago

Consegue enviar os logs?

AndreiLN commented 6 years ago

Arquivo exception.log:

2018-05-03T17:07:18+00:00 ERR (3): 
exception 'Mage_Core_Exception' with message 'Array
(
    [string] => Divisão do remetente não confere com o cadastro.
)
' in /home/dosulsis/public_html/lojatoolbras/app/Mage.php:580
Stack trace:
#0 /home/dosulsis/public_html/lojatoolbras/app/code/community/Quack/TntBrasil/Model/Carrier.php(87): Mage::exception('Mage_Core', 'Array\n(\n    [st...')
#1 /home/dosulsis/public_html/lojatoolbras/app/code/core/Mage/Shipping/Model/Shipping.php(209): Quack_TntBrasil_Model_Carrier->collectRates(Object(Mage_Shipping_Model_Rate_Request))
#2 /home/dosulsis/public_html/lojatoolbras/app/code/core/Mage/Shipping/Model/Shipping.php(129): Mage_Shipping_Model_Shipping->collectCarrierRates('tntbrasil', Object(Mage_Shipping_Model_Rate_Request))
#3 /home/dosulsis/public_html/lojatoolbras/app/code/core/Mage/Sales/Model/Quote/Address.php(944): Mage_Shipping_Model_Shipping->collectRates(Object(Mage_Shipping_Model_Rate_Request))
#4 /home/dosulsis/public_html/lojatoolbras/app/code/core/Mage/Sales/Model/Quote/Address.php(875): Mage_Sales_Model_Quote_Address->requestShippingRates()
#5 /home/dosulsis/public_html/lojatoolbras/ajax/calc-frete-product-page.php(51): Mage_Sales_Model_Quote_Address->collectShippingRates()
#6 {main}
rafaelpatro commented 6 years ago

Esse erro é referente ao número da filial que vai te atender. Como eu não sabia os outros códigos, acabei deixando por fazer essa parte.

Pede pra TNT o código da divisão que te atende, e ajusta lá no arquivo Office.php.

AndreiLN commented 6 years ago

Legal, No nosso caso é JOI mesmo, é código 2 pelo que vejo né? Ajustei e agora o erro mudou para:

2018-05-03T17:26:54+00:00 ERR (3): 
exception 'Mage_Core_Exception' with message 'Array
(
    [string] => CEP Origem Inválido.
)
' in /home/dosulsis/public_html/lojatoolbras/app/Mage.php:580
Stack trace:
#0 /home/dosulsis/public_html/lojatoolbras/app/code/community/Quack/TntBrasil/Model/Carrier.php(87): Mage::exception('Mage_Core', 'Array\n(\n    [st...')
#1 /home/dosulsis/public_html/lojatoolbras/app/code/core/Mage/Shipping/Model/Shipping.php(209): Quack_TntBrasil_Model_Carrier->collectRates(Object(Mage_Shipping_Model_Rate_Request))
#2 /home/dosulsis/public_html/lojatoolbras/app/code/core/Mage/Shipping/Model/Shipping.php(129): Mage_Shipping_Model_Shipping->collectCarrierRates('tntbrasil', Object(Mage_Shipping_Model_Rate_Request))
#3 /home/dosulsis/public_html/lojatoolbras/app/code/core/Mage/Sales/Model/Quote/Address.php(944): Mage_Shipping_Model_Shipping->collectRates(Object(Mage_Shipping_Model_Rate_Request))
#4 /home/dosulsis/public_html/lojatoolbras/app/code/core/Mage/Sales/Model/Quote/Address.php(875): Mage_Sales_Model_Quote_Address->requestShippingRates()
#5 /home/dosulsis/public_html/lojatoolbras/ajax/calc-frete-product-page.php(51): Mage_Sales_Model_Quote_Address->collectShippingRates()
#6 {main}

Mas pelo que vi o cep está configurado certo.

AndreiLN commented 6 years ago

Com o Cep 89294-000 funciona (É o cep que aparece no painel da TNT quando seleciono o CNPJ), porém eu preciso manter o Cep correto do local para o módulo dos correios funcionar hehe.

Será que se alterarmos o cadastro na TNT irá funcionar?

rafaelpatro commented 6 years ago

Ele pega o CEP de origem a partir das Configurações de Entrega do Magento. E não faz nenhuma validação do campo. Veja se funciona deixando apenas números (sem pontuação).

AndreiLN commented 6 years ago

Fixei o CEP que está configurado no painel TNT na linha que você citou, agora está funcionando. Muito obrigado.