Ir para conteúdo

POWERED BY:

Arquivado

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

urubullino

Problema com pagseguro... Mais um...

Recommended Posts

Alguem poderia me ajudar?

minha funcao de verificacao esta retornando null....teria que retornar "VERIFICADO".

Tenho certeza que meu token é valido (acabei de gerar) , dei o display nos parametros da url e aparece na boa : "Comando=validar&Token=E1ABFF7...."

Peguei a url junto com o post gigante e mandei pela barra de enderecos

https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml?Comando=validar&Token=E1ABFF7...."

E RETORNOU "VERIFICADO"

Cloncluo que o problema tem grandes chances de ser nas linhas abaixo:

 

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;

 

Obrigado ae

 

codigo todo:

 

<?php

require_once(dirname(dirname(dirname(__FILE__))) . '/app.php');

print_r($INI);

 

header('Content-Type: text/html; charset=ISO-8859-1');

 

define('TOKEN', $INI['pagseguro']['mid']);

 

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;

}

 

}

 

 

 

 

 

Class createLog{

private $name = 'ps.txt';

private $type = 'ab';

public $log;

 

function setType($type = '') {

$this -> type = $type;

}

function setFileName($name = ''){

$this -> name = $name;

}

public function setLog($log){

$this -> log = $this -> log . $log;

}

public function createlog(){

$f = fopen ($this -> name, $this -> type);

fwrite($f, $this -> log . "\n\n");

fclose($f);

}

}

if($_POST){

$log = new createLog();

$log -> setLog("POST @ " . date("d/m/Y H:i:s") . "\n");

$log -> setLog("<pre>" . var_export($_POST, true) . "</pre>\n<--------------->\n");

$log -> createlog();

}

 

 

 

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") {

 

//VERIFICANDO PAGAMENTO

//---------------------------------------------------------------------

if( $_POST['StatusTransacao'] == 'Aprovado') {

 

//echo retorno de pagamento";

$order = Table::Fetch('order', $_POST['ProdID_1']);

 

if ( $order['state'] == 'unpay' ) {

//1

$table = new Table('order');

$table->SetPk('id', $_POST['ProdID_1']);

$table->pay_id = $_POST['TransacaoID'];

$table->money = $_POST['ProdValor_1'];

$table->state = 'pay';

$flag = $table->update(array('state', 'pay_id', 'money'));

 

 

if ( $flag ) {

$table = new Table('pay');

$table->id = $_POST['TransacaoID'];

$table->order_id = $_POST['ProdID_1'];

$table->money = $_POST['ProdValor_1'];

$table->currency = 'BRL';

$table->bank = $_POST['TipoPagamento'];

$table->service = 'pagseguro';

$table->create_time = time();

$table->insert( array('id', 'order_id', 'money', 'currency', 'service', 'create_time', 'bank') );

 

//update team,user,order,flow state//

ZTeam::BuyOne($order);

}

}

 

Utility::Redirect( WEB_ROOT . "/order/pay.php?id={$_POST['Referencia']}");

 

}

else {

// do nothing

//echo 'Não foi pago ainda';

}

//---------------------------------------------------------------------

 

 

/* O post foi validado pelo PagSeguro. */

$to = "Seu e-mail foi validado";

$subject = "POST foi Validado";

 

$query_string = "";

if ($_POST) {

$kv = array();

foreach ($_POST as $key => $value) {

$kv[] = "$key=$value";

}

 

$query_string = join("&", $kv);

}

 

$body = $query_string;

mail($to, $subject, $body);

 

} else if ($result == "FALSO") {

//O post não foi validado pelo PagSeguro.

$to = "Seu e-mail não foi validado";

$subject = "POST não foi Validado";

 

$query_string = "";

if ($_POST) {

$kv = array();

foreach ($_POST as $key => $value) {

$kv[] = "$key=$value";

}

 

$query_string = join("&", $kv);

}

 

$body = $query_string;

mail($to, $subject, $body);

 

} else {

//Erro na integração com o PagSeguro.

$to = "Erro de integração";

$subject = "POST com erro de integração";

 

$query_string = "";

if ($_POST) {

$kv = array();

foreach ($_POST as $key => $value) {

$kv[] = "$key=$value";

}

 

$query_string = join("&", $kv);

}

 

$body = $query_string;

mail($to, $subject, $body);

}

 

} 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.

Utility::Redirect( WEB_ROOT );

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

coloquei o curl_error($curl); e tb nao volta erro nenhum. Aumentei o timeout pra 80 e continua nao dando erro e o $result volta nulo. muito estranho...

Será que ninguem sabe algo q possa ajudar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, fiquei com dó (teu post tem um mês) e resolvi te ajudar.

 

Cola aqui o que o teu log criado salva (o 'ps.txt'). Não tenho prática com a API antiga, mas recomendo usar o ambiente de testes em .Net para isso e testar o quanto quiser.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Gustavo, estou vendo que você está postando vários lugares aqui no forum sobre o seu problema.

 

Tenta postar em um unico local que a comunidade sempre responde...

Compartilhar este post


Link para o post
Compartilhar em outros sites

é que faz tempo que estou com esse problema e não consigo resolver, nem com resposta automática e nem com API! cada vez é um problema que aparece...

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.