Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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_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>';
?>Tem todas as informações referentes aos produtos colocados no carrinho;
>
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_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
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><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 />
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>';
?>>
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?
Creio que o que você está procurando é isto:
https://pagseguro.uol.com.br/desenvolvedor/ferramenta_de_calculo_de_frete.jhtml
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?
Consegui resolver o lance do frete, tinha esquecido de colocar a variável no form... Mesmo assim Obrigado pelo ajuda!
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, ',', '.');
}
?>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.
Cara dei o print na SESSION, e está ok da uma olhada:
/applications/core/interface/imageproxy/imageproxy.php?img=http://executivedesign.com.br/images/carrinho.jpg&key=0c8e9457fb8fb4a19702c8b1166fef8cea761d8468849b021744cd6a18d14bf2" alt="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
>
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...
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.
O que tem na linha 89?
provavelmente é uma variavel não inicializada, inicia ela como $var = null, ou desativa o NOTICE do seu easyPhp
>
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.
Dentro de $_SESSION['carrinho'] o que tem?