regina 0 Denunciar post Postado Junho 19, 2012 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 { //Erro na integração com o 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 Compartilhar este post Link para o post Compartilhar em outros sites
regina 0 Denunciar post Postado Junho 19, 2012 Usando o seguinte script consegui obter o if(isset($_POST['notificationType']) && $_POST['notificationType'] == 'transaction'){ //Todo resto do código iremos inserir aqui. $email = "email@cliente.com.br"; $token = "token do meu cliente"; $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 exit;//Mantenha essa linha } $transaction = simplexml_load_string($transaction); ?> <h3>Obrigado por efetuar a compra via pagseguro.</h3> <?php } $name = 'log_pagseguro.txt'; $text = var_export($_POST, true); $file = fopen($name, 'a'); fwrite($file, $text); fclose($file); } recebi os seguintes valores notificationCode e notificationType agora como fazer para receber os demais dados? Agradeço a quem puder ajudar Compartilhar este post Link para o post Compartilhar em outros sites
Web Lucas Oliveira 1 Denunciar post Postado Junho 19, 2012 https://pagseguro.uol.com.br/v2/guia-de-integracao/tutorial-da-biblioteca-pagseguro-em-php.html#pagamentos Leia a parte de receber notificações. Compartilhar este post Link para o post Compartilhar em outros sites
alcaidedigital 57 Denunciar post Postado Junho 20, 2012 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: http://sounoob.com.br/2011/09/06/recebendo-notificacoes-do-pagseguro-usando-php-sem-utilizar-a-biblioteca-oficial/ Compartilhar este post Link para o post Compartilhar em outros sites
regina 0 Denunciar post Postado Junho 20, 2012 ==> 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); #configuração para o CURL para não verificar os certificados SSL do PagSeguro. #Como precisamos da resposta do servidor do PagSeguro então vamos marcar no CURL que é para ele trazer uma resposta #Hora de executar o CURL, ele deverá retornar a resposta do servidor do PagSeguro, que deverá ser um XML, iremos gravar essa informação na variavel $transaction 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 Compartilhar este post Link para o post Compartilhar em outros sites
regina 0 Denunciar post Postado Junho 21, 2012 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 Compartilhar este post Link para o post Compartilhar em outros sites
Paulo Linhares 1 Denunciar post Postado Agosto 28, 2012 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! Compartilhar este post Link para o post Compartilhar em outros sites