Ir para conteúdo
  • Cadastre-se

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


Posts Recomendados

  • Moderador
  Em 27/11/2024 em 20: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?
Mostrar mais  



 

<?php
/**
 * Automatic Mercadopago payment system gateway.
 *
 * @name      pix-myaac-mercadopago
 * @author    Rafhael Oliveira <rafhaelxd@gmail.com>
 * @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

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • Respostas 53
  • Created
  • Última resposta

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

Olá vou disponibilizar aqui o sistema de pagamento automático do mercado pago via pix utilizando o myaac. O Sistema esta livre de sql injection e com o workflow 100% correto. Em breve solto o do cartão de crédito. Configuração  Coloque os conteúdos das pastas systems e plugins dentro de suas respectivas pastas em seu website. Configure o arquivo plugins/mercadopago/config.php com os dados necessarios Lembre-se de configurar o seu domínio no arquivo system/pages/

Posso te ajudar a implementar ja aproveitamos e lançamos no gesior do thetibiaking, me chama discord!

Gostaria de saber se é possível fazer isso também no Gesior?

Posted Images

  Em 03/09/2024 em 18: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 ?

Mostrar mais  


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.zipFetching info...

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



 



<?php
/**
 * Automatic Mercadopago payment system gateway.
 *
 * @name      pix-myaac-mercadopago
 * @author    Rafhael Oliveira <rafhaelxd@gmail.com>
 * @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

Mostrar mais  


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.

Link para o post
Compartilhar em outros sites
  • 4 months later...
  • Administrador
  Em 15/12/2024 em 16: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.

Expand   Mostrar mais  

Incorporei ao topico! obrigado.

Link para o post
Compartilhar em outros sites
  • 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
  • Administrador
Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Estatísticas dos Fóruns

    96843
    Tópicos
    519590
    Posts



×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo