Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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"](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"](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 );
}
?>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.
estou com o mesmo problema e nada!
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...
é 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...
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?