1
I downloaded the official library of Pagseguro, Pagsegurolibrary, but they say that with the transparent checkout all the process is done in the virtual store and all communication with Pagseguro is done via Curl.
However, this is not what happens because at the end of the file that calls the library we have a redirect to the payment page on the Pagseguro site.
Behold:
<?php
...
echo "<script>document.location='".$url."'</script>";
?>
All code
<?php
$pedidoCliente = $pedidosClientesDao->pesquisaPedidoCliente ($_GET["idPedidoCliente"]);
$itensPedido = $pedidosDao->pesquisaItensPedido ($pedidoCliente->getIdPedidoCliente());
$cidade = $phpUtil->pesquisaCidade($conexao, $pedidoCliente->getCidade());
$cliente = $clientesDao->pesquisaClienteId($pedidoCliente->getIdCliente());
$ddd= substr($_SESSION["cliente"]["telefoneCliente"],0,2);
$tel= substr($_SESSION["cliente"]["telefoneCliente"],2);
require_once 'PagSeguroLibrary/PagSeguroLibrary.php';
/** INICIO PROCESSO PAGSEGURO */
$paymentrequest = new PagSeguroPaymentRequest();
foreach ($itensPedido as $chave => $item) {
$produtoP = $produtosDao->pesquisaProdutoId($item->getIdProduto());
$tipoP = $phpUtil->produtosTipos($produtoP->getTipo());
$nomeP = $tipoP.", ".$produtosDao->pesquisaNomeProduto($item->getIdProduto());
$data = Array(
'id' => $item->getIdProduto(), // identificador
'description' => $nomeP, // descrição
'quantity' => $item->getQuantidade(), // quantidade
'amount' => number_format($item->getPrecoUnitario(), 2, '.', '')
);
$dataItem = new PagSeguroItem($data);
/* $paymentRequest deve ser um objeto do tipo PagSeguroPaymentRequest */
$paymentrequest->addItem($dataItem);
}
$paymentrequest->setCurrency('BRL');
////////////////q
$paymentrequest->setShippingType(3);
$paymentrequest->setShippingCost(number_format($pedidoCliente->getFrete(), 2, '.', ''));
//Url de redirecionamento
$redirectURL = "http://www.hotplateprensas.com.br/retornoPS.php";
$paymentrequest->setRedirectURL($redirectURL);// Url de retorno
$credentials = PagSeguroConfig::getAccountCredentials();//credenciais do vendedor
//$compra_id = App_Lib_Compras::insert($produto);
$paymentrequest->setReference($pedidoCliente->getIdPedidoCliente());//Referencia;
$paymentrequest->setSender(
$cliente->getNome(), //nome
$cliente->getEmail(), //email
$ddd, //ddd
$tel, //numero
strlen($cliente->getDocumento()) == 11 ? "CPF" : "CNPJ",
$cliente->getDocumento()
);
$paymentrequest->setShippingAddress(
$pedidoCliente->getCep(), //cep
$pedidoCliente->getEndereco(), //rua
$pedidoCliente->getNumero(), //numero
$pedidoCliente->getComplemento(), //complemento
$pedidoCliente->getBairro(), //bairro
$cidade["nome"], //cidade
$pedidoCliente->getEstado(), //estado
"BRASIL" //pais
);
$url = $paymentrequest->register($credentials);
echo "<script>document.location='".$url."'</script>";
?>
On the other hand, using open source without using the library, you get the same result.
<?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 .= "¤cy=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>";
}
?>
Does what I’m thinking is checkout in the store itself actually isn’t any of that? Is there no way to achieve that?
So either use or not use the library. I am scepter?
Detail: both codes work correctly.
Secure Pag transparent checkout does not leave the client environment. It is communication via API. As you said, you can use Curl that will return an XML with the data. In Pagseguro you need to set up the Return checkout URL, then you return to a link from your site. Documentação Pagseguro
– Diego Souza