Last active
January 4, 2016 18:29
-
-
Save marcosfreitas/8661404 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
header('Content-Type: application/json; charset=utf-8'); | |
error_reporting(true); | |
try{ | |
/** | |
* Verifica o tipo de requisição. Obrigatoriamente (porque eu quis kk) deve ser do tipo POST | |
*/ | |
if(!$_SERVER['REQUEST_METHOD'] == 'POST') { | |
$retorno = 'Requisição Inválida'; | |
throw new Exception($retorno, 1); | |
} | |
/** | |
* Inclue o arquivo da conexão do banco | |
*/ | |
if(file_exists('../../databases/db.php')) { | |
require_once('../../databases/db.php'); | |
}else{ | |
$retorno = 'Arquivo do Banco de Dados não encontrado.'; | |
throw new Exception($retorno, 1); | |
} | |
/** | |
* Recebe o post como o Tipo de Notificação | |
*/ | |
$tipoNotificacao = $_POST['notificationType']; | |
/** | |
* Recebe o código da Notificação | |
*/ | |
$codigoNotificacao = $_POST['notificationCode']; | |
/** | |
* Verificamos se tipo da notificação é transaction | |
*/ | |
if($tipoNotificacao == 'transaction'){ | |
/** | |
* dados de autenticação do pagseguro | |
*/ | |
$ps_email = "[email protected]"; | |
$ps_token = "HUEHUEHUE1234567890HUE"; | |
/** | |
* Chama a classe para utilizar a biblioteca do pagseguro | |
*/ | |
if(file_exists('../v2/PagSeguroLibrary/PagSeguroLibrary.php')){ | |
require_once ('../v2/PagSeguroLibrary/PagSeguroLibrary.php'); | |
}else{ | |
$retorno = 'Biblioteca do PagSeguro não encontrada.'; | |
throw new Exception($retorno, 1); | |
} | |
/** | |
* Criando objeto PagSeguroAccountCredentials | |
*/ | |
$credentials = new PagSeguroAccountCredentials($ps_email,$ps_token); | |
/** | |
* Verifica as informações da transação, e retorna | |
* o objeto Transaction com todas as informações | |
*/ | |
$transacao = PagSeguroNotificationService::checkTransaction($credentials, $codigoNotificacao); | |
/** | |
* Retorna o objeto TransactionStatus, que vamos resgatar o valor do status | |
* ----------------------------------- | |
* WAITING_PAYMENT 1 Aguardando pagamento: o comprador iniciou a transação, mas até o momento o PagSeguro não recebeu nenhuma informação sobre o pagamento. | |
* IN_ANALYSIS 2 Em análise: o comprador optou por pagar com um cartão de crédito e o PagSeguro está analisando o risco da transação. | |
* PAID 3 Paga: a transação foi paga pelo comprador e o PagSeguro já recebeu uma confirmação da instituição financeira responsável pelo processamento. | |
* AVAILABLE 4 Disponível: a transação foi paga e chegou ao final de seu prazo de liberação sem ter sido retornada e sem que haja nenhuma disputa aberta. | |
* IN_DISPUTE 5 Em disputa: o comprador, dentro do prazo de liberação da transação, abriu uma disputa. | |
* REFUNDED 6 Devolvida: o valor da transação foi devolvido para o comprador. | |
* CANCELLED 7 Cancelada: a transação foi cancelada sem ter sido finalizada. | |
*/ | |
$status = $transacao->getStatus(); | |
//$status = 3; | |
/** | |
* Verificamos se foi realizado o pagamento para mudar no banco de dados | |
* O valor 3 se referente o tipo de status, no caso informando | |
* que cliente realizou o pagamento. | |
* CASO A TRANSACAO TENHA SIDO CANCELADA NÃO ACONTECE NADA COM A MATRICULA DO USUÁRIO, POIS POR PADRÃO ESTÁ INATIVA | |
* https://pagseguro.uol.com.br/v2/guia-de-integracao/documentacao-da-biblioteca-pagseguro-em-php.html#TransactionStatus | |
*/ | |
if($status->getValue() == 3){ | |
//if($status == 3){ | |
/** | |
* Pegamos o código que passamos por referência para o pagseguro | |
* Que no nosso exemplo é id da tabela 'transacoes_pagseguro' | |
*/ | |
$id_transacao = $transacao->getReference(); | |
// $id_transacao = 1; | |
/** | |
* ATUALIZANDO o código de notificação retornado pelo pagseguro na tabela 'transacoes_pagseguro' | |
* ------------- | |
* Esse SQL será para mudança de status do pedido ( 1 => liberado para matricula ), e informar a hora | |
* da modificação do status (hora da confirmação do pagamento) | |
*/ | |
$mysqli->autocommit(false); | |
$upd = 'UPDATE transacoes_pagseguro PS INNER JOIN matricula M ON PS.fk_id_matricula = M.id_matricula SET'; | |
$upd .= ' M.status_matricula = 1'; | |
$upd .= ' PS.ps_status = 1'; | |
$upd .= ' PS.ps_id_notificacao = "'.$codigoNotificacao.'"'; | |
$upd .= ' PS.ps_modificado = NOW()'; | |
$upd .= ' WHERE PS.ps_id_transacao = '.$id_ONS_Transacao; | |
#Executa o SQL | |
$mysqli->query($upd); | |
/** | |
* Verifica se o número de tabelas alteradas no banco de dados é maior que ZERO | |
* Dispara uma exceção com o código 000 (nada alterado no banco) caso nada tenha sido alterado no BD. | |
* Veja tabela de Exceções. | |
* o número -1 identifica que o $mysqli retornou um erro | |
*/ | |
if($mysqli->affected_rows == -1){ | |
$mysqli->rollback(); | |
//echo '3'.$mysqli->error; | |
$retorno = 'Houve um erro na atualização dos dados.'; | |
throw new Exception($retorno, 1); | |
}else{ | |
$mysqli->commit(); | |
$retorno[0] = 'sucesso'; | |
echo json_encode($retorno); | |
} | |
}#fim status->getValue() == 3 | |
else{ | |
$retorno[0] = 'código diferente'; | |
echo json_encode($retorno); | |
} | |
}#fim tipo notificação | |
else{ | |
$retorno[0] = 'tipo de notificação diferente'; | |
echo json_encode($retorno); | |
} | |
# Dispara a Exceção | |
var_dump($retorno); | |
}catch (Exception $e) { | |
$array[0] = $e->getMessage(); //erro crítico | |
echo json_encode($array); | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment