Ir para conteúdo

Arquivado

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

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?

Compartilhar este post


Link para o post
Compartilhar em outros 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

Compartilhar este post


Link para o post
Compartilhar em outros 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;


  } 

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.