Ir para conteúdo
  • Cadastre-se

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


Posts Recomendados

  • Respostas 52
  • 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 d

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

e sim

Posted Images

  • Moderador
Em 31/05/2024 em 22:12, Noir disse:

Você pode configurar um weebhook como endpoint no próprio site do mercado pago, então toda vez que o pagamento for realizado ele vai chamar o webhook.

Ele esta correto primeiro é necessário configurar o domínio do seu website com a rota de retorno no próprio site do MercadoPago.
Procure por como configurar um APP no mercado pago.
Qual quer outro erro como Falta do Collector ID indica uma má configuração no retorno do mercadopago.
Para melhor segurança o  X-Idempotency-Key. Deve ser manipulado pelo proprio mercadoPago.
Então certifique que :
1 - O seu retorno está configurado corretamente no site do Mercadopago.
2 - Sua conta Mercadopago possui uma chave pix Valida.
3 - Seu Domínio está redirecionando o retorno para HTTPS.

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
  • 3 weeks later...

Salve! Antes de qualquer coisa muito obrigado por essa contribuição. Gratidão!

 

Estou usando a versão mais atual do MyACC com PIX automático que você disponibilizou mas estou tendo um erro ao abrir o site.

Versão que estou utilizando:

Citar

 

Erro:

Citar

Exception class: PDOException()

SQLSTATE[42S02]: Base table or view not found: 1146 Table 'otservbr-global.z_polls' doesn't exist


Backtrace:

#0 C:\xampp\htdocs\system\libs\pot\OTS_Base_DB.php(86): PDO->query('SELECT `id`, `q...', NULL)
#1 C:\xampp\htdocs\system\libs\pot\OTS_DB_PDOQuery_PHP71.php(10): OTS_Base_DB->doQuery('SELECT `id`, `q...', NULL)
#2 C:\xampp\htdocs\templates\tibiacom\boxes\poll.php(7): OTS_Base_DB->query('SELECT `id`, `q...')
#3 C:\xampp\htdocs\templates\tibiacom\index.php(637): include('C:\\xampp\\htdocs...')
#4 C:\xampp\htdocs\index.php(367): require('C:\\xampp\\htdocs...')
#5 {main}

 

No momento estou desenvolvendo um servidor usando a base do Canary 3.1.2 e estou testando as coisas em localhost, por isso apenas extrai os arquivos dentro da pasta htdocs e fiz a instalação padrão do MyACC.

 

Poderia dar uma força? @Underewar

Link para o post
Compartilhar em outros sites
  • Moderador
19 horas atrás, Bosco disse:

Salve! Antes de qualquer coisa muito obrigado por essa contribuição. Gratidão!

 

Estou usando a versão mais atual do MyACC com PIX automático que você disponibilizou mas estou tendo um erro ao abrir o site.

Versão que estou utilizando:

 

Erro:

 

No momento estou desenvolvendo um servidor usando a base do Canary 3.1.2 e estou testando as coisas em localhost, por isso apenas extrai os arquivos dentro da pasta htdocs e fiz a instalação padrão do MyACC.

 

Poderia dar uma força? @Underewar

Rode o comando na database
 

CREATE TABLE `z_polls` (
                           `id` int(11) NOT NULL auto_increment,
                           `question` varchar(255) NOT NULL,
                           `end` int(11) NOT NULL,
                           `start` int(11) NOT NULL,
                           `answers` int(11) NOT NULL,
                           `votes_all` int(11) NOT NULL,
                           PRIMARY KEY  (`id`)
                         ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
  • Moderador

Tópico atualizado com tutorial sobre como configurar o app no mercadopago.

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
  • 4 weeks later...

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 ?

Link para o post
Compartilhar em outros sites
  • 2 weeks later...

olá meu amigo! é um script excelente para sairmos do tão pagseguro! Deixa eu te perguntar uma dúvida:

Só vai funcionar se o retorno for em HTPPS? não da pra por em HTTP? pois estou com server XAMPP em casa mesmo e não consigo por nada no mundo liberar o HTTPS nele :(

Link para o post
Compartilhar em outros sites
  • 2 months later...
  • Moderador
Em 14/09/2024 em 12:30, Leandro Martins disse:

olá meu amigo! é um script excelente para sairmos do tão pagseguro! Deixa eu te perguntar uma dúvida:

Só vai funcionar se o retorno for em HTPPS? não da pra por em HTTP? pois estou com server XAMPP em casa mesmo e não consigo por nada no mundo liberar o HTTPS nele :(

Para usar as credenciais de produção você deve usar HTTPS, para teste você pode usar HTTP
Infelizmente o MP não aceita requests em produção sem HTTPS
Para ambos os casos você precisa configurar corretamente o seu APP-ID no mercado pago para ter acesso ao bearer token.

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 ?

O sey myaac deve usar uma função diferente para pegar o ID da conta verifique a função correta para pegar o id da sessão conectada e corrija no script de pagamento algo como account->getSessionID()

Em 09/08/2024 em 20:09, dgprado disse:

app/credentials.php   que arquivo é este,onde fica isso ?

Nesse caso edite no myaac/plugins/mercadopago/config.php

Participe da organização Open-Tibia.
Meus Perfils pessoais

Linkedin Rafhael Oliveira Tryber | XP Inc Github Rafhael Oliveira Tryber | XP Inc

Link para o post
Compartilhar em outros sites
Em 14/09/2024 em 12:30, Leandro Martins disse:

olá meu amigo! é um script excelente para sairmos do tão pagseguro! Deixa eu te perguntar uma dúvida:

Só vai funcionar se o retorno for em HTPPS? não da pra por em HTTP? pois estou com server XAMPP em casa mesmo e não consigo por nada no mundo liberar o HTTPS nele :(

 

Como o @Underewardisse é possível usar o HTTP apenas para teste, credenciais em produção o Mercado Pago exige que o site use HTTPS com certificado SSL/TLS válido. E sim, é possível usar HTTPS(443) com certificado no XAMPP bem simples, embora não recomendo usar XAMPP para servidor em produção, já que XAMPP é para ambiente de desenvolvimento. Se você utiliza Windows Server recomendo mudar para IIS do próprio sistema. Como o tópico não se trata de como resolver essa questão no XAMPP, recomendo criar um tópico referente a isso.

 

Edit: me toquei agora que você mencionou que utiliza xampp em casa, provavelmente seria Windows 10/11. Esquece o Windows Server

Editado por Yan Liima (veja o histórico de edições)

════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═══╗

Te Ajudei? Rep + e ficamos Quits

166420979_logoyanliimaornight.png.33f822b8970081a5b3646e85dbfd5934.png

Precisando de ajuda?

discord.png.1ecd188791d0141f74d99db371a2e0a4.png.890d5a38d7bcde75543c72b624a65de1.pngDiscord: Yan Liima #3702

Programador Júnior de LUA, PHP e JavaScript

Juntos somos lendas, separados somos Mitos!

╚══════════════════════════ҳ̸Ҳ̸ҳஜ۩۞۩ஜҳ̸Ҳ̸ҳ═════════════════════════════╝

Link para o post
Compartilhar em outros sites

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

Link para o post
Compartilhar em outros sites
  • 2 weeks later...
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.

Editado por Clyfe
Correção de texto (veja o histórico de edições)
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.




×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo