Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Como o usuário do sistema pode fazer várias compras numa vez só, eu to utilizando um contador de quantos items ele está comprando, assim da um loop nas variáveis dos produtos para passar pela API.
O código funciona perfeito quando compro somente um item, mas se compro mais que um tenho como retorno este erro: Erro 11024 - Items invalid quantity.
<?php
$email = "XXXXXX@XXXXXXXX.com";
$token = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
$url = "https://ws.pagseguro.uol.com.br/v2/checkout/?email=" . $email . "&token=" . $token;
$email = $_POST["cliente_email"];
$redurl = $_POST["red_url"];
$nome = $_POST["cliente_nome"];
$ref = $_POST["ref_transacao"];
$tel = $_POST["cliente_tel"];
$contador = $_POST["contador"];
for ($i = 1; $i <= $contador; $i++) {
$idproduto = array($i => $_POST["item_id_" . $i]);
$produto = array($i => $_POST["item_descr_" . $i]);
$valor = array($i => $_POST["item_valor_" . $i]);
$quantidade = array($i => $_POST["item_quant_" . $i]);
}
$postReq.= "currency=BRL";
for ($j = 1; $j <= $contador; $j++) {
$postReq.= "&itemId" . $j . "=" . $idproduto[$j];
$postReq.= "&itemDescription" . $j . "=" . $produto[$j];
$postReq.= "&itemAmount" . $j . "=" . $valor[$j];
$postReq.= "&itemQuantity" . $j . "=" . $quantidade[$j];
}
$postReq.= "&reference=" . $ref;
$postReq.= "&senderName=" . $nome;
$postReq.= "&senderEmail=" . $email;
$postReq.= "&redirectURL=" . $redurl;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, Array("Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1"));
curl_setopt($curl, CURLOPT_POSTFIELDS, $postReq);
$xml= curl_exec($curl);
if($xml == 'Unauthorized'){
//Insira seu código avisando que o sistema está com problemas, sugiro enviar um e-mail avisando para alguém fazer a manutenção
echo "Unauthorized!";
exit;//Mantenha essa linha
}
curl_close($curl);
$xml= simplexml_load_string($xml);
if(count($xml -> error) > 0){
//Insira seu código avisando que o sistema está com problemas, sugiro enviar um e-mail avisando para alguém fazer a manutenção, talvez seja útil enviar os códigos de erros.
$erro = $xml->error->message;
$errocod = $xml->error->code;
echo "Erro " . $errocod . " - " . $erro;
exit;
}
header('Location: https://pagseguro.uol.com.br/v2/checkout/payment.html?code=' . $xml->code);
?>O que era que estava errado? Posta ai, para quem estiver pesquisando saber qual o problema.
Muito bom esse código me ajudou muito.
Estou com o mesmo problema e não consigo resolver! :mellow:
Consegui resolver também meu problema
segue o código para futuras pesquisas e melhoras!
if(!isset($user)){
header('location: acesso.php');
}$sql = "SELECT * FROM teste_pedido ORDER BY nomeprod ASC";
$res = mysql_query($sql); echo "<tr>";
echo "<td>".$row['nomeprod']."</td>";
echo "<td align='center'>".$row['quantprod']."</td>";
echo "<td align='center'> R$ ".formata($row['valorprod'])."</td>";
echo "</tr>";
$idProd = $row['idprod'];
$nomeProd = $row['nomeprod'];
$qntProd = $row['quantprod'];
$valorprod = $row['valorprod'];
$subtotal = $qntProd * $valorprod;
$total += $qntProd * $valorprod;
echo 'Código do produto: '.$idProd.'<br >';
echo 'Nome do produto: '.$nomeProd.'<br >';
echo 'Quantidade de cada produto: '.$qntProd.'<br >';
echo 'valor unitário: '.$valorprod.'<br >';
echo 'Subtotal: '.$subtotal.'<br >';
$i++;
$form .= '
<input type="hidden" name="item_id_' . $i . '" value="'.$idProd.'">
<input type="hidden" name="item_descr_' . $i . '" value="'.$nomeProd.'">
<input type="hidden" name="item_quant_' . $i . '" value="'.$qntProd.'">
<input type="hidden" name="item_valor_' . $i . '" value="'.$valorprod.'">';
$cont = $cont + 1;
}
echo ' <form target="pagseguro" method="post" action="https://pagseguro.uol.com.br/checkout/checkout.jhtml">
<input type="hidden" name="email_cobranca" value="marketing@wbcell.com.br">
<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>';
}Esse código não utiliza a API de pagamentos para fazer a requisição, em vez disso ele utiliza o método antigo, que por sinal é passivel de falhas. Qualquer pessoa com o minimo de experiencia em desenvolvimento consegue manipular os dados e fazer uma compra da sua loja com um preço inferior.
Quer segurança? Utilize a API de Pagamentos, use o tutorial do link abaixo:
Já corrigi o erro ;)