PDA

View Full Version : |Download| script de pagamento pix paghiper (não finalizado)



cronusmaker
08-13-2024, 10:22 PM
O SCRIPT NÃO ESTA FINALIZADO POREM FUNCIONANDO

O SCRIPT SOLICITA DADOS E GERA O QRCODE POREM NÃO CREDITA NO BANCO DE DADOS

DEVO FAZER CORREÇÕES NO FUTURO E COMPARTILHE POREM SEM PREVISÃO

BUGS ( O QRCODE GERADO ELE NÃO E CONVERTIDO PERA O PIX COPIA E COLA )


https://i.ibb.co/xSkhvTk/anb42nE.png
https://i.imgur.com/aeXdcxI.png

config.php
**Hidden Content: Check the thread to see hidden data.**

Ravoc
08-14-2024, 11:29 AM
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;


<?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.";
}
?>

Romário
08-14-2024, 03:17 PM
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;


<?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.";
}
?>




Seria interessante validar essa variável GET para evitar ataques de SQL Inject. Outra melhoria que poderia ser feita é evitar a exposição de informações sensíveis, acho que poderia usar a validação de "transaction_id" para isso.

cronusmaker
08-14-2024, 04:03 PM
Seria interessante validar essa variável GET para evitar ataques de SQL Inject. Outra melhoria que poderia ser feita é evitar a exposição de informações sensíveis, acho que poderia usar a validação de "transaction_id" para isso.

sim eu fiz via mysql porem ultimamente tou sem tempo pra testar alguma coisa no caso do paghiper existe um jeito de validar a transação
deixei ele aberto pra facilitar pro pessoal

Ravoc
08-14-2024, 07:52 PM
Seria interessante validar essa variável GET para evitar ataques de SQL Inject. Outra melhoria que poderia ser feita é evitar a exposição de informações sensíveis, acho que poderia usar a validação de "transaction_id" para isso.

Sim sim, é só um exemplo mesmo! Cabe ao usuário fazer as devidas modificações já que ai o exemplo está bem simples, fazendo a filtragem e as devidas correções para evitar métodos não autorizados pode ser analisado de forma mais afundo! Já que o código está totalmente de mão beijada!

Mas obrigado Romário! Abraço meu amigo.

Farias
08-18-2024, 08:39 PM
Parabens pela contribuição, vai ajudar muuitos !

No aguardo do sistema completo para uso ^^

cronusmaker
10-31-2024, 07:28 PM
Parabens pela contribuição, vai ajudar muuitos !

No aguardo do sistema completo para uso ^^

talves eu retome esse projeto mes que ve