Olá Pessoal,
Eu fiz uma alteração rápida para funcionar no módulo do Pedro, montando o XML igual ao retornado pelo SOAP dos Correios usando as novas APIs.
Temos que adicionar algumas linhas no método _getCorreiosReturn do fonte:
PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php
deixando ele assim:
protected function _getCorreiosReturn()
{
include_once “correiosapi.php”;
$idCorreios = “Id_de_entrada_no_portal”;
$codAcesso = “cod_acesso_gerado_no_portal”;
$cartao = “numero_cartao_postagem”;
$access_code = base64_encode($idCorreios . “:” . $codAcesso);
$tokenA = getToken($access_code, $cartao);
if (false === $tokenA) {
Mage::log(“correiosapi: Erro: nao conseguiu pegar token!”);
return false;
}
$token = $tokenA[1];
$expiraEm = $tokenA[0];
// vamos ver quantos servicos temos para buscar
$metods = explode(“,”, $this->_postMethods);
//Mage::log(“metods=” . $this->_postMethods);
$xml_total=”<Servicos>”;
foreach($metods as $metod) {
$ret_xml = correiosapi($token, $metod, $this->_fromZip, $this->_toZip, $this->_packageWeight * 1000, 1, $this->_midSize, $this->_midSize, $this->_midSize, “”, 0);
$xml_total .= $ret_xml;
}
$xml_total .= “</Servicos>”;
$xml = new SimpleXMLElement($xml_total);
//Mage::log(“xml=” . print_r($xml,true));
//Mage::log(“xml_total=” . print_r($xml_total,true));
return $xml->cServico;
//aqui seria a continuacao do metodo, mas nao vai passar, tem um return antes
$filename = $this->getConfigData(‘url_ws_correios’);
try {
$client = new Zend_Http_Client($filename);
$client->setConfig(
array(
‘timeout’ => $this->getConfigData(‘ws_timeout’),
…
…
Tem que fazer download do correiosapi.php e deixar na mesma pasta.
Ele pode ser melhorado, buscando dados que foram digitados acima lá do admin do Pedro, mas não deu tempo para isto!
Está funcionando em 5 lojas de Magento 1.9.X com as versões 4.9.0 e 4.5.0.
Rotina, pegar aqui: wget http://lx13.letti.com.br/correiosapi.php.zip
Ou Aqui
Espero ter ajudado!
A.Letti
Esse link: http://lx13.letti.com.br/correiosapi.php.zip não está funcionando, por favor você pode postar a versão correta?
Olá Flávio, você não consegue fazer o download? O que você quer dizer com versão correta?
Não consegui baixar também, aparece um monte de caracteres estranhos na tela e não aparece nada para baixar
Então, estando em ssh no servidor, você faz um wget da url que ele baixa direto no server e depois você abre o zip!
Sou um tanto amador, estou tentando ajudar um amigo que esta tendo problema, existe alguma forma de baixar o php e subir o arquivo no servidor por ftp?
Consegui baixar aqui com um wget portable hehehe
Vou fazer a mudanças aqui e testar, logo retorno para dizer se funcionou
Desculpa estar atormentando com isso.
Seria possível disponibilizar o arquivo CorreiosMethod.php com as modificações?
(provavelmente por falta de conhecimento) não estou conseguindo, inclui o codigo acima onde indicou e retorna a seguinte mensagem quando tento calcular o frete
“Parse error: syntax error, unexpected ‘portal”’ (T_STRING) in /home/protecaodacabeca/www/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 311”
Você tem que colocar os 3 dados do seu contrato nestas variáveis!
$idCorreios = “Id_de_entrada_no_portal”;
$codAcesso = “cod_acesso_gerado_no_portal”;
$cartao = “numero_cartao_postagem”;
Verifique se a palavra portal ficou sobrando, tem que ter aspas e ; no final de cada linha!
Certo, coloquei os 3 dados nas variaveis, conferi o ; e se tinha palavra portal sobrando
O que esta aparecendo agora é o seguinte:
Parse error: syntax error, unexpected ‘:’, expecting ‘)’ in /home/protecaodacabeca/www/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 315
Vou colocar o código completo abaixo ocultando os 3 dados com ***
protected function _getCorreiosReturn()
{
include_once “correiosapi.php”;
$idCorreios = “*********”;
$codAcesso = “*********”;
$cartao = “*********”;
$access_code = base64_encode($idCorreios . “:” . $codAcesso);
$tokenA = getToken($access_code, $cartao);
if (false === $tokenA) {
Mage::log(“correiosapi: Erro: nao conseguiu pegar token!”);
return false;
}
$token = $tokenA[1];
$expiraEm = $tokenA[0];
// vamos ver quantos servicos temos para buscar
$metods = explode(“,”, $this->_postMethods);
//Mage::log(“metods=” . $this->_postMethods);
$xml_total=””;
foreach($metods as $metod) {
$ret_xml = correiosapi($token, $metod, $this->_fromZip, $this->_toZip, $this->_packageWeight * 1000, 1, $this->_midSize, $this->_midSize, $this->_midSize, “”, 0);
$xml_total .= $ret_xml;
}
$xml_total .= “”;
$xml = new SimpleXMLElement($xml_total);
//Mage::log(“xml=” . print_r($xml,true));
//Mage::log(“xml_total=” . print_r($xml_total,true));
return $xml->cServico;
//aqui seria a continuacao do metodo, mas nao vai passar, tem um return antes
$filename = $this->getConfigData(‘url_ws_correios’);
try {
$client = new Zend_Http_Client($filename);
$client->setConfig(
array(
‘timeout’ => $this->getConfigData(‘ws_timeout’),
$filename = $this->getConfigData(‘url_ws_correios’);
try {
$client = new Zend_Http_Client($filename);
$client->setConfig(
array(
‘timeout’ => $this->getConfigData(‘ws_timeout’),
‘adapter’ => Mage::getModel(‘pedroteixeira_correios/http_client_adapter_socket’)
)
);
$client->setParameterGet(‘StrRetorno’, ‘xml’);
$client->setParameterGet(‘nCdServico’, $this->_postMethods);
$client->setParameterGet(‘nVlPeso’, $this->_packageWeight);
$client->setParameterGet(‘sCepOrigem’, $this->_fromZip);
$client->setParameterGet(‘sCepDestino’, $this->_toZip);
$client->setParameterGet(‘nCdFormato’, 1);
$client->setParameterGet(‘nVlComprimento’, $this->_midSize);
$client->setParameterGet(‘nVlAltura’, $this->_midSize);
$client->setParameterGet(‘nVlLargura’, $this->_midSize);
if ($this->getConfigData(‘mao_propria’)) {
$client->setParameterGet(‘sCdMaoPropria’, ‘S’);
} else {
$client->setParameterGet(‘sCdMaoPropria’, ‘N’);
}
if ($this->getConfigData(‘aviso_recebimento’)) {
$client->setParameterGet(‘sCdAvisoRecebimento’, ‘S’);
} else {
$client->setParameterGet(‘sCdAvisoRecebimento’, ‘N’);
}
if ($this->getConfigData(‘valor_declarado’)
|| in_array($this->getConfigData(‘acobrar_code’), $this->_postMethodsExplode)
) {
$client->setParameterGet(‘nVlValorDeclarado’, number_format($this->_packageValue, 2, ‘,’, ”));
} else {
$client->setParameterGet(‘nVlValorDeclarado’, 0);
}
$nCdEmpresa = $this->getConfigData(‘cod_admin’);
$sDsSenha = $this->getConfigData(‘senha_admin’);
if (!empty($nCdEmpresa) && !empty($sDsSenha)) {
$client->setParameterGet(‘nCdEmpresa’, $nCdEmpresa);
$client->setParameterGet(‘sDsSenha’, $sDsSenha);
}
$content = $client->request()->getBody();
if ($content == ”) {
throw new Exception(‘No XML returned [‘ . __LINE__ . ‘]’);
}
libxml_use_internal_errors(true);
$sxe = simplexml_load_string($content);
if (!$sxe) {
throw new Exception(‘Bad XML [‘ . __LINE__ . ‘]’);
}
$xml = new SimpleXMLElement($content);
if (count($xml->cServico) cServico;
} catch (Exception $e) {
$this->_throwError(‘urlerror’, ‘URL Error – ‘ . $e->getMessage(), __LINE__);
return false;
}
}
era para parar na linha de comentário abaixo!
//aqui seria a continuacao do metodo, mas nao vai passar, tem um return antes
Nem esta linha precisava levar, você copiou um trecho a mais que está descrito abaixo
try {
$client = new Zend_Http_Client($filename);
$client->setConfig(
array(
‘timeout’ => $this->getConfigData(‘ws_timeout’),
se tirar estas linhas que foram a mais deve sumir o erro de sintaxe!
Sigo na luta aqui hehehehe (estou honestamente sem graça de ficar enchendo o saco aqui, mas estou realmente na tentativa e erro por conta do meu pouco conhecimento com php)
Agora o erro que aparece é esse
“Parse error: syntax error, unexpected ‘:’, expecting ‘)’ in /home/protecaodacabeca/www/app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php on line 303”
Como ficou o código tirando tudo abaixo da linha que disse:
protected function _getCorreiosReturn()
{
include_once “correiosapi.php”;
$idCorreios = “**********”;
$codAcesso = “**********”;
$cartao = “**********”;
$access_code = base64_encode($idCorreios . “:” . $codAcesso);
$tokenA = getToken($access_code, $cartao);
if (false === $tokenA) {
Mage::log(“correiosapi: Erro: nao conseguiu pegar token!”);
return false;
}
$token = $tokenA[1];
$expiraEm = $tokenA[0];
// vamos ver quantos servicos temos para buscar
$metods = explode(“,”, $this->_postMethods);
//Mage::log(“metods=” . $this->_postMethods);
$xml_total=””;
foreach($metods as $metod) {
$ret_xml = correiosapi($token, $metod, $this->_fromZip, $this->_toZip, $this->_packageWeight * 1000, 1, $this->_midSize, $this->_midSize, $this->_midSize, “”, 0);
$xml_total .= $ret_xml;
}
$xml_total .= “”;
$xml = new SimpleXMLElement($xml_total);
//Mage::log(“xml=” . print_r($xml,true));
//Mage::log(“xml_total=” . print_r($xml_total,true));
return $xml->cServico;
}
O correto é colocar todo o fonte, pois pode ter erro após as linhas inseridas, por conta de você ter insrrido mais coisas! Mas o último } acima acho que está errado!
coloca o código todo pra nos?
Vitor, você conseguiu solucionar?
Até agora não, comecei a refazer o site em woocommerce pq ta sendo mais rapido do que corrigir os recorrentes problemas que temos com o magenta. Pedro Teixeira bem que podia soltar atualização hehehe
Gente, não é difícil. Segue os passos:
1 – baixar o arquivo correiosapi.php e colocar no diretório: app/code/community/PedroTeixeira/Correios/Model/Carrier/
SÓ VAI FUNCIONAR SE ESSE AQUIVO ESTIVER AQUI.
2 – Tem que abrir o portal https://cws.correios.com.br e/ou falar com o gerente dos correios. Você precisa ter um usuário e uma senha da API. O teu gerente consegue rapidinho isso se tu não tiver.
Você mesmo consegue gerar isso dentro desse painel, no menu “gestão de acesso a API’s”
3 – DEPOIS que vc tem esses dados + cartão de postagem vai pro passo 4
4 – abre o arquivo app/code/community/PedroTeixeira/Correios/Model/Carrier/CorreiosMethod.php apaga tudo e insere o código que deixei pronto no pastebin https://pastebin.com/vZta6sbP
5 -TROCA AS CREDENCIAIS ali pela linha 276 e salva.
6 – Se vc fez tudo certo já vai funcionar.
Obrigado A.Letti por disponibilizar o código!
Se alguém precisar de ajuda profissioanl me chama no linkedin https://br.linkedin.com/in/davilevecke
gostaria de uma solucao profissional, inclusicve tenho outras demandas, pode entrar em contato comigo? instagram @vipracing
Para mim funcionou parcialmente agora está apontando problema nas dimensões:
” Correios
Dimensões dos produtos fora do permitido pelos Correios.”
E está tudo OK com as dimensões, esse é um dos produtos mais vendidos antes dessa troca de api, aconteceu com mais alguém?
Vim aqui agradecer a postagem, pois me salvou. Funcionou direitinho.
Como agradecimento, fiz algumas mudanças na solução, principalmente incluindo um documento útil, dos correios e reutilizando campos para incluir os dados de acesso no Painel de Controle do Magento ao invés de inseridos manualmente no código fonte.
A solução está no meu Git: https://gitlab.com/d.position1/pedroteixeira-correios-fix-api-token
Olá Danilo,
Fico contente, vou olhar o que a sua contribuição está fazendo!
Obrigado,
Abraços!