Como corrigir o erro de pagamento (Stripe e PayPal) no Tutor LMS
O que é o erro de pagamento do Tutor LMS (Stripe e PayPal)?
No eCommerce nativo do Tutor LMS, Stripe e PayPal são os gateways que cobram o aluno e liberam a matrícula no curso pago. O fluxo tem duas pernas: a cobrança em si (chaves de API) e a confirmação do pagamento, que volta do gateway para o site por um webhook. O erro de pagamento acontece quando uma dessas pernas quebra: ou a cobrança não inicia, ou ela acontece no gateway mas o webhook nunca avisa o Tutor LMS, deixando o pedido pendente e o aluno sem acesso mesmo tendo pago.
Como identificar
- No checkout do curso aparece a mensagem “Payment failed” ou “Something went wrong” e a compra não conclui.
- Em Tutor LMS -> Orders, o pedido fica preso com status “Pending” ou “Incomplete” mesmo o aluno tendo pago no Stripe ou no PayPal.
- O cartão é cobrado no painel do Stripe, mas o aluno não recebe acesso ao curso nem o pedido vira “Completed” no Tutor LMS.
- O botão de pagamento não carrega ou o método não aparece na tela de checkout, indicando gateway desativado ou chaves vazias.
- No log do Stripe a cobrança aparece como succeeded, mas o evento de webhook mostra falha de entrega ou assinatura inválida.
Antes de começar: Nunca exponha a Secret Key do Stripe nem o Client Secret do PayPal: trate-os como senha e troque imediatamente se vazarem no log ou em print. Teste primeiro em modo Test com cartões de teste do gateway antes de virar a chave para Live numa loja no ar.
Como prevenir
- Mantenha uma única engine de eCommerce ativa em Monetization e documente qual gateway está em uso
- Sempre que migrar de Test para Live, troque as chaves de API E reconfigure o webhook no ambiente Live (eles são separados por ambiente)
- Confira mensalmente o log de webhooks no painel do Stripe e do PayPal para pegar entregas falhas antes que peguem o aluno
- Use uma moeda comprovadamente suportada pelo gateway e revalide a licença Pro após cada renovação
Causa
- Chaves de API no ambiente errado: Payment Environment em Live com chaves de Test (sk_test) ou o inverso, fazendo o gateway recusar a transação por credencial inválida para o modo.
- Webhook não configurado ou com Signature Key errada: sem os eventos charge.succeeded e payment_intent.payment_failed (Stripe) ou Checkout order approved e Payment capture completed (PayPal), o pagamento ocorre mas o pedido nunca vira Completed.
- Mais de uma engine de eCommerce ativa em Settings -> Monetization: o Tutor LMS só opera com uma engine por vez, e ter Native e WooCommerce juntas trava o processamento do pedido.
- Moeda ou país não suportado pelo gateway: a moeda definida em Monetization não está na lista de moedas aceitas pelo Stripe ou pelo PayPal, fazendo a cobrança ser rejeitada.
- Tutor LMS Pro inativo ou licença expirada: o gateway Stripe exige assinatura Pro ativa, e sem ela o método some do checkout ou para de processar.
Como resolver
- Confirme a engine de eCommerce e a moeda: abra as configurações de monetização e garanta que apenas uma engine está ativa. O Tutor LMS não processa pagamento com duas engines ligadas ao mesmo tempo. Confira também se a moeda escolhida é aceita pelo gateway que você usa.
Tutor LMS -> Settings -> Monetization -> eCommerce Engine (deixe apenas Native OU WooCommerce, nunca as duas) - Alinhe o Payment Environment com as chaves de API: o erro mais comum é misturar modo e chave. Em produção, o ambiente precisa estar em Live e as chaves precisam ser de produção; em testes, ambiente Test com chaves de teste. As chaves de teste do Stripe começam com sk_test e as de produção com sk_live.
Tutor LMS -> Settings -> Monetization -> Payment Methods -> Stripe -> Setup Payment Environment: Live (produção) ou Test (homologação) Publishable Key + Secret Key do mesmo ambiente (Live usa sk_live, Test usa sk_test) - Configure o webhook no gateway e cole a Signature Key: sem o webhook o pagamento acontece mas o pedido fica pendente. No painel do gateway, crie o endpoint de webhook apontando para o seu site, selecione os eventos obrigatórios e copie o segredo de assinatura de volta para o Tutor LMS.
Stripe -> Developers -> Webhooks: charge.succeeded, payment_intent.payment_failed, charge.updated, payment_intent.canceled PayPal -> Apps & Credentials -> Webhooks: Checkout order approved, Payment capture completed Cole o Webhook Signature Key (Stripe) ou Webhook ID (PayPal) no Setup do gateway no Tutor LMS - Valide a licença Pro e a credencial do app: o gateway Stripe do eCommerce nativo exige Tutor LMS Pro ativo. Confirme a licença e, no PayPal, verifique se o Client ID e o Client Secret são do mesmo ambiente do app criado no PayPal Developer.
Tutor LMS -> Settings -> verifique a licença Pro ativa PayPal: Merchant Email, Client ID e Client Secret do app no ambiente correto (Sandbox x Live) - Faça uma compra de teste e leia o pedido: com tudo alinhado, faça uma compra real de baixo valor (ou em modo Test com cartão de teste) e acompanhe o pedido. Se a cobrança passa no gateway mas o pedido não vira Completed, o problema está no webhook; se nem a cobrança inicia, está nas chaves ou no ambiente.
Tutor LMS -> Orders: o pedido de teste deve sair de Pending para Completed após o webhook
PHP
<?php
// functions.php do tema filho — registra no log do WordPress cada pedido que o Tutor LMS
// marca como pago, para confirmar se o WEBHOOK do gateway esta chegando e atualizando o pedido.
add_action( 'tutor_order_payment_updated', function ( $order_id, $payment_status ) {
error_log( sprintf(
'[tutor-pagamento] Pedido #%d -> status de pagamento: %s',
$order_id,
$payment_status
) );
}, 10, 2 );
// Cole o codigo, faca uma compra de teste e olhe wp-content/debug.log:
// - se NADA aparece quando o gateway cobra, o webhook nao esta chegando (URL/Signature Key/eventos).
// - se aparece 'failed', o gateway recusou (chave no ambiente errado ou moeda nao suportada).
Perguntas frequentes
Por que o cartão foi cobrado mas o aluno não recebeu acesso ao curso
Quase sempre é o webhook. A cobrança acontece no Stripe ou no PayPal, mas sem o webhook configurado o gateway nunca avisa o Tutor LMS, então o pedido fica Pending e a matrícula não é liberada. Configure os eventos de webhook no gateway e cole o segredo de assinatura no Setup do método para o pedido virar Completed.
O Stripe do Tutor LMS exige a versão Pro
Sim. O gateway Stripe do eCommerce nativo do Tutor LMS depende de uma assinatura Pro ativa. Sem ela, o método de pagamento some do checkout ou para de processar. Confirme que a licença Pro está válida em Settings antes de investigar chaves ou webhook.
O que significa o pedido ficar preso em Pending no Tutor LMS
Pending significa que o Tutor LMS criou o pedido e espera a confirmação do gateway, que chega pelo webhook. Se o pedido nunca sai de Pending, o pagamento até pode ter ocorrido, mas a confirmação não voltou. Cheque o log de webhook no gateway e a Signature Key no Setup do método.
Posso deixar a engine Native e o WooCommerce ativos juntos
Não. O Tutor LMS opera com uma única engine de eCommerce por vez. Native e WooCommerce ligados ao mesmo tempo conflitam no processamento do pedido e travam o pagamento. Em Settings -> Monetization, escolha apenas uma engine e configure o gateway dentro dela.
Estou em produção e o pagamento falha. Pode ser a chave de API
Sim, é a causa número um. Em produção o Payment Environment precisa estar em Live com chaves Live; chaves de teste (sk_test) num ambiente Live são recusadas pelo gateway. Confira no Setup do método se o ambiente e as chaves são do mesmo tipo, Live com Live e Test com Test.
O método de pagamento nem aparece na tela de checkout. O que fazer
Método ausente no checkout costuma ser gateway desativado, chaves vazias ou licença Pro inativa. Vá em Settings -> Monetization -> Payment Methods, ative o gateway, preencha as chaves do ambiente correto e confirme a licença Pro. Depois recarregue a página de checkout para o método reaparecer.
Como testo o pagamento sem cobrar um cartão real
Coloque o Payment Environment em Test e use as credenciais de teste do gateway. No Stripe, use os cartões de teste oficiais; no PayPal, use uma conta sandbox. Faça uma compra de teste e acompanhe em Orders se o pedido vira Completed, validando todo o fluxo antes de virar para Live.
Recebo erro de moeda não suportada no pagamento do Tutor LMS
A moeda definida em Monetization precisa estar entre as aceitas pelo Stripe ou pelo PayPal na sua conta e região. Se a moeda não for suportada, a cobrança é rejeitada na origem. Ajuste a moeda em Settings -> Monetization para uma que o gateway aceite no seu país.














