NowaHosting


AlphaServers


CosttaitCloud


Resultados 1 a 6 de 6
  1. #1
    Membro cronusmaker's Avatar

    Data de Ingresso
    Dec 2022
    Posts
    45
    Thanks Thanks Given 
    45
    Thanks Thanks Received 
    136
    Thanked in
    21 Posts
    Mentioned
    0 Post(s)
    Humor
    Angelic
    País
    Brazil

    script de pagamento pix paghiper (não finalizado)

    Nota
    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 )





    config.php
    Last edited by Mentor; 08-14-2024 at 02:15 AM.

  2. The Following 12 Users Say Thank You to cronusmaker For This Useful Post:


  3. #2
    Developer C++ Ravoc's Avatar


    Data de Ingresso
    Aug 2022
    Posts
    30
    Thanks Thanks Given 
    59
    Thanks Thanks Received 
    52
    Thanked in
    12 Posts
    Mentioned
    0 Post(s)
    País
    France
    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.";
    }
    ?>
    Last edited by Ravoc; 08-14-2024 at 11:38 AM.

  4. The Following User Says Thank You to Ravoc For This Useful Post:


  5. #3
    Developer C++ Romário's Avatar

    Data de Ingresso
    Jul 2022
    Posts
    44
    Thanks Thanks Given 
    24
    Thanks Thanks Received 
    279
    Thanked in
    21 Posts
    Mentioned
    2 Post(s)
    País
    Brazil
    Citação Originally Posted by Ravoc Ver Post
    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.";
    }
    ?>
    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.

  6. The Following User Says Thank You to Romário For This Useful Post:


  7. #4
    Membro cronusmaker's Avatar

    Data de Ingresso
    Dec 2022
    Posts
    45
    Thanks Thanks Given 
    45
    Thanks Thanks Received 
    136
    Thanked in
    21 Posts
    Mentioned
    0 Post(s)
    Humor
    Angelic
    País
    Brazil
    Citação Originally Posted by Romário Ver Post
    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

  8. The Following User Says Thank You to cronusmaker For This Useful Post:


  9. #5
    Developer C++ Ravoc's Avatar


    Data de Ingresso
    Aug 2022
    Posts
    30
    Thanks Thanks Given 
    59
    Thanks Thanks Received 
    52
    Thanked in
    12 Posts
    Mentioned
    0 Post(s)
    País
    France
    Citação Originally Posted by Romário Ver Post
    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.

  10. The Following 2 Users Say Thank You to Ravoc For This Useful Post:


  11. #6
    Membro Farias's Avatar

    Data de Ingresso
    Jul 2022
    Posts
    150
    Thanks Thanks Given 
    128
    Thanks Thanks Received 
    24
    Thanked in
    23 Posts
    Mentioned
    3 Post(s)
    País
    Brazil
    Parabens pela contribuição, vai ajudar muuitos !

    No aguardo do sistema completo para uso ^^

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • You may not post Resposta(s)
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •