Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia,
Estou finalizando uma loja...Minha dificuldade agora está no retorno do pagseguro.
O cliente faz a compra, escolhe como forma de pagamento o pagseguro, os dados vão para a página do pagseguro certinho quando o cliente termina ele retorna para a página do meu cliente mas não consigo pegar os dados.
Como faço para pegar o retorno:
if(!empty($_GET["compra"])) {
$compra_id=$_GET["compra"];
} else {
header('Content-Type: text/html; charset=ISO-8859-1');
define('TOKEN', 'token do meu cliente');
class PagSeguroNpi {
private $timeout = 20; // Timeout em segundos
public function notificationPost() {
$postdata = 'Comando=validar&Token='.TOKEN;
foreach ($_POST as $key => $value) {
$valued = $this->clearStr($value);
$postdata .= "&$key=$valued";
}
return $this->verify($postdata);
}
private function clearStr($str) {
if (!get_magic_quotes_gpc()) {
$str = addslashes($str);
}
return $str;
}
private function verify($data) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml");
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_TIMEOUT, $this->timeout);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$result = trim(curl_exec($curl));
curl_close($curl);
return $result;
}
}
if (count($_POST) > 0) {
// POST recebido, indica que é a requisição do NPI.
$npi = new PagSeguroNpi();
$result = $npi->notificationPost();
$transacaoID = isset($_POST['TransacaoID']) ? $_POST['TransacaoID'] : '';
if ($result == "VERIFICADO") {
//O post foi validado pelo PagSeguro.
} else if ($result == "FALSO") {
//O post não foi validado pelo PagSeguro.} else {
// POST não recebido, indica que a requisição é o retorno do Checkout PagSeguro.
// No término do checkout o usuário é redirecionado para este bloco.
?>
<h3>Obrigado por efetuar a compra.</h3>
<?php
} $name = 'log_pagseguro.txt';
$text = var_export($_POST, true);
$file = fopen($name, 'a');
fwrite($file, $text);
fclose($file);
}
no arquivo que gravo o log vem apenas
array ()
Já tentei diversas formas que encontrei mas só recebo este retorno.
Agradeço a quem puder e tiver paciência para me ajudar
Leia a parte de receber notificações.
Muita gente tem dificuldades em utilizar retorno automático, é por isso que o PagSeguro criou a API de notificações, o qual é bem mais simples de utilizar...
Segue um tutorial abaixo explicando passo a passo:
==> Oi Web Lucas Oliveira
eu já li e reli os tutoriais do pagseguro, mas não consigo unir o conceito ao script.
Agradeço
==> Oi senartes,
eu estou utilizando este tutorial que você indicou, minha dificuldade está a partir daí, eu peguei o
array (
'notificationCode' => '191C6D',
'notificationType' => 'transaction',
)
agora como faço para conseguir pegar o restante dos dados, tenho muita dificuldade com o xml, e fico mais ansiosa porque sei que não é tão difícil como percebo.
Quando volto do pagseguro preciso exibir o número da compra (que já gravei e enviei junto ao pagseguro) na tela e também preciso dele para enviar o e-mail ao comprador e também gravar a forma de pagamento e outros dados para gerenciamento do meu cliente.
tentei assim:
>
$array_xml = array(
"compra_id" =>(string)$transaction->reference,
"data" =>(string)$transaction->date,
"numero_documento" =>(string)$transaction->code,
"tipo_forma_pgto" =>(string)$transaction->paymentMethod->type,
"codigo_forma_pgto" =>(string)$transaction->paymentMethod->code,
"parcelas" =>(string)$transaction->installmentCount,
"valor_PagSeguro" =>(string)$transaction->grossAmount,
"taxas_PagSeguro" =>(string)$transaction->feeAmount,
"situacao" =>(string)$transaction->status,
);
mas não gravou nada no meu arquivo de log, ou melhor, gravou sim, mas dados em branco:
>
array (
'compra_id' => '',
'data' => '',
'numero_documento' => '',
'tipo_forma_pgto' => '',
'codigo_forma_pgto' => '',
'parcelas' => '',
'valor_PagSeguro' => '',
'taxas_PagSeguro' => '',
'situacao' => '',
)NULL
O script completo
if(isset($_POST['notificationType']) && $_POST['notificationType'] == 'transaction'){
$email = "loja@cliente.com.br";
$token = "xxxxx";
#dados são passados para o PagSeguro junto a uma URL
$url = "https://ws.pagseguro.uol.com.br/v2/transactions/notifications/" . $_POST['notificationCode'] . "?email=" . $email . "&token=" . $token;
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$transaction= curl_exec($curl);
curl_close($curl); if($transaction == '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
$e_destino="devs@pagseguro.zendesk.com";
$mensagem="Favor verificar o erro no momento da requisição de informações sobre o pagamento PagSeguro, Unauthorized!".$_POST['notificationCode'];
envia_info("loja@cliente.com.br","Cliente","Unauthorized Requisição de pagamento PagSeguro",$e_destino,"Cliente",$mensagem);
# header('Location: /');
exit;//Mantenha essa linha
}
$transaction = simplexml_load_string($transaction);
$transaction = $xml->transaction;
$array_xml = array(
"compra_id" =>(string)$transaction->reference,
"data" =>(string)$transaction->date,
"numero_documento" =>(string)$transaction->code,
"tipo_forma_pgto" =>(string)$transaction->paymentMethod->type,
"codigo_forma_pgto" =>(string)$transaction->paymentMethod->code,
"parcelas" =>(string)$transaction->installmentCount,
"valor_PagSeguro" =>(string)$transaction->grossAmount,
"taxas_PagSeguro" =>(string)$transaction->feeAmount,
"situacao" =>(string)$transaction->status,
);
Será que você pode me ajudar?
Agradeço por enquanto
Fazendo um teste direto na url como indicado em blogpagseguro.com.br/2012/02/recebendo-notificacao-de-transacao/
https://ws.pagseguro.uol.com.br/v2/transactions/notifications/766B9C-AD4B044B04DA-77742F5FA653-E1AB24?email=suporte@lojamodelo.com.br&token=95112EE828D94278BD394E91C4388F20
retorna o xml todos os dados da minha compra.
Minha dificuldade está em pegar o notificationType e o notificationCode quando eles chegam do pagseguro.
Devo criar um script para:
ler o txt;
verificar o último conteúdo;
pegar os dados (como se lê array em arquivo texto?)
enviar a requisição ao pagseguro para obter os valores?
agradeço
Olá!
Consegui pegar os dados que necessito ao finalizar a compra, agora só estou com alguns probleminhas ao gravar os valores retornados, por exemplo:
1) recebo
valor da compra 17.69
valor da taxa 0.90
ao gravar fica assim
valor da compra 9.99
valor da taxa 0.00
em ambos os casos os valores estão como double(3,2).
2) Como faço para gravar a data retornada pelo Pagseguro?
Desde já agradeço
Regina , neste caso já é um pouco de conhecimento de tipos de dados do MySQL.
Existe certos tipos de dados indicados para se gravar valores financeiros (dinheiro em outras palavras).
Mas o mais indicado é sem dúvida o DECIMAL por apresentar um valor preciso.
EX. decimal(7,2)
isso gravar na tabela valores na casa dos milhões.
Aí na hora de imprimi-los na tela é só formatar o valor usando number_formar();
Exemplo prático:
Digamos que em seu banco esteja gravado assim: 1800.24
Então:
<?php
$valor_bd = 1800.24;
$valor_formatado = number_format($valor_bd, 2, ',', ' ');
echo $valor_formatado;
//saída 1 800,24
?>
Espero que tenha ajudado!
Abs!
Usando o seguinte script consegui obter o
recebi os seguintes valores notificationCode e notificationType
agora como fazer para receber os demais dados?
Agradeço a quem puder ajudar