Fórum OpenCart Brasil

Por um e-commerce livre, confiável e profissional

Suporte para extensões de Formas de Pagamento
Por fab26x
#838
Ola Para todos.

Pagseguro 1.4.8 2

Os problemas:

Erro 1. Se o item vendido nao tem frete. O erro aparece na pagina.
Notice: Undefined index: shipping_method in /home/bras32/public_html/test/catalog/view/theme/default/template/payment/pagseguro.tpl on line 83Notice: Undefined index: shipping_method in /home/bras32/public_html/test/catalog/view/theme/default/template/payment/pagseguro.tpl on line 85

Erro 2. Compra onde se voce vende 2 items: Item 1 = $10.00 , Item 2 = $0.00. Pagseguro da esse erro no site dele; Erro 160 - O VALOR do item 2 deve ser maior que 0 e não deve exceder o máximo permitido.
* O problema aqui e que o pagseguro nao aceita items com valor 0.


Erro 3. Compra com frete. Vamos dizer, sua venda e:

Sua Loja;
Sub-total:   R$3.675,00
Frete de taxa única: R$30,00
Total: R$3.705,00

Pagseguro;
Apple Cinema 30   1   R$ 3.575,00   R$ 3.575,00
iPod Classic -Memory 1GB 1 R$ 100,00 R$ 100,00

Total: R$ 3.675,00

Voce pode ver que esta faltando o frete.

Solucao:

Nao fiz ainda a migracao para 1.4.9 ( Porem, o 1.4.8 e 1.4.9 devem ser bem parecidos. )

Aqui vai o codigo que concertou todos esses problemas.

O arquivo em questao e:
Catalog/view/theme/default/template/payment/pagseguro.tpl

Modifique todo o codigo para:
Código: Selecionar todos
 <form action="<?php echo $action; ?>" method="post" id="formpagseguro">
 <input type="hidden" name="email_cobranca" value="<?php echo $email_pgseguro; ?>"  />
 <input type="hidden" name="ref_transacao" value="<?PHP echo $ref; ?>"  />
 <input type="hidden" name="tipo" value="CP"  /> 
 <input type="hidden" name="moeda" value="BRL"  />
<?PHP
//Proteção e valor do frete
if(!isset($fretegratis)){ //verifica sem não tem cumpom de frete gratis
if(isset($this->session->data['shipping_method'])){ //verifica se foi selecionado um modo de envio
if($this->session->data['shipping_method']['id']=='free.free'){ //verifica se o metodo de envio e fretegratis
$valorfe=0;
}else {
$valorfe =preg_replace("/[^0-9]/", "", $this->session->data['shipping_method']['text']); //pega o valor do frete ja calculado    
if ($valorfe<1) {
$errofrete=true; //se o valor do frete for 0 então deu erro no calculo        
}
        
}
    } else {
    $errofrete=true;             
    }
    }else if($fretegratis==true){ //se existe o valor e 0
$valorfe=0;
}

//dados dos produtos
$pesototal_produtos=0;
$i=1;
$iddoproduto=array();
foreach ($products as $product) {
$produtoid=$product['id']; //id do produto
$preco = $product['valor']; 
$preco = preg_replace("/[^0-9]/", "", $preco); //valor do produto
$pesoprod = preg_replace("/[^0-9]/", "", $product['peso']); //peso do produto
$dopcoes=''; //opções do produto
$descricaoproduto = $product['descricao']; //descrição
foreach ($product['option'] as $option) { 
 $dopcoes.=' -'.$option['name'].' '.$option['value']; //monta os opcionais do produto
  } 
$descricaoproduto.= $dopcoes; //descrição do produto
$produtoid = str_replace($iddoproduto, $produtoid."#".$i, $produtoid); //id do produto


//Lista de Produtos
if (($preco != "0")&& ($preco != "")) {
?>
<input type="hidden" name="item_descr_<?PHP echo $i;?>" value="<?PHP echo $descricaoproduto;?>"  />
<input type="hidden" name="item_valor_<?PHP echo $i;?>" value="<?PHP echo $preco;?>"  />
<input type="hidden" name="item_quant_<?PHP echo $i;?>" value="<?PHP echo $product['quantidade'];?>"  />
<input type="hidden" name="item_id_<?PHP echo $i;?>" value="<?PHP echo $produtoid;?>"  />
<?PHP
if(isset($errofrete)){ //se deu erro no frete
$pesototal_produtos=+$pesoprod; //somando o peso dos produtos
?>
  <input type="hidden" name="item_frete_<?PHP echo $i;?>" value="0"  />
<?PHP 
}
$i++;
}
$iddoproduto[]=$produtoid;    
}
//fim dados dos produtos


$pg_contact_zip= preg_replace("/[^0-9]/", "",$pg_contact_zip); //remove os caracteres não numericos

//verifica se existe alguns dados necessarios
if(!isset($numero)){
$numero="0";
}
if(!isset($bairro)){
$bairro="NA";
}
if(!isset($ddd)){
$ddd="00";
}

//da o valor do frete ou o peso total dos produtos
if(!isset($errofrete)){ //se não deu erro no frete envia o valor do frete
?> 
<input type="hidden" name="item_descr_<?PHP echo $i;?>" value="<?PHP echo "Frete" ;?>"  />
<input type="hidden" name="item_valor_<?PHP echo $i;?>" value="<?PHP echo $valorfe;?>"  />
<input type="hidden" name="item_quant_<?PHP echo $i;?>" value="<?PHP echo "1";?>"  />
<input type="hidden" name="item_id_<?PHP echo $i;?>" value="<?PHP    echo "999999999999";?>"  />
<input type="hidden" name="item_frete_<?PHP echo $i;?>" value="0"  />
    
<?PHP }else { //se deu erro no frete envia o peso dos produtos para o pagseguro calcula o frete ?>
    <input type="hidden" name="item_peso_1" value="<?PHP echo $pesototal_produtos; ?>"  />
<?PHP
  if(isset($this->session->data['shipping_method'])){
    if(isset($this->session->data['shipping_method']['id'])){

      if($this->session->data['shipping_method']['id']=='pac.pac'){ //se o frete tiver dado 0 e for PAC
       echo "\n".'<input name="tipo_frete" value="EN" type="hidden">';
      }else if($this->session->data['shipping_method']['id']=='sedex.sedex'){ //se o frete tiver dado 0 e for SEDEX
        echo "\n".'<input name="tipo_frete" value="SD" type="hidden">';
      }
    }
  }    
}

//Dados do Cliente
?>

<input type="hidden" name="cliente_nome" value="<?PHP echo $pg_contact_firstname.' '.$pg_contact_last_name; ?>"  />
<input type="hidden" name="cliente_cep" value="<?PHP echo $pg_contact_zip; ?>"  />
<input type="hidden" name="cliente_end" value="<?PHP echo $pg_contact_address1; ?>"  />
<input type="hidden" name="cliente_num" value="<?PHP echo $numero; ?>"  />
<input type="hidden" name="cliente_compl" value="<?PHP echo $pg_contact_address2; ?>"  />
<input type="hidden" name="cliente_bairro" value="<?PHP echo $bairro; ?>"  />
<input type="hidden" name="cliente_cidade" value="<?PHP echo $pg_contact_city; ?>"  />

<input type="hidden" name="cliente_uf" value="<?PHP echo $estado; ?>"  />
<input type="hidden" name="cliente_pais" value="<?PHP echo $pg_contact_country; ?>"  />
<input type="hidden" name="cliente_ddd" value="<?PHP echo $ddd; ?>"  />
<input type="hidden" name="cliente_tel" value="<?PHP echo $telephone; ?>"  />
<input type="hidden" name="cliente_email" value="<?PHP echo $pg_contact_email; ?>"  />
</form>
<div style="background: #F7F7F7; border: 1px solid #DDDDDD; padding: 10px; margin-bottom: 10px;">
<br />
  <center><img src="https://pagseguro.uol.com.br/security/Imagens/468x60_10X_pagseguro.gif" border="0" alt="PagSeguro" /></center><br />
Após clicar no botão <b>Finalizar Compra com PagSeguro</b> que está abaixo, voc&ecirc; será redirecionado para o PagSeguro para efetuar o pagamento.
  <br />
    <br />
  </div>
  <div class="buttons">
  <table>
    <tr>
      <td align="left"><a onclick="location = '<?php echo str_replace('&', '&', $back); ?>'" class="button"><span><?php echo $button_back; ?></span></a></td>
        <td align="right"><a id="checkout" ><span><img src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/carrinhoproprio/btnFinalizaBR.jpg" border="0" /></span></a></td>
    </tr>
  </table>
</div>
<script type="text/javascript"><!--
$('#checkout').click(function() {
 $('body').css("cursor", "wait");
$('#checkout').hide('fast');
    $.ajax({ 
        type: 'GET',
        url: 'index.php?route=payment/pagseguro/confirm',
        success: function() {
             $('#formpagseguro').submit();
        }        
    });
});
//--></script>
Ps. Esse foi um problema serissimo, tenho que agradecer MUITO meu amigo Bira da plugescola ter resolvido isso em questao de minutos. Um genio da programacao.
#3448
Prezados,

Ao utilizar a opção de frete grátis, mesmo após aplicar as orientações seguidas no tutorial obtenho o seguinte erro ao ser redirecionado ao Pag Seguro:

Erro 160 - O VALOR do item 2 deve ser maior que 0 e não deve exceder o máximo permitido.

Estou usando a versão 1.4.9.3.

Se alguém puder me ajudar ficarei grato :D

Att,

Jonas Mello
@injuadu
#3450
Prezados,

Criei uma regra que diz que se o valor do frete for igual a "0" o nome do produto receberá o complemento Frete grátis:
Código: Selecionar todos
<?php if ($valorfe == '0'){ ?>

    <input type="hidden" name="item_descr_<?PHP echo $i;?>" value="<?PHP echo $descricaoproduto." Frete grátis";?>"  />

	<?php }else{ ?>

    <input type="hidden" name="item_descr_<?PHP echo $i;?>" value="<?PHP echo $descricaoproduto;?>"  />

	<?php } ?>

Após fui na parte do segundo item e desliguei o frete em caso de frete grátis:
Código: Selecionar todos
<?php if (!$valorfe == '0'){ ?>
    
	<input type="hidden" name="item_descr_<?PHP echo $i;?>" value="<?PHP echo "Frete" ;?>"  />
    <input type="hidden" name="item_valor_<?PHP echo $i;?>" value="<?PHP echo $valorfe;?>"  />
    <input type="hidden" name="item_quant_<?PHP echo $i;?>" value="<?PHP echo '1';?>"  />
    <input type="hidden" name="item_id_<?PHP echo $i;?>" value="<?PHP    echo '999999999999';?>"  />
    <input type="hidden" name="item_frete_<?PHP echo $i;?>" value="0"  />
<?php }; ?>
Uma vez que se o frete é grátis o valor não precisa ser enviado ao Pag Seguro.

Realizei alguns testes e as compras foram executadas com sucesso.

Acho que resolvi o problema, no entanto, gostaria de uma opinião de alguém mais experiente no aplicativo.

Minha dúvida é se não terei nenhum problema de relação entre a loja e o Pagseguro por alterar o nome do produto.

Att,

Jonas Mello
@injuadu
#3465
fab26x escreveu:...
O arquivo em questao e:
Catalog/view/theme/default/template/payment/pagseguro.tpl

Modifique todo o codigo para:
Código: Selecionar todos
 <form action="<?php echo $action; ?>" method="post" id="formpagseguro">
 <input type="hidden" name="email_cobranca" value="<?php echo $email_pgseguro; ?>"  />
 <input type="hidden" name="ref_transacao" value="<?PHP echo $ref; ?>"  />
 <input type="hidden" name="tipo" value="CP"  /> 
 <input type="hidden" name="moeda" value="BRL"  />
<?PHP
//Proteção e valor do frete
if(!isset($fretegratis)){ //verifica sem não tem cumpom de frete gratis
if(isset($this->session->data['shipping_method'])){ //verifica se foi selecionado um modo de envio
if($this->session->data['shipping_method']['id']=='free.free'){ //verifica se o metodo de envio e fretegratis
$valorfe=0;
}else {
$valorfe =preg_replace("/[^0-9]/", "", $this->session->data['shipping_method']['text']); //pega o valor do frete ja calculado    
if ($valorfe<1) {
$errofrete=true; //se o valor do frete for 0 então deu erro no calculo        
}
        
}
    } else {
    $errofrete=true;             
    }
    }else if($fretegratis==true){ //se existe o valor e 0
$valorfe=0;
}

//dados dos produtos
$pesototal_produtos=0;
$i=1;
$iddoproduto=array();
foreach ($products as $product) {
$produtoid=$product['id']; //id do produto
$preco = $product['valor']; 
$preco = preg_replace("/[^0-9]/", "", $preco); //valor do produto
$pesoprod = preg_replace("/[^0-9]/", "", $product['peso']); //peso do produto
$dopcoes=''; //opções do produto
$descricaoproduto = $product['descricao']; //descrição
foreach ($product['option'] as $option) { 
 $dopcoes.=' -'.$option['name'].' '.$option['value']; //monta os opcionais do produto
  } 
$descricaoproduto.= $dopcoes; //descrição do produto
$produtoid = str_replace($iddoproduto, $produtoid."#".$i, $produtoid); //id do produto


//Lista de Produtos
if (($preco != "0")&& ($preco != "")) {
?>
<input type="hidden" name="item_descr_<?PHP echo $i;?>" value="<?PHP echo $descricaoproduto;?>"  />
<input type="hidden" name="item_valor_<?PHP echo $i;?>" value="<?PHP echo $preco;?>"  />
<input type="hidden" name="item_quant_<?PHP echo $i;?>" value="<?PHP echo $product['quantidade'];?>"  />
<input type="hidden" name="item_id_<?PHP echo $i;?>" value="<?PHP echo $produtoid;?>"  />
<?PHP
if(isset($errofrete)){ //se deu erro no frete
$pesototal_produtos=+$pesoprod; //somando o peso dos produtos
?>
  <input type="hidden" name="item_frete_<?PHP echo $i;?>" value="0"  />
<?PHP 
}
$i++;
}
$iddoproduto[]=$produtoid;    
}
//fim dados dos produtos


$pg_contact_zip= preg_replace("/[^0-9]/", "",$pg_contact_zip); //remove os caracteres não numericos

//verifica se existe alguns dados necessarios
if(!isset($numero)){
$numero="0";
}
if(!isset($bairro)){
$bairro="NA";
}
if(!isset($ddd)){
$ddd="00";
}

//da o valor do frete ou o peso total dos produtos
if(!isset($errofrete)){ //se não deu erro no frete envia o valor do frete
?> 
<input type="hidden" name="item_descr_<?PHP echo $i;?>" value="<?PHP echo "Frete" ;?>"  />
<input type="hidden" name="item_valor_<?PHP echo $i;?>" value="<?PHP echo $valorfe;?>"  />
<input type="hidden" name="item_quant_<?PHP echo $i;?>" value="<?PHP echo "1";?>"  />
<input type="hidden" name="item_id_<?PHP echo $i;?>" value="<?PHP    echo "999999999999";?>"  />
<input type="hidden" name="item_frete_<?PHP echo $i;?>" value="0"  />
    
<?PHP }else { //se deu erro no frete envia o peso dos produtos para o pagseguro calcula o frete ?>
    <input type="hidden" name="item_peso_1" value="<?PHP echo $pesototal_produtos; ?>"  />
<?PHP
  if(isset($this->session->data['shipping_method'])){
    if(isset($this->session->data['shipping_method']['id'])){

      if($this->session->data['shipping_method']['id']=='pac.pac'){ //se o frete tiver dado 0 e for PAC
       echo "\n".'<input name="tipo_frete" value="EN" type="hidden">';
      }else if($this->session->data['shipping_method']['id']=='sedex.sedex'){ //se o frete tiver dado 0 e for SEDEX
        echo "\n".'<input name="tipo_frete" value="SD" type="hidden">';
      }
    }
  }    
}

//Dados do Cliente
?>

<input type="hidden" name="cliente_nome" value="<?PHP echo $pg_contact_firstname.' '.$pg_contact_last_name; ?>"  />
<input type="hidden" name="cliente_cep" value="<?PHP echo $pg_contact_zip; ?>"  />
<input type="hidden" name="cliente_end" value="<?PHP echo $pg_contact_address1; ?>"  />
<input type="hidden" name="cliente_num" value="<?PHP echo $numero; ?>"  />
<input type="hidden" name="cliente_compl" value="<?PHP echo $pg_contact_address2; ?>"  />
<input type="hidden" name="cliente_bairro" value="<?PHP echo $bairro; ?>"  />
<input type="hidden" name="cliente_cidade" value="<?PHP echo $pg_contact_city; ?>"  />

<input type="hidden" name="cliente_uf" value="<?PHP echo $estado; ?>"  />
<input type="hidden" name="cliente_pais" value="<?PHP echo $pg_contact_country; ?>"  />
<input type="hidden" name="cliente_ddd" value="<?PHP echo $ddd; ?>"  />
<input type="hidden" name="cliente_tel" value="<?PHP echo $telephone; ?>"  />
<input type="hidden" name="cliente_email" value="<?PHP echo $pg_contact_email; ?>"  />
</form>
<div style="background: #F7F7F7; border: 1px solid #DDDDDD; padding: 10px; margin-bottom: 10px;">
<br />
  <center><img src="https://pagseguro.uol.com.br/security/Imagens/468x60_10X_pagseguro.gif" border="0" alt="PagSeguro" /></center><br />
Após clicar no botão <b>Finalizar Compra com PagSeguro</b> que está abaixo, voc&ecirc; será redirecionado para o PagSeguro para efetuar o pagamento.
  <br />
    <br />
  </div>
  <div class="buttons">
  <table>
    <tr>
      <td align="left"><a onclick="location = '<?php echo str_replace('&', '&', $back); ?>'" class="button"><span><?php echo $button_back; ?></span></a></td>
        <td align="right"><a id="checkout" ><span><img src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/carrinhoproprio/btnFinalizaBR.jpg" border="0" /></span></a></td>
    </tr>
  </table>
</div>
<script type="text/javascript"><!--
$('#checkout').click(function() {
 $('body').css("cursor", "wait");
$('#checkout').hide('fast');
    $.ajax({ 
        type: 'GET',
        url: 'index.php?route=payment/pagseguro/confirm',
        success: function() {
             $('#formpagseguro').submit();
        }        
    });
});
//--></script>
Ps. Esse foi um problema serissimo, tenho que agradecer MUITO meu amigo Bira da plugescola ter resolvido isso em questao de minutos. Um genio da programacao.
Olá Amigo,

Obrigado por compartilhar.

Eu fiz um teste rápido aqui e acredito que tenha sido corrigido.

Fiz uma compra com retirada na loja e optei pelo pagseguro...no pagseguro optei por boleto e nenhuma opção de frete me foi apresentado (acredito que tenha corrigido, pois não testei antes de mudar o codigo)

Com relação a configuração do frete no pagseguro, não sei se tem alguma relação (eu acho que não), mudei p/ frete fixo.

Abraços

Chuva
#5558
Eu queria saber se tem como usar o script modulo calcular frete no carrinho para que o mesmo faça a soma quando eu digitar o CEP e mandar pesquisar ele pegar o valor dos produtos adicionados nos carrinho e somar com o valor do frete e mostrar o resultado da soma, igual nas lojas que agente vê ai no dia a dia?

Alguém ja sabe como implementar isso?

Ou já tem algo assim rolando aqui no fórum?

Fico no aguardo por que eu quero ver e aprimorar mais ainda no CSS pra poder ajudar melhor mais o código, obrigado galera, fico no aguardo...
Por leandromello
#10983
tenho problema parecido, mas não é com o frete é com o Taxa de Imposto que não é somada.
Sei que deve haver uma modificaçào na ordem em que a loja soma os valores antes de enviar para o PagSeguro.
alguem sabe como fazer?

Looking for a partner for an unforgettable night? […]

Olá! Tudo bem? Verifique as configura&cced[…]

Olá! Tudo bem? Trabalho com Opencart h&aac[…]

Imagem do Carrinho de Compras

Olá! Tudo bem? São vários lo[…]