Primeiros passos
Início rápido com npx
Um comando configura o Perly Pay no seu projeto: a rota de checkout, a rota do webhook com verificação de assinatura, um botão Pay e a sua chave de teste.
npx perly-pay init lê o seu projeto, escreve código para o framework dele e deixa você a um clique de um pagamento de teste. Ele só configura o modo de teste; a produção é ativada no painel.
Execute
Ele detecta o framework e o gerenciador de pacotes, abre Dashboard → Developers e pede uma chave de teste (sk_test_…). Uma chave de produção é recusada.
O que ele escreve
| Framework | Como detecta | Arquivos |
|---|---|---|
| Next.js (App Router) | next | lib/perly-pay.ts, app/api/perly-pay/checkout/route.ts, app/api/perly-pay/webhook/route.ts, components/PayButton.tsx, app/perly-pay/page.tsx |
| Express | express | lib/perly-pay.js, routes/perly-pay.js |
| Hono | hono | lib/perly-pay.ts, routes/perly-pay.ts |
| Laravel | artisan, laravel/framework | app/Http/Controllers/PerlyPayController.php, routes/perly-pay.php, config/perly-pay.php, resources/views/perly-pay/button.blade.php |
| Node.js | qualquer outro package.json | lib/perly-pay.js, perly-pay.js (node:http) |
TypeScript ou JavaScript, módulos ES ou CommonJS, como o seu projeto, e em src/ se o seu código está lá. npm, pnpm, yarn, bun e Composer.
- Checkout. O botão envia um formulário para
/perly-pay/checkout(/api/perly-pay/checkoutno Next.js). Ele abre uma fatura e leva o comprador a pagá-la. - Webhook.
/perly-pay/webhookverificaPerly-Signaturesobre o corpo bruto. Cominvoice.fulfilled, chamagrantAccess(), o único TODO que você escreve. - Planos. Vendas únicas e pacotes de créditos, em
PLANSno início do módulo principal. O plano, os créditos dele e o seu id de usuário vão nos metadados da fatura e voltam no webhook. - Chaves.
PERLY_PAY_SECRET_KEYePERLY_PAY_WEBHOOK_SECRETem.env.local(Next.js) ou.env, e o arquivo no.gitignore. Se o git já rastreia esse arquivo, o init não escreve a chave nele e diz como parar de rastreá-lo.
--force substitui.Conecte o webhook
O Perly Pay precisa alcançar o endereço do webhook. Adicione-o em Dashboard → Developers → Webhooks para invoice.fulfilled e cole o segredo whsec_… dele em PERLY_PAY_WEBHOOK_SECRET. Ou deixe o init fazer as duas coisas:
npx perly-pay init --webhook-url https://your-app.example/perly-pay/webhookNum notebook, um túnel dá a você um endereço público: cloudflared tunnel --url http://localhost:3000. Mais em Webhooks.
Um pagamento no modo de teste
- 1
Inicie o seu app
Express e Node leem o
.envcomnode --env-file=.envou dotenv. - 2
Abra /perly-pay
Clique em Pay with crypto. Você está no checkout.
- 3
Simulate payment
A fatura passa a paga e depois a entregue. Veja Modo de teste.
- 4
Veja o grantAccess agir
Seu webhook recebe
invoice.fulfilled. Agora escreva o que ele libera.
Com um assistente de IA
--yes não pergunta nada, então o Claude Code, o Cursor ou o Codex podem executar por você. Passe a chave e o que você vende:
npx perly-pay init --yes --key sk_test_… --product "Logo review" --amount 4900--json imprime um resultado que o assistente consegue ler.
Opções
| Flag | O que faz |
|---|---|
--yes, -y | Sem perguntas. Para assistentes de IA e scripts. |
--framework <name> | next, express, hono, laravel ou node, se ele não acertou. |
--key <sk_test_…> | Sua chave de teste. Por padrão: PERLY_PAY_SECRET_KEY, ou ele pergunta. |
--webhook-url <url> | Registra o endereço para invoice.fulfilled e guarda o segredo dele. |
--product <name>, --amount <cents>, --currency <code> | O que você vende, em USD ou EUR. --amount 4900 é $49.00. |
--install | Também instala o SDK. Senão, imprime o comando. |
--force | Substitui arquivos e valores que já existem. |
--plugin, --mcp | Imprime como adicionar o plugin do Claude Code e o servidor perly-pay-mcp. |
--dry-run | Diz o que faria, sem escrever nada. |
--json | Imprime o resultado como JSON. |
--api <origin>, --dir <path> | Outro Perly Pay (local), outra pasta. |
Produção
- Conecte as chaves reais da sua carteira em Dashboard → Wallets.
- Crie uma chave de produção (
sk_live_…) e um webhook de produção. - Configure-os onde o seu app roda. O código continua igual. O resto da API está nos SDKs.