Simples porém funcional! Não vai ser difícil fazer a inserção no banco de dados, quando montar a consulta de status de pagamento será 1 linha de acréscimo!
Caso alguém for usar, só mencionar aqui que faremos todos juntos a atualização! Mas, a base ficaria mais ou menos assim;
Código:
<?php
require 'config.php';
$transaction_id = $_GET['transaction_id'];
// Dados para verificação
$data = [
"apiKey" => PAGHIPER_API_KEY,
"transaction_id" => $transaction_id,
];
$ch = curl_init('https://pix.paghiper.com/invoice/status/');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
curl_close($ch);
$responseData = json_decode($response, true);
// Verifica a resposta da API
if (isset($responseData['status_request']['result']) && $responseData['status_request']['result'] == 'success') {
$status = $responseData['status_request']['status'] ?? 'unknown';
$conn = new PDO("sqlsrv:server=" . DB_SERVER . ";Database=" . DB_DATABASE, DB_USERNAME, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "UPDATE pagamentos SET status = :status WHERE transaction_id = :transaction_id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':status', $status);
$stmt->bindParam(':transaction_id', $transaction_id);
if ($stmt->execute()) {
echo "Status atualizado com sucesso!";
if ($status === 'approved') {
$sqlSaldo = "UPDATE clientes SET saldo = saldo + :valor WHERE cliente_id = (SELECT cliente_id FROM pagamentos WHERE transaction_id = :transaction_id)";
$stmtSaldo = $conn->prepare($sqlSaldo);
$valor = $responseData['status_request']['value_cents'] / 100;
$stmtSaldo->bindParam(':valor', $valor);
$stmtSaldo->bindParam(':transaction_id', $transaction_id);
if ($stmtSaldo->execute()) {
echo "Saldo adicionado ao cliente com sucesso!";
} else {
echo "Erro ao adicionar saldo ao cliente.";
}
}
} else {
echo "Erro ao atualizar o status no banco de dados.";
}
} else {
echo "Erro ao verificar o status do pagamento.";
}
?>