Ir para conteúdo
Banner com Efeitos

[MY-AAC-GATEWAY + GESIOR BY CLYFE] MercadoPago Pix 100% Automático e Livre de SQL Injection (GRATIS!)

Featured Replies

Postado
  • Moderador
Em 27/11/2024 em 17:09, shakal1994 disse:

Olá a todos! O sistema em si é muito bom... só tem um problema sério e que acaba tornando inutilizável...

 

Por exemplo, depois do o comprador fazer o pagamento e clicar em "FIZ O PAGAMENTO" ele vai ser enviado para pagina: https://ipot/?p=mpnotification&id=94255267855&debug=false

Até ai tudo ok, ai aparece a mensagem: 

Mpnotification
Connected successfully Premium points updated successfully in accounts table

 
Se o cidadão ficar apertando F5, ele vai ter pontos infinitos :O   alguém achou uma solução para isso?



 

<?php
/**
 * Automatic Mercadopago payment system gateway.
 *
 * @name      pix-myaac-mercadopago
 * @author    Rafhael Oliveira <[email protected]>
 * @website   github.com/thetibiaking/ttk-myaac-plugins
 * @website   github.com/underewarrr/
 * @version   1.0.0
 */

 require_once(SYSTEM . 'functions.php');
 require_once(SYSTEM . 'init.php');
 require_once(PLUGINS . 'mercadopago/pix/config.php');

// Set debug mode based on the query parameter // use debug true in url to get more infos
$debug = isset($_REQUEST['debug']) && $_REQUEST['debug'] === 'true';

// Verify if the collector_id is present in the request
if (isset($_REQUEST['id'])) {
    $collector_id = $_REQUEST['id'];

    // Initialize cURL
    $curl = curl_init();

    // Set cURL options
    curl_setopt_array($curl, array(
        CURLOPT_URL => 'https://api.mercadopago.com/v1/payments/' . $collector_id,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => 'GET',
        CURLOPT_HTTPHEADER => array(
            'accept: application/json',
            'content-type: application/json',
            'Authorization: Bearer ' . $authorizationToken,
        ),
    ));

    // Execute cURL request
    $response = curl_exec($curl);

    // Check if cURL request was successful
    if ($response === false) {
        // Handle cURL error
        echo 'Error fetching payment details from Mercado Pago API.';
        if ($debug) {
            echo '<br>Debug Mode: ON';
            echo '<br>Status from Mercado Pago API: ' . $resultado->status;
            echo 'Total Paid Amount or Transaction Amount: ' . $resultado->transaction_amount * $conversionRate;
            echo '<br>Status from Mercado Pago API: <pre>' . print_r($resultado, true) . '</pre>';
            echo '<br>CURL Error: ' . curl_error($curl);
        }
    } else {
        // Decode the JSON response
        $resultado = json_decode($response);

        // Check if the payment status is 'approved' or 'paid'
        // Check if the payment status is approved or paid
// Check if the payment status is approved or paid
if ($resultado->status === 'approved' || $resultado->status === 'paid') {
// Verifique se o pagamento já foi processado
$check_processed = "SELECT processed FROM status WHERE codigo = ?";
$stmt_check = mysqli_prepare($conexao, $check_processed);
mysqli_stmt_bind_param($stmt_check, "i", $collector_id);
mysqli_stmt_execute($stmt_check);
mysqli_stmt_bind_result($stmt_check, $processed);
mysqli_stmt_fetch($stmt_check);
mysqli_stmt_close($stmt_check);

// Adicionar uma verificação extra para garantir que o pagamento não foi processado
if ($processed === 0 || $processed === null) { // Pagamento não processado ainda
    // Iniciar uma transação para garantir que as atualizações sejam feitas de forma atômica
    mysqli_begin_transaction($conexao);

    try {
        // Marcar o pagamento como processado
        $update_processed = "UPDATE status SET processed = 1 WHERE codigo = ?";
        $stmt_processed = mysqli_prepare($conexao, $update_processed);
        mysqli_stmt_bind_param($stmt_processed, "i", $collector_id);
        mysqli_stmt_execute($stmt_processed);
        mysqli_stmt_close($stmt_processed);

        // Atualizar o status
        $new_status_value = 'delivered';
        $update_status = "UPDATE status SET status = ? WHERE codigo = ?";
        $stmt_status = mysqli_prepare($conexao, $update_status);
        mysqli_stmt_bind_param($stmt_status, "si", $new_status_value, $collector_id);
        mysqli_stmt_execute($stmt_status);
        mysqli_stmt_close($stmt_status);

        // Calcular o valor de pontos premium com base na transação
        $conversionValue = $resultado->transaction_amount * $conversionRate;

        // Obter a conta da sessão
        $current_session = getSession('account');

        // Atualizar a tabela de contas com os pontos premium
        $update_accounts = "UPDATE accounts SET $donationType = $donationType + ? WHERE id = ?";
        $stmt_accounts = mysqli_prepare($conexao, $update_accounts);
        mysqli_stmt_bind_param($stmt_accounts, "di", $conversionValue, $current_session);
        mysqli_stmt_execute($stmt_accounts);
        mysqli_stmt_close($stmt_accounts);

        // Confirmar a transação
        mysqli_commit($conexao);

        echo "Premium points updated successfully in accounts table";
    } catch (Exception $e) {
        // Se algo falhar, faz o rollback da transação
        mysqli_roll_back($conexao);
        echo "Error processing payment: " . $e->getMessage();
    }
} else {
    echo 'Payment already processed.';
}
} else {
    echo 'Payment status is not "approved" or "paid". No database update performed.';
}


        if ($debug) {
        
            echo '<br>Debug Mode: ON';
            echo '<br>Status from Mercado Pago API: ' . $resultado->status;
            echo 'Total Paid Amount or Transaction Amount: ' . $resultado->transaction_amount * $conversionRate;
            echo '<br>Status from Mercado Pago API: <pre>' . print_r($resultado, true) . '</pre>';
            echo '<br>CURL Error: ' . curl_error($curl);
            
            
        }
    }

    // Close cURL
    curl_close($curl);
} else {
    echo 'Invalid or missing collector_id in the request.';
    if ($debug) {
        echo '<br>Debug Mode: ON';
        // Add more debug information as needed
    }
}
?>


Não cheguei a testar, verifica se vai corrigir esse problema de apertar o F5

  • 2 weeks later...
  • Respostas 55
  • Visualizações 28k
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

Posted Images

Postado
Em 03/09/2024 em 15:08, cmcpro disse:

Precisava muito desse script para gesior antigo, eu tentei adaptar porém fala que não acha "Erro: ID da conta n�o encontrado na sess�o."

 

Certamente não estou sabendo definir para captar o id da conta, alguém poderia me dar uma força ?


Opa cara, tudo bem? Acabei de fazer isso pro myaac-gesior-shop-system-v2.5 (To usando Myaac 0.8.6)
Não mexo muito com myaac então tive um pouco de dificuldade. Mas segue o rar...
Você pode só instalar o .zip como se fosse um plugin normal do myaac.

Importante:
Myaac 0.8.6

Myaac Gesior Shop 2.5

Mercado Pago Pix: Branch Master do dia de hoje.
- Não testei o pagamento ainda (to tendo o erro: Error: Collector ID not found in the response.) Ainda estou tentando arrumar isso.
- Apesar de não ter testado, acredito que ta configurado certo com o myaac-gesior-shop... (Mais ou menos, só juntei os dois arquivos)
- Não sei se recomendo utilizar, faça por sua conta e risco kkkkk

- Não Mexi em nada do gesior

 

Edit:

Atualizei o Zip, corrigi todos os erros que eu encontrei em relação a autenticação com o mercado pago. Testei e tá funcional.
Podem dar uma olhada, espero ter ajudado. 

Editar Arquivos:
- system\payments\mercadopago.php
- system\pages\pix.php

 

Na Linha 104 de ambos os arquivos tem a url do MEU site, você deve remover e colocar a URL do seu site.

Obs.: Alterei o funcionamento do valor, na logica q implementei ta fazendo o cálculo do valor com base no valor de 1 premium point. O Usuário seleciona a quantidade, iniciando em 100 e incrementando de 5 em 5 e essa quantidade é multiplicada pelo valor unitário. Por exemplo: O Preço de 1 pp é 0.10 centavos. O Usuário quer 150 pp, o sistema calcula: 150*0,10=R$ 15,00.

 

mercado-pago-myaac-gesior-shop-system-v2.5.zip

Em 03/12/2024 em 16:30, Aksz disse:



 




<?php
/**
 * Automatic Mercadopago payment system gateway.
 *
 * @name      pix-myaac-mercadopago
 * @author    Rafhael Oliveira <[email protected]>
 * @website   github.com/thetibiaking/ttk-myaac-plugins
 * @website   github.com/underewarrr/
 * @version   1.0.0
 */

 require_once(SYSTEM . 'functions.php');
 require_once(SYSTEM . 'init.php');
 require_once(PLUGINS . 'mercadopago/pix/config.php');

// Set debug mode based on the query parameter // use debug true in url to get more infos
$debug = isset($_REQUEST['debug']) && $_REQUEST['debug'] === 'true';

// Verify if the collector_id is present in the request
if (isset($_REQUEST['id'])) {
    $collector_id = $_REQUEST['id'];

    // Initialize cURL
    $curl = curl_init();

    // Set cURL options
    curl_setopt_array($curl, array(
        CURLOPT_URL => 'https://api.mercadopago.com/v1/payments/' . $collector_id,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => 'GET',
        CURLOPT_HTTPHEADER => array(
            'accept: application/json',
            'content-type: application/json',
            'Authorization: Bearer ' . $authorizationToken,
        ),
    ));

    // Execute cURL request
    $response = curl_exec($curl);

    // Check if cURL request was successful
    if ($response === false) {
        // Handle cURL error
        echo 'Error fetching payment details from Mercado Pago API.';
        if ($debug) {
            echo '<br>Debug Mode: ON';
            echo '<br>Status from Mercado Pago API: ' . $resultado->status;
            echo 'Total Paid Amount or Transaction Amount: ' . $resultado->transaction_amount * $conversionRate;
            echo '<br>Status from Mercado Pago API: <pre>' . print_r($resultado, true) . '</pre>';
            echo '<br>CURL Error: ' . curl_error($curl);
        }
    } else {
        // Decode the JSON response
        $resultado = json_decode($response);

        // Check if the payment status is 'approved' or 'paid'
        // Check if the payment status is approved or paid
// Check if the payment status is approved or paid
if ($resultado->status === 'approved' || $resultado->status === 'paid') {
// Verifique se o pagamento já foi processado
$check_processed = "SELECT processed FROM status WHERE codigo = ?";
$stmt_check = mysqli_prepare($conexao, $check_processed);
mysqli_stmt_bind_param($stmt_check, "i", $collector_id);
mysqli_stmt_execute($stmt_check);
mysqli_stmt_bind_result($stmt_check, $processed);
mysqli_stmt_fetch($stmt_check);
mysqli_stmt_close($stmt_check);

// Adicionar uma verificação extra para garantir que o pagamento não foi processado
if ($processed === 0 || $processed === null) { // Pagamento não processado ainda
    // Iniciar uma transação para garantir que as atualizações sejam feitas de forma atômica
    mysqli_begin_transaction($conexao);

    try {
        // Marcar o pagamento como processado
        $update_processed = "UPDATE status SET processed = 1 WHERE codigo = ?";
        $stmt_processed = mysqli_prepare($conexao, $update_processed);
        mysqli_stmt_bind_param($stmt_processed, "i", $collector_id);
        mysqli_stmt_execute($stmt_processed);
        mysqli_stmt_close($stmt_processed);

        // Atualizar o status
        $new_status_value = 'delivered';
        $update_status = "UPDATE status SET status = ? WHERE codigo = ?";
        $stmt_status = mysqli_prepare($conexao, $update_status);
        mysqli_stmt_bind_param($stmt_status, "si", $new_status_value, $collector_id);
        mysqli_stmt_execute($stmt_status);
        mysqli_stmt_close($stmt_status);

        // Calcular o valor de pontos premium com base na transação
        $conversionValue = $resultado->transaction_amount * $conversionRate;

        // Obter a conta da sessão
        $current_session = getSession('account');

        // Atualizar a tabela de contas com os pontos premium
        $update_accounts = "UPDATE accounts SET $donationType = $donationType + ? WHERE id = ?";
        $stmt_accounts = mysqli_prepare($conexao, $update_accounts);
        mysqli_stmt_bind_param($stmt_accounts, "di", $conversionValue, $current_session);
        mysqli_stmt_execute($stmt_accounts);
        mysqli_stmt_close($stmt_accounts);

        // Confirmar a transação
        mysqli_commit($conexao);

        echo "Premium points updated successfully in accounts table";
    } catch (Exception $e) {
        // Se algo falhar, faz o rollback da transação
        mysqli_roll_back($conexao);
        echo "Error processing payment: " . $e->getMessage();
    }
} else {
    echo 'Payment already processed.';
}
} else {
    echo 'Payment status is not "approved" or "paid". No database update performed.';
}


        if ($debug) {
        
            echo '<br>Debug Mode: ON';
            echo '<br>Status from Mercado Pago API: ' . $resultado->status;
            echo 'Total Paid Amount or Transaction Amount: ' . $resultado->transaction_amount * $conversionRate;
            echo '<br>Status from Mercado Pago API: <pre>' . print_r($resultado, true) . '</pre>';
            echo '<br>CURL Error: ' . curl_error($curl);
            
            
        }
    }

    // Close cURL
    curl_close($curl);
} else {
    echo 'Invalid or missing collector_id in the request.';
    if ($debug) {
        echo '<br>Debug Mode: ON';
        // Add more debug information as needed
    }
}
?>


Não cheguei a testar, verifica se vai corrigir esse problema de apertar o F5


Eu tive esse erro quando tava implementando, no meu caso aconteceu porque não tava armazenando o valor no banco de dados e ai sempre ele adicionava pontos pq passava direto na verificação do processed
No zip que eu mandei ali em cima tem uma correção.

  • 4 months later...
Postado
  • Autor
  • Administrador
Em 15/12/2024 em 13:17, Clyfe disse:


Opa cara, tudo bem? Acabei de fazer isso pro myaac-gesior-shop-system-v2.5 (To usando Myaac 0.8.6)
Não mexo muito com myaac então tive um pouco de dificuldade. Mas segue o rar...
Você pode só instalar o .zip como se fosse um plugin normal do myaac.

Importante:
Myaac 0.8.6

Myaac Gesior Shop 2.5

Mercado Pago Pix: Branch Master do dia de hoje.
- Não testei o pagamento ainda (to tendo o erro: Error: Collector ID not found in the response.) Ainda estou tentando arrumar isso.
- Apesar de não ter testado, acredito que ta configurado certo com o myaac-gesior-shop... (Mais ou menos, só juntei os dois arquivos)
- Não sei se recomendo utilizar, faça por sua conta e risco kkkkk

- Não Mexi em nada do gesior

 

Edit:

Atualizei o Zip, corrigi todos os erros que eu encontrei em relação a autenticação com o mercado pago. Testei e tá funcional.
Podem dar uma olhada, espero ter ajudado. 

Editar Arquivos:
- system\payments\mercadopago.php
- system\pages\pix.php

 

Na Linha 104 de ambos os arquivos tem a url do MEU site, você deve remover e colocar a URL do seu site.

Obs.: Alterei o funcionamento do valor, na logica q implementei ta fazendo o cálculo do valor com base no valor de 1 premium point. O Usuário seleciona a quantidade, iniciando em 100 e incrementando de 5 em 5 e essa quantidade é multiplicada pelo valor unitário. Por exemplo: O Preço de 1 pp é 0.10 centavos. O Usuário quer 150 pp, o sistema calcula: 150*0,10=R$ 15,00.

 

mercado-pago-myaac-gesior-shop-system-v2.5.zip 457.74 kB · 6 downloads


Eu tive esse erro quando tava implementando, no meu caso aconteceu porque não tava armazenando o valor no banco de dados e ai sempre ele adicionava pontos pq passava direto na verificação do processed
No zip que eu mandei ali em cima tem uma correção.

Incorporei ao topico! obrigado.

  • Under mudou o título para [MY-AAC-GATEWAY + GESIOR BY CLYFE] MercadoPago Pix 100% Automático e Livre de SQL Injection (GRATIS!)
  • Under unfeatured e featured this tópico

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo