Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

João Victor Costa

[Resolvido] Php + pagseguro

Recommended Posts

Estou fazendo um ecommerce e estou com um problema no script de pagamento do pagseguro... Quando eu clico no botão PAGAR, só aparece 1 dos produtos do carrinho no site do pagseguro... Veja o código:

 

  
       <?php

         if(!isset($_SESSION))
{
session_start();
}  

         if(!isset($_SESSION['carrinho'])){
            $_SESSION['carrinho'] = array();
         }
                        if(count($_SESSION['carrinho']) == 0){
                           echo '<tr><td colspan="5" align="center">Não há produtos no carrinho.</td></tr>';
                        }else{
                           require("Connections/conexao.php");
						$peso= 0;
                                                                  $total = 0;
                           foreach($_SESSION['carrinho'] as $id => $qtd){
                                 $sql   = "SELECT *  FROM produtos WHERE id= '$id'";
                                 $qr    = mysql_query($sql) or die(mysql_error());
                                 $ln    = mysql_fetch_assoc($qr);

                                 $nome  = $ln['nome'];
                                 $preco = number_format($ln['preco'], 2, ',', '.');
                                 $sub   = number_format($ln['preco'] * $qtd, 2, ',', '.');
                                 $peso = $ln['peso'];
							  $opreco = $ln['preco'];
                                 $total += $ln['preco'] * $qtd;
							  $peso += $ln['peso'] * $qtd;
							  $aid =  $ln['id'];

                              echo '  <tr>
   <td width="60%">'.$nome.'</td>
   <td width="10%">'.$qtd.'</td>
   <td width="15%">R$ '.$preco.'</td>
   <td width="15%">R$ '.$sub.'</td>
 </tr>';
                           }
                              $total = number_format($total, 2, ',', '.');
                              echo '<tr> <td> <br>   <tr>
   <td class="texto_negrito">TOTAL</td>
   <td> </td>
   <td> </td>
   <td class="texto_negrito">R$ '.$total.'</td>
 </tr></td></tr>
';
                        }

           echo ' <form target="pagseguro" method="post"
action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
<input type="hidden" name="email_cobranca"
value="'.$row_loja['email'].'">
<input type="hidden" name="tipo" value="CP">
<input type="hidden" name="moeda" value="BRL">';


//código que pega os produtos		
 	 echo '
<input type="hidden" name="item_id_1" value="'.$aid.'">
<input type="hidden" name="item_descr_1" 
value="'.$nome.'">
<input type="hidden" name="item_quant_1" value="'.$qtd.'">
<input type="hidden" name="item_valor_1" value="'.$opreco.'">
<input type="hidden" name="item_frete_1" value="">
<input type="hidden" name="item_peso_1" value="'.$peso.'">'
;

// fim do código dos produtos
			echo '<input type="hidden" name="tipo_frete" value="">
<input type="image" 
src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/pagamentos/99x61-pagar-assina.gif" 
name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!">
</form>';  

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

  
  foreach($_SESSION['carrinho'] as $id => $qtd){
                             	$sql   = "SELECT *  FROM produtos WHERE id= '$id'";
                             	$qr	= mysql_query($sql) or die(mysql_error());
                             	$ln	= mysql_fetch_assoc($qr);

                             	$nome  = $ln['nome'];
                             	$preco = number_format($ln['preco'], 2, ',', '.');
                             	$sub   = number_format($ln['preco'] * $qtd, 2, ',', '.');
                             	$peso = $ln['peso'];
                                                             	$opreco = $ln['preco'];
                             	$total += $ln['preco'] * $qtd;
                                                             	$peso += $ln['peso'] * $qtd;
                                                             	$aid =  $ln['id'];

                      		echo '  <tr>
<td width="60%">'.$nome.'</td>
<td width="10%">'.$qtd.'</td>
<td width="15%">R$ '.$preco.'</td>
<td width="15%">R$ '.$sub.'</td>
 </tr>';
                       	}

Esse é o trecho do seu codigo em que você pega todos produtos do banco de dados e mostra na tela, até ai aparentemente normal.

Um pouco mais abaixo você começa a criar os dados para envio do formulário para o PagSeguro

 

  
   echo ' <form target="pagseguro" method="post"
action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
<input type="hidden" name="email_cobranca"
value="'.$row_loja['email'].'">
<input type="hidden" name="tipo" value="CP">
<input type="hidden" name="moeda" value="BRL">';


//código que pega os produtos   		
        		echo '
<input type="hidden" name="item_id_1" value="'.$aid.'">
<input type="hidden" name="item_descr_1" 
value="'.$nome.'">
<input type="hidden" name="item_quant_1" value="'.$qtd.'">
<input type="hidden" name="item_valor_1" value="'.$opreco.'">
<input type="hidden" name="item_frete_1" value="">
<input type="hidden" name="item_peso_1" value="'.$peso.'">'
;

// fim do código dos produtos
                           	echo '<input type="hidden" name="tipo_frete" value="">
<input type="image" 
src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/pagamentos/99x61-pagar-assina.gif" 
name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!">
</form>';  

 

Note que, esses campos já estão fora do laço dos itens capturado do banco de dados, e as variáveis $aid, $nome, $qtd, $opreco, e $peso só terão o ultimo valor passado pelo laço. Ai que está o problema de o PagSeguro mostrar apenas um produto... Você não está passando todos produtos...

 

Espero ter ajudado...

 

 

E outra coisa...

 

 

Tem todas as informações referentes aos produtos colocados no carrinho;

 

Quando alguém perguntar o que tem dentro da variável, você mostra a estrutura dela, assim irá ajudar entender melhor a sua logica e seu problema

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloquei o código do pagseguro dentro do laço mas o problema continua... Acho q é porque os inputs que ficam dentro do laço estão com o mesmo value

(item_id_1, item_descr_1), só q eu não sei como resolver... alguém sabe como me ajudar?

 

Obrigado, abraço!

 

<form target="pagseguro" method="post"
action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
<input type="hidden" name="email_cobranca"
value="MEU EMAIL">
<input type="hidden" name="tipo" value="CP">
<input type="hidden" name="moeda" value="BRL">
       <?php

         if(!isset($_SESSION))
{
session_start();
}  

         if(!isset($_SESSION['carrinho'])){
            $_SESSION['carrinho'] = array();
         }


                        if(count($_SESSION['carrinho']) == 0){
                           echo '<tr><td colspan="5" align="center">Não há produtos no carrinho.</td></tr>';
                        }else{
                           require("Connections/conexao.php");
						$peso= 0;
                                                                  $total = 0;
                           foreach($_SESSION['carrinho'] as $id => $qtd){
                                 $sql   = "SELECT *  FROM produtos WHERE id= '$id'";
                                 $qr    = mysql_query($sql) or die(mysql_error());
                                 $ln    = mysql_fetch_assoc($qr);

                                 $nome  = $ln['nome'];
                                 $preco = number_format($ln['preco'], 2, ',', '.');
                                 $sub   = number_format($ln['preco'] * $qtd, 2, ',', '.');
                                 $peso = $ln['peso'];
							  $opreco = $ln['preco'];
                                 $total += $ln['preco'] * $qtd;
							  $peso += $ln['peso'] * $qtd;
							  $aid =  $ln['id'];

              // comeco do tal do laco

               echo '  <tr>
   <td width="60%">'.$nome.'</td>
   <td width="10%">'.$qtd.'</td>
   <td width="15%">R$ '.$preco.'</td>
   <td width="15%">R$ '.$sub.'</td>
 </tr><input type="hidden" name="item_id_1" value="'.$aid.'">
<input type="hidden" name="item_descr_1" value="'.$nome.'">
<input type="hidden" name="item_quant_1" value="'.$qtd.'">
<input type="hidden" name="item_valor_1" value="'.$opreco.'">
<input type="hidden" name="item_frete_1" value="">
<input type="hidden" name="item_peso_1" value="'.$peso.'">';
;

// fim do laco
					    }
                              $total = number_format($total, 2, ',', '.');
                              echo '<tr> <td> <br>   <tr>
   <td class="texto_negrito">TOTAL</td>
   <td> </td>
   <td> </td>
   <td class="texto_negrito">R$ '.$total.'</td>
 </tr></td></tr>
';
                        }




?>

   </div></th>
 </tr>
</table>
<table width="200" border="0" align="right" cellpadding="0" cellspacing="0">
 <tr>
   <td width="200"><div align="right">
     <p align="center" class="texto_negrito14">
       FRETE
       <IFRAME name=frete.php marginWidth=0 marginHeight=0 src="pagina_do_iframe.htm" frameBorder=0 width=200 height=120></IFRAME> 
     </p>
     </div></td>
 </tr>
</table>
//botao que pega os valores do form

<input type="hidden" name="tipo_frete" value="">
<input type="image" 
src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/pagamentos/99x61-pagar-assina.gif" 
name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!">
</form> <br />

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize um contador, para que possa ir incrementando no formulário...

Seria algo mais ou menos assim..


   	<?php

     	if(!isset($_SESSION))
{
session_start();
}  

     	if(!isset($_SESSION['carrinho'])){
        	$_SESSION['carrinho'] = array();
     	}
                    	if(count($_SESSION['carrinho']) == 0){
                       	echo '<tr><td colspan="5" align="center">Não há produtos no carrinho.</td></tr>';
                    	}else{
                       	require("Connections/conexao.php");
                                                   	$peso= 0;
                                                              	$total = 0;
                       	foreach($_SESSION['carrinho'] as $id => $qtd){
                             	$sql   = "SELECT *  FROM produtos WHERE id= '$id'";
                             	$qr	= mysql_query($sql) or die(mysql_error());
                             	$ln	= mysql_fetch_assoc($qr);

                             	$nome  = $ln['nome'];
                             	$preco = number_format($ln['preco'], 2, ',', '.');
                             	$sub   = number_format($ln['preco'] * $qtd, 2, ',', '.');
                             	$peso = $ln['peso'];
                                                             	$opreco = $ln['preco'];
                             	$total += $ln['preco'] * $qtd;
                                                             	$peso += $ln['peso'] * $qtd;
                                                             	$aid =  $ln['id'];

                          	$line .= '  <tr>
<td width="60%">'.$nome.'</td>
<td width="10%">'.$qtd.'</td>
<td width="15%">R$ '.$preco.'</td>
<td width="15%">R$ '.$sub.'</td>
 </tr>';
 $i++;
          	$form .= '
<input type="hidden" name="item_id_' . $i . '" value="'.$aid.'">
<input type="hidden" name="item_descr_' . $i . '" 
value="'.$nome.'">
<input type="hidden" name="item_quant_' . $i . '" value="'.$qtd.'">
<input type="hidden" name="item_valor_' . $i . '" value="'.$opreco.'">
<input type="hidden" name="item_frete_' . $i . '" value="">
<input type="hidden" name="item_peso_' . $i . '" value="'.$peso.'">'
;
                       	}
                          	$total = number_format($total, 2, ',', '.');
                          	echo $line . '<tr> <td> <br>   <tr>
<td class="texto_negrito">TOTAL</td>
<td> </td>
<td> </td>
<td class="texto_negrito">R$ '.$total.'</td>
 </tr></td></tr>
';
                    	}

       	echo ' <form target="pagseguro" method="post"
action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
<input type="hidden" name="email_cobranca"
value="'.$row_loja['email'].'">
<input type="hidden" name="tipo" value="CP">
<input type="hidden" name="moeda" value="BRL">' . $form . '<input type="hidden" name="tipo_frete" value="">
<input type="image" 
src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/pagamentos/99x61-pagar-assina.gif" 
name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!">
</form>';  

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize um contador, para que possa ir incrementando no formulário...

Seria algo mais ou menos assim..


   	<?php

     	if(!isset($_SESSION))
{
session_start();
}  

     	if(!isset($_SESSION['carrinho'])){
        	$_SESSION['carrinho'] = array();
     	}
                    	if(count($_SESSION['carrinho']) == 0){
                       	echo '<tr><td colspan="5" align="center">Não há produtos no carrinho.</td></tr>';
                    	}else{
                       	require("Connections/conexao.php");
                                                   	$peso= 0;
                                                              	$total = 0;
                       	foreach($_SESSION['carrinho'] as $id => $qtd){
                             	$sql   = "SELECT *  FROM produtos WHERE id= '$id'";
                             	$qr	= mysql_query($sql) or die(mysql_error());
                             	$ln	= mysql_fetch_assoc($qr);

                             	$nome  = $ln['nome'];
                             	$preco = number_format($ln['preco'], 2, ',', '.');
                             	$sub   = number_format($ln['preco'] * $qtd, 2, ',', '.');
                             	$peso = $ln['peso'];
                                                             	$opreco = $ln['preco'];
                             	$total += $ln['preco'] * $qtd;
                                                             	$peso += $ln['peso'] * $qtd;
                                                             	$aid =  $ln['id'];

                          	$line .= '  <tr>
<td width="60%">'.$nome.'</td>
<td width="10%">'.$qtd.'</td>
<td width="15%">R$ '.$preco.'</td>
<td width="15%">R$ '.$sub.'</td>
 </tr>';
 $i++;
          	$form .= '
<input type="hidden" name="item_id_' . $i . '" value="'.$aid.'">
<input type="hidden" name="item_descr_' . $i . '" 
value="'.$nome.'">
<input type="hidden" name="item_quant_' . $i . '" value="'.$qtd.'">
<input type="hidden" name="item_valor_' . $i . '" value="'.$opreco.'">
<input type="hidden" name="item_frete_' . $i . '" value="">
<input type="hidden" name="item_peso_' . $i . '" value="'.$peso.'">'
;
                       	}
                          	$total = number_format($total, 2, ',', '.');
                          	echo $line . '<tr> <td> <br>   <tr>
<td class="texto_negrito">TOTAL</td>
<td> </td>
<td> </td>
<td class="texto_negrito">R$ '.$total.'</td>
 </tr></td></tr>
';
                    	}

       	echo ' <form target="pagseguro" method="post"
action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
<input type="hidden" name="email_cobranca"
value="'.$row_loja['email'].'">
<input type="hidden" name="tipo" value="CP">
<input type="hidden" name="moeda" value="BRL">' . $form . '<input type="hidden" name="tipo_frete" value="">
<input type="image" 
src="https://p.simg.uol.com.br/out/pagseguro/i/botoes/pagamentos/99x61-pagar-assina.gif" 
name="submit" alt="Pague com PagSeguro - é rápido, grátis e seguro!">
</form>';  

?>

 

VALEEEEEEEEEEEEU VELHO!!!!!! Funcionou certinho! Só to com um problema pra calcular o preço do frete pelo pagseguro... Por acaso alguem sabe como faço?

Compartilhar este post


Link para o post
Compartilhar em outros sites

1 - Está chegando o peso dos produtos corretamente?

2 - Em sua conta do PagSeguro está configurado a opção de frete para "Frete adicional com valor fixo"?

3 - Está como 0,00 do valor fixo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aproveitando o código e o tópico, tbm estou na mesma situação, não esta acontecendo o loop, e no pagseguro só pega o 1º produto da lista oque está faltando no meu código?

 

<?php

       if(!isset($_SESSION))
{
session_start();
}  

       if(!isset($_SESSION['carrinho'])){
               $_SESSION['carrinho'] = array();
       }
                       if(count($_SESSION['carrinho']) == 0){
                                'Carrinho vazio.';
                       }else{
                               require("conexao.php");
                               $peso	= 0;
                               $total	= 0;
                               foreach($_SESSION['carrinho'] as $id => $qtd){
                               $sql   	= "SELECT *  FROM produtos WHERE id= '$id'";
                               $qr     = mysql_query($sql) or die(mysql_error());
                               $ln     = mysql_fetch_assoc($qr);

                               $nome  	= $ln['nome'];
                               $preco 	= number_format($ln['preco'], 2, ',', '.');
                               $sub   	= number_format($ln['preco'] * $qtd, 2, ',', '.');
                               $opreco = $ln['preco'];
                               $total 	+= $ln['preco'] * $qtd;
							$frete  = 0;
                               $peso += $ln['peso'] * $qtd;
                               $aid	=  $ln['id'];


$i = 1;
               $form .= '
<input type="hidden" name="item_id_' 	. $i . '" value="'.$aid.'">
<input type="hidden" name="item_descr_' . $i . '" value="'.$nome.'">
<input type="hidden" name="item_quant_' . $i . '" value="'.$qtd.'">
<input type="hidden" name="item_valor_' . $i . '" value="'.$opreco.'">
<input type="hidden" name="item_frete_' . $i . '" value="'.$frete.'">
<input type="hidden" name="item_peso_' 	. $i . '" value="'.$peso.'">';
                               }						
                               $total = number_format($total, 2, ',', '.');                                
                       }

					?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

já tentou verificar se dentro do $_SESSION['carrinho'] não tem apenas um apenas um produto...

 

Monta um carrinho com varios produtos, e dar um print_r( $_SESSION['carrinho']) e cola aqui...

 

Só mais uma coisa

 

não precisa voce fazer

$peso += $ln['peso'] * $qtd;

 

O PGS entende que o peso é para um produto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara dei o print na SESSION, e está ok da uma olhada:

carrinho.jpg

Sera que o erro não está lá no loop na variavel

 $i = 1;

?

 

e na questão do peso

$peso += $ln['peso'] * $qtd;

se eu tirar ele o pagseguro não mostra as opções de frete, SEDEX ou PAC

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sera que o erro não está lá no loop na variavel

 $i = 1;

?

Tenta trocar esse $i = 1 para

 ++$i;

 

 

e na questão do peso

$peso += $ln['peso'] * $qtd;

se eu tirar ele o pagseguro não mostra as opções de frete, SEDEX ou PAC

Tente fazer desse jeito

$peso = $ln['peso'];

 

O valor do produto creio que deveria ser igual ao peso tambem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara deu certo o loop aqui, muito obrigado, só que agora está dando um erro nessa parte aqui

 $form .= '
<input type="hidden" name="item_id_' 	. $i . '" value="'.$aid.'">
<input type="hidden" name="item_descr_' . $i . '" value="'.$nome.'">
<input type="hidden" name="item_quant_' . $i . '" value="'.$qtd.'">
<input type="hidden" name="item_valor_' . $i . '" value="'.$opreco.'">
<input type="hidden" name="item_frete_' . $i . '" value="'.$frete.'">
<input type="hidden" name="item_peso_' 	. $i . '" value="'.$peso.'">';

 

o erro é:

Notice: Undefined variable: form in C:\EasyPHP-5.3.6.0\www\!PROJETO-QUERO-SHOP\carrinho.php on line 89

 

e não sei oque pode estar acontecendo, pois ta tudo funcionando ok.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que tem na linha 89?

 

provavelmente é uma variavel não inicializada, inicia ela como $var = null, ou desativa o NOTICE do seu easyPhp

 

Na linha 89 tem

<input type="hidden" name="item_peso_'  . $i . '" value="'.$peso.'">';

só que se tirar essa linha o erro passa pro input de cima.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.