Página 1 de 1

Possivel erro com o Pagseguro e sua Correção

Enviado: 04 Fev 2011, 17:29
por fab26x
Faca esses testes:

Uma compra ultilizando o FRETE GRATIS.
Adicionar algum item com o valor ZERO no cart.

Finalize a compra. Talvez vai dar um erro.. 160.


Caso tenha esse erro. Esse e o codigo atualizado corrigindo outros erros tambem. Como o valor do transporte nao chegando ao pagseguro.

Boa Sorte.
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($this->session->data['shipping_method']['id']!='free.free'){
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>

Re: Possivel erro com o Pagseguro.

Enviado: 06 Fev 2011, 14:44
por fab26x
Erros que descobri usando o modulo de pagamento do Pagseguro:

*Caso incluido existe algum item com valor zero. Ex; um brinde, ou um item que acompanha outro com valor.
* Problema onde na hora da compra o Pagseguro nao recebe o valor do FRETE.
* Se o frete for Gratis, possivelmente pode dar um erro no Pagseguro. Erro #160.

Esse PHP acima corrige todos esses erros.

Fabio Cardoso

Re: Possivel erro com o Pagseguro.

Enviado: 16 Fev 2011, 21:09
por Jonas Mello
Ta, mas onde é pra por este código?

Qual arquivo? Qual linha do arquivo?

É para substituir alguma coisa? Ou somente adicionar?

Jonas Mello
@injuadu

Re: Possivel erro com o Pagseguro.

Enviado: 16 Fev 2011, 23:32
por rochester
Realmente produto com preço zero é meio específico..

Bacana a solução, mas a parte de modulos geralmente o manoel sabe avaliar melhor