Jump to content
Sign in to follow this  
Carcleo

Código de transação antes do checkout no PagSeguro

Recommended Posts

No Paypal, quando o cliente clica no botão pague com PayPal, é feita uma chamada à API para verificação do acesso da loja à API de pagamentos, se o acesso for liberado, a API retorna ao site uma autorização de reenvio do cliente ao ambiente de pagamento juntamente com um código de transação para aquele acesso do cliente ao ambiente de pagamento. Então, pegamos esse código de transação e gravamos no BD na tabela de pedidos no pedido que esta sendo pago.

Quando o cliente acaba de pagar, é disparada uma notificação informando o código daquela transação, então podemos pesquisar no banco na tabela de pedidos, qual é o pedido que tem aquele código de transação e proceder os trâmites.

então eu pergunto: É possível resgatar esse código de transação antes do checkout no PagSeguro? Como?

Share this post


Link to post
Share on other sites
Sim, mas lá também não estão respondendo.
Vou tentar ser mais objetivo.
Tem a opção de verificar antes os dados da loja por cUrl.
Mas eles começam assim:
curl -k https://ws.pagseguro.uol.com.br/pre-approvals/payment/ -d\
"email={email}\
&token={toke}\
&itemId1=0001\
&itemDescription1=Seguro contra roubo - Notebook Prata\
&itemAmount1=10.00\
&itemQuantity1=1\
&reference=REF1234-1\
&preApprovalCode=E06B11501414036FF4444F9489D9774C
Porém, estou tendo problema com o -d na url para passar na cUrl.
Mesmo que retire os caracteres \ e os espaços dá erro na hora de colocar no browser.
Estou fazendo assim;

<?php


  require_once "../config.php";  
  
  $urlSandBoxPGTO = "https://sandbox.pagseguro.uol.com.br/v2/checkout/payment.html";
  $urlProducaoPGTO = "https://ws.pagseguro.uol.com.br/v2/checkout/payment.html";


  $urlSandBoxAUT = "https://sandbox.pagseguro.uol.com.br/v2/checkout";
  $urlProducaoAUT = "https://ws.pagseguro.uol.com.br/v2/checkout";
  
  $sandbox = false;
  
  $urlAUT = $sandbox == true ? $urlSandBoxAUT : $urlProducaoAUT;
  $urlPGTO = $sandbox == true ? $urlSandBoxPGTO : $urlProducaoPGTO;


  $ultimoPedido = 1;
  //$ultimoPedido = $_GET["idPedidoCliente"];
  
  $pedidoCliente = $pedidosClientesDao->pesquisaPedidoCliente ($ultimoPedido);
  $itensPedido = $pedidosDao->pesquisaItensPedido ($pedidoCliente->getIdPedidoCliente());
  $cidade = $phpUtil->pesquisaCidade($conexao, $pedidoCliente->getCidade());
  $cliente = $clientesDao->pesquisaClienteId($pedidoCliente->getIdCliente());


  $ddd= substr($cliente->getTelefone(),0,2);
  $tel= substr($cliente->getTelefone(),2);
  
  $i = 1;
  $itensPS = null;
  foreach ($itensPedido as $chave => $item) {


 $produtoP = $produtosDao->pesquisaProdutoId($item->getIdProduto());
 $tipoP = $phpUtil->produtosTipos($produtoP->getTipo());
 $nomeP = $tipoP.", ".$produtosDao->pesquisaNomeProduto($item->getIdProduto());


 $itensPS["itemId".$i] = $item->getIdProduto();
 $itensPS["itemDescription".$i] = $nomeP;
 $itensPS["itemAmount".$i] =  $item->getPrecoUnitario();
 $itensPS["itemQuantity".$i] = $item->getQuantidade();


 $i++;


}


   $itens = "&";
   foreach ($itensPS as $key => $itemPS) :


       $itens .= $key."=".$itemPS."&";
  
   endforeach;
   
   $itens = substr ($itens, 0, -1);
   
   $urlAUTXML = $urlAUT."/
email=".$constantes->getEmailPS()."
&token=".$constantes->getTokenPS()."
&currency=BRL
".$itens."
&reference=".$pedidoCliente->getIdPedidoCliente()."
&senderName=".$cliente->getNome()."
&senderAreaCode=".$ddd."
&senderPhone=".$tel."
&senderEmail=".$cliente->getEmail()."
&shippingType=Transportadora
&shippingAddressStreet=".$cliente->getEmail()."
&shippingAddressNumber=".$pedidoCliente->getNumero()."
&shippingAddressComplement=".$pedidoCliente->getNumero()."
&shippingAddressDistrict=".$pedidoCliente->getBairro()."
&shippingAddressPostalCode=".$pedidoCliente->getCep()."
&shippingAddressCity=".$cidade["nome"]."
&shippingAddressState=".$pedidoCliente->getEstado()."
&shippingAddressCountry=BRA";


$urlAUTXML = trim($urlAUTXML);


print $urlAUTXML;


    $autenticacao = $phpUtil->recebeXML($urlAUTXML);
/*
print "<pre>";
//print $itens;
//print $urlAUTXML;
//print_r($itensPS);
print_r($autenticacao);
print "</pre>";
*/
?>
A função
<?php




  public function recebeXML ($url) {


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$data = trim(curl_exec($ch)); 




    $xml = simplexml_load_string($data);




return $xml;




  } 
}
?>

O objetivo é obter o retorno do pagseguro antes de reenviar o cliente para o pagamento mas não chega nada por xml

Share this post


Link to post
Share on other sites

Consegui:

<?php 
  
  $urlAUT = "https://ws.pagseguro.uol.com.br/v2/checkout";
  $urlPGTO = "https://pagseguro.uol.com.br/v2/checkout/payment.html";
  
  $ultimoPedido = $_GET["idPedidoCliente"];
  
  $pedidoCliente = $pedidosClientesDao->pesquisaPedidoCliente ($ultimoPedido);
  $itensPedido = $pedidosDao->pesquisaItensPedido ($pedidoCliente->getIdPedidoCliente());
  $cidade = $phpUtil->pesquisaCidade($conexao, $pedidoCliente->getCidade());
  $cliente = $clientesDao->pesquisaClienteId($pedidoCliente->getIdCliente());


  $ddd= substr($cliente->getTelefone(),0,2);
  $tel= substr($cliente->getTelefone(),2);
  
  $i = 1;
  $itensPS = null;
  
  foreach ($itensPedido as $chave => $item) {


 $produtoP = $produtosDao->pesquisaProdutoId($item->getIdProduto());
 $tipoP = $phpUtil->produtosTipos($produtoP->getTipo());
 $nomeP = $tipoP.", ".$produtosDao->pesquisaNomeProduto($item->getIdProduto());


 $itensPS["itemId".$i] = $item->getIdProduto();
 $itensPS["itemDescription".$i] = $nomeP; 
 $itensPS["itemAmount".$i] =  number_format($item->getPrecoUnitario(), 2, '.', '');
 $itensPS["itemQuantity".$i] = $item->getQuantidade();


 $i++;


}


   $itens = "&";
   foreach ($itensPS as $key => $itemPS) :


       $itens .= $key."=".$itemPS."&";
  
   endforeach;
   
   $itens = substr ($itens, 0, -1);
   
   $post  = "email=".$constantes->getEmailPS();
   $post .= "&token=".$constantes->getTokenPS();
   $post .= "&currency=BRL";
   $post .= $itens;
   $post .= "&reference=".$pedidoCliente->getIdPedidoCliente();
   $post .= "&senderName=".$cliente->getNome();
   $post .= "&senderAreaCode=".$ddd;
   $post .= "&senderPhone=".$tel;
   $post .= "&senderEmail=".$cliente->getEmail();
   $post .= "&shippingType=3";
   $post .= "&shippingCost=".number_format($pedidoCliente->getFrete(), 2, '.', '');
   $post .= "&shippingAddressStreet=".$cliente->getEmail();
   $post .= "&shippingAddressNumber=".$pedidoCliente->getNumero();
   $post .= "&shippingAddressComplement=".$pedidoCliente->getNumero();
   $post .= "&shippingAddressDistrict=".$pedidoCliente->getBairro();
   $post .= "&shippingAddressPostalCode=".$pedidoCliente->getCep();
   $post .= "&shippingAddressCity=".$cidade["nome"];
   $post .= "&shippingAddressState=".$pedidoCliente->getEstado();
   $post .= "&shippingAddressCountry=BRA";


$post = trim($post);


$headers = array();
$headers[] = "Content-Type: application/x-www-form-urlencoded; charset=UTF-8";
$headers[] = 'Connection: Keep-Alive';


    $autenticacao = $phpUtil->recebeXMLHeaders($urlAUT, $headers, $post);
?>




<?php


if( isset($autenticacao->code) ) {


  $pedidosClientesDao->gravarToken($pedidoCliente->getIdPedidoCliente(), $autenticacao->code);
  
  $redirectURL = $urlPGTO."?code=".$autenticacao->code;
  
  echo "<script>location.href='".$redirectURL."'</script>";


} else {


echo "<h1 class='erro textoErro'>Op's: ".$autenticacao["erro"]."</h1>";


}
?>

Função

  public function recebeXMLHeaders ($url, $headers, $post) {


$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POST, 10);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);


if($response == "Unauthorized") {


$xml["erro"] = "Erro na Interação";


} else {


   $xml = simplexml_load_string($response);
}


return $xml;


  } 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.