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.
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
// 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).














