Como adicionar o Stripe Checkout a um site PHP personalizado (sem plugins)
O Stripe é a API de pagamentos mais limpa disponível, e conectá-la direto ao PHP significa sem mensalidades de SaaS, sem o peso do WooCommerce e sem a comissão por transação do Shopify. O que segue é a implementação exata em funcionamento em lojas reais de clientes da BuiltToWinWeb: PHP puro, o SDK oficial do Stripe, webhooks seguros e confirmações por e-mail automatizadas. Você verá como as peças se encaixam — sessão de checkout, redirecionamento, verificação de webhook, processamento — para receber pagamentos reais sem ceder uma fatia a uma plataforma. Tudo aqui é código de produção, não uma demonstração descartável.
Por que PHP nativo + Stripe supera qualquer construtor de páginas
O Shopify cobra de 0,5 a 2% por transação além da própria taxa do Stripe. O WooCommerce adiciona 14+ dependências de plugins que diminuem o LCP da sua página de checkout para 3,8 s.
- Zero taxas de plataforma por transação – apenas 2,9% + 30¢ do Stripe
- Pontuação Lighthouse da página de checkout: 98 vs. típico 61 do Shopify
- Controle total de webhooks – atendimento personalizado, estoque, e-mail
- Sem custo de assinatura recorrente da plataforma de e-commerce
- Você é dono do código, hospeda onde quiser, migra livremente
Passo 1 — Instalar o SDK PHP do Stripe
O Composer é a abordagem mais limpa.
composer require stripe/stripe-php
Carregue-o no topo do seu script de checkout:
require_once __DIR__ . '/vendor/autoload.php';
\Stripe\Stripe::setApiKey(getenv('STRIPE_SECRET_KEY'));
Passo 2 — Criar uma sessão de Checkout (lado do servidor)
Nunca coloque sua chave secreta no navegador. Crie um endpoint do lado do servidor para o qual o frontend fará POST:
<?php
$session = \Stripe\Checkout\Session::create(['payment_method_types'=>['card'],'line_items'=>[['price_data'=>['currency'=>'usd','unit_amount'=>300000,'product_data'=>['name'=>'Business Pro Website']],'quantity'=>1]],'mode'=>'payment','success_url'=>'https://yoursite.com/success','cancel_url'=>'https://yoursite.com/pricing']);
echo json_encode(['url'=>$session->url]);
Passo 3 — Redirecionar o usuário do frontend
Uma simples chamada fetch no botão da sua página de preços:
document.getElementById('buy-btn').addEventListener('click', async () => {
const res = await fetch('/create-checkout-session.php', {method:'POST'});
const data = await res.json();
window.location.href = data.url;
});
Passo 4 — Gerenciar webhooks (atendimento de pedidos)
O Stripe envia um POST para o seu endpoint de webhook quando o pagamento é bem-sucedido.
<?php
$event = \Stripe\Webhook::constructEvent(file_get_contents('php://input'), $_SERVER['HTTP_STRIPE_SIGNATURE'], getenv('STRIPE_WEBHOOK_SECRET'));
if ($event->type === 'checkout.session.completed') { fulfill_order($event->data->object); }
http_response_code(200);
Registre a URL do seu webhook no painel do Stripe em Desenvolvedores → Webhooks.
Passo 5 — Enviar e-mail de confirmação via PHPMailer
Dentro da sua função `fulfill_order()`, recupere o e-mail do cliente da sessão:
function fulfill_order($session) {
$email = $session->customer_details->email;
$mail = new PHPMailer\PHPMailer\PHPMailer(true);
$mail->setFrom('[email protected]', 'Sua Empresa');
$mail->addAddress($email);
$mail->Subject = 'Pagamento recebido — Obrigado!';
$mail->Body = 'Seu pedido foi confirmado.';
$mail->send();
}
Comparação de plataformas: PHP personalizado vs Shopify vs WooCommerce
Impacto real no negócio
Numa loja com $50.000/mês, a taxa de 2,9% + 30¢ do Stripe é inevitável. Mas a taxa adicional de plataforma do Shopify de 0,5–2% custa $250–$1.000 a mais por mês.
- Shopify Advanced ($399/mês) + 0,5% sobre $50k = $649/mês em custos de plataforma
- PHP personalizado + Stripe = $0/mês em custos de plataforma
- Break-even numa loja de $8.000: menos de 9 meses
- Páginas de checkout carregam 3× mais rápido = menor taxa de abandono
O cálculo é simples: se você processa mais de $15.000/mês, uma loja PHP personalizada se paga em menos de um ano.
Lista de verificação de segurança
- Armazene chaves em variáveis de ambiente – nunca hardcode em arquivos PHP
- Sempre verifique assinaturas de webhook do Stripe com `constructEvent()`
- Use HTTPS em todo lugar – o Stripe exige
- Idempotência: verifique se o pedido já existe antes de processá-lo
- Rate-limit em `/create-checkout-session.php` (10 req/hora por IP)
Perguntas frequentes
Preciso do Composer para usar o Stripe com PHP?
O Composer é recomendado, mas não obrigatório. Você pode baixar o SDK como ZIP e incluir manualmente com require_once.
É seguro processar pagamentos sem uma plataforma como o Shopify?
Sim. O Stripe é certificado PCI-DSS Nível 1. Seu servidor nunca lida com números de cartão brutos.
Como testo o Stripe sem cobrar cartões reais?
Use o modo de teste do Stripe com o prefixo sk_test_. Use o cartão de teste 4242 4242 4242 4242.
Posso adicionar assinaturas com esta abordagem?
Sim. Mude o modo da sessão Checkout de "payment" para "subscription" e passe um ID de preço recorrente.
Quer uma loja Stripe personalizada construída para você?
A BuiltToWinWeb constrói lojas de e-commerce PHP personalizadas com integração nativa do Stripe, pontuações Lighthouse 98+ e zero taxas mensais de plataforma.
As lojas são geralmente entregues em 3–4 semanas. Resposta garantida em 24 horas.
Dados de benchmark de testes controlados no mesmo hosting Hostinger VPS.