Ir para conteúdo

Arquivado

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

AdolfoPS

[Resolvido] Pagando com API

Recommended Posts

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);

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui resolver também meu problema

segue o código para futuras pesquisas e melhoras!

if(!isset($user)){
header('location: acesso.php');
}
if(empty($user)){
header('location: acesso.php');
}else{
$sql = "SELECT * FROM teste_pedido ORDER BY nomeprod ASC";
$res = mysql_query($sql);
while ($row = mysql_fetch_array($res)) 
	   {
		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>';  

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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:

http://sounoob.com.br/2011/11/09/criando-uma-requisicao-de-pagamento-do-pagseguro-via-parametros-http-usando-php-sem-utilizar-a-biblioteca-oficial/

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.