Gateways
Provedores suportados, como configurar cada um e onde o comportamento difere.
A Allya Payments orquestra três gateways na versão atual: Abacate Pay, Asaas e Pagar.me. Esta página tem três seções:
- Visão geral: quem cobre o quê em uma tabela.
- Configurar cada gateway: credenciais, onde achar, webhook secret.
- Particularidades: diferenças importantes que afetam payload (parcelamento, plano obrigatório do Pagar.me, etc.).
A última seção traz URLs inbound e provedores ainda não disponíveis.
Visão geral
| Gateway | Pix avulso | Cartão avulso | Assinatura recorrente | Validação inbound |
|---|---|---|---|---|
| Abacate Pay | ✅ | ✅ checkout hospedado | ✅ cartão de crédito | Secret na URL (?secret=) + X-Webhook-Signature HMAC-SHA256 |
| Asaas | ✅ | ✅ checkout hospedado | ✅ cartão de crédito | Header asaas-access-token igual ao Webhook Secret |
| Pagar.me | ✅ | ✅ checkout hospedado | ✅ cartão de crédito (requer Plan pré-criado) | Header x-hub-signature HMAC-SHA1 |
Cartão sempre usa checkout hospedado pelo gateway: avulso ou recorrente. A Allya nunca recebe número, CVV, titular ou validade. A resposta de POST /v1/payments e POST /v1/subscriptions traz checkoutUrl para o cliente concluir o pagamento na página do gateway.
Cartão é sempre crédito (avulso ou recorrente). Os três gateways não expõem cartão de débito nas APIs públicas v3/v5 que a Allya consome: billingType do Asaas oferece apenas BOLETO, CREDIT_CARD, PIX e UNDEFINED; accepted_payment_methods do Pagar.me lista apenas credit_card, boleto, pix; Abacate Pay é credit-only no produto. Débito existe nesses gateways via produtos dedicados (Checkout Asaas, etc.) que não estão integrados aqui.
Suporte a assinatura recorrente: detalhes
| Gateway | Trial (trialDays) | Cancel atPeriodEnd=true |
|---|---|---|
| Abacate Pay | ✅ até 90 dias | ❌: sempre imediato |
| Asaas | ❌: checkout hospedado captura no tap do cartão | ✅ |
| Pagar.me | ✅ via trial_period_days do Plan (não passa pela Allya) | ❌: não exposto pelo Pagar.me v5 |
Detalhamento das regras de trial em Período de trial. Restrições de cancelamento em Cancelar assinatura.
Configurar cada gateway
Todas as credenciais são criptografadas no banco (AES-256-GCM) e nunca exibidas depois de salvas. Para trocá-las, basta editar o gateway e preencher os campos novamente.
Abacate Pay
Credenciais:
| Campo | Obrigatório | Onde pegar |
|---|---|---|
| API Key | ✅ | Painel Abacate Pay → Configurações → API. Em sandbox vem como abc_dev_…. |
| Webhook Secret | ✅ | Valor escolhido por você (string aleatória forte). Use o mesmo no parâmetro ?secret= da URL cadastrada na Abacate Pay. |
Webhook inbound:
A URL exibida em Webhooks do projeto vem sem query string para evitar cópia acidental de placeholder. Ao cadastrar no painel da Abacate Pay, acrescente ?secret=<seu Webhook Secret> ao final da URL. A Allya valida tanto o secret da URL quanto o header X-Webhook-Signature (HMAC-SHA256 do body usando o mesmo Webhook Secret).
Asaas
Credenciais:
| Campo | Obrigatório | Onde pegar |
|---|---|---|
| Access Token | ✅ | Painel Asaas → Integrações → Chaves de API. Formato $aact_…. |
| Webhook Secret | ✅ | Em Integrações → Webhooks, configure o token que o Asaas enviará no header asaas-access-token. Use token forte com 32 a 255 caracteres e sem espaços: a Allya valida o formato. |
Customer no Asaas: o gateway exige um Customer ID próprio antes de criar cobrança ou assinatura. A Allya cria um cliente no Asaas durante cada POST /v1/payments e POST /v1/subscriptions, usando customer.name, customer.document, customer.email e, quando enviado, customer.phone. A Allya não mantém hoje um mapeamento local de clientes Asaas.
Assinatura no Asaas: a Allya cria a assinatura e busca a primeira cobrança em /subscriptions/{id}/payments para retornar o checkoutUrl da fatura hospedada. Webhooks PAYMENT_* com payment.subscription criam ou atualizam o Payment local do ciclo.
Pagar.me
Credenciais:
| Campo | Obrigatório | Onde pegar |
|---|---|---|
| Secret Key | ✅ | Dashboard Pagar.me → Desenvolvedores → Chaves. Use sk_test_… em sandbox e sk_live_… em produção. |
| Webhook Secret | ✅ | Configurado em Desenvolvedores → Webhooks. Usado para validar o header x-hub-signature. |
Autenticação: o Pagar.me usa Basic Auth com a Secret Key: a Allya lida com isso internamente.
Plano obrigatório para assinaturas. O Pagar.me v5 não aceita assinatura "inline": exige que você crie um Plan previamente via
POST /plansna API deles e passe oplan.idemgateway.pagarme.planId. Sem isso,POST /v1/subscriptionsretorna400 invalid_input. Veja Plano obrigatório no Pagar.me.
Assinatura no Pagar.me: a Allya cria primeiro um Payment Link (pl_…). A assinatura real (sub_…) só nasce depois que o cliente conclui o checkout; por isso a Allya só dispara subscription.created para Pagar.me quando recebe o webhook do gateway. Webhooks charge.* com subscription criam/atualizam o Payment do ciclo.
Particularidades
Pix
Os três gateways retornam Pix dinâmico com QR Code. A resposta normalizada de POST /v1/payments traz:
pix.qrCodeText: código copia e cola (string longa começando com00020101…).pix.qrCode: imagem do QR Code, em data URL ou base64, quando o gateway disponibiliza.
Quando o cliente paga, o gateway envia webhook para a Allya, que atualiza status para paid e dispara um webhook outbound padronizado.
Asaas: o QR Pix é obtido em uma segunda chamada após criar o pagamento. Se essa chamada falhar (timeout/5xx), a resposta sai sem
pix.qrCode/pix.qrCodeText: o pagamento já existe e é cobrável; usePOST /v1/payments/:id/syncpara recuperar o QR depois.
Cartão de crédito: parcelamento
card.installments aceita valores de 1 a 24 no schema geral da Allya. O limite real depende do gateway que atender a chamada:
| Gateway | Limite de parcelas | Observação |
|---|---|---|
| Abacate Pay | 1 a 12 | Acima disso, 400 invalid_input antes de chamar o gateway. |
| Asaas | 1 a 24 (na API) | Em 1×, a Allya envia value (cobrança simples); em 2× ou mais, envia installmentCount + totalValue, formato exigido pelo gateway. |
| Pagar.me | 1 a 24 (configurável no checkout) | A Allya passa max_installments para o checkout hospedado. |
Para assinatura recorrente, card.installments é ignorado: assinatura não parcela.
Cartão: campos obrigatórios por gateway
| Campo | Quando é obrigatório |
|---|---|
externalId | Sempre obrigatório no Pagar.me com cartão (sem ele os webhooks de payment link não conseguem correlacionar). Recomendado sempre. |
customer.phone | Sempre obrigatório no Pagar.me com cartão (PF rejeitada em live sem phone). Mínimo 10 dígitos (DDD + número). |
customer.document | Sempre obrigatório: CPF (11 dígitos) ou CNPJ (14 dígitos), com ou sem máscara. |
A Allya valida esses requisitos antes de chamar o gateway. Se faltar, retorna 400 invalid_input com issues[].path apontando o campo.
URLs inbound (gateway → Allya)
Cada gateway recebe uma URL única por ambiente, exibida em Webhooks dentro do projeto:
https://payments-api.allyasolutions.com/api/webhooks/{inboundWebhookSlug}Cadastre a URL exibida para cada gateway no painel do provedor correspondente. Para Abacate Pay, acrescente ?secret=<seu Webhook Secret> ao final da URL antes de salvar no painel do gateway. Para testar em máquina local, exponha o serviço com ngrok ou Cloudflare Tunnel e substitua o host pelo da URL pública do túnel.
Roteamento
Conectar um gateway não basta: você precisa também rotear cada método de pagamento. Em Roteamento, defina qual gateway atende:
- Pagamentos avulsos (
POST /v1/payments): Pix e cartão. - Assinaturas recorrentes (
POST /v1/subscriptions): cartão.
Sem roteamento configurado, a rota retorna 409 no_routing_rule. Você pode usar o mesmo gateway para os dois métodos ou separar (ex.: Asaas para Pix, Pagar.me para cartão).
Não disponíveis agora
Estes provedores aparecem no roadmap mas ainda não estão implementados:
- Mercado Pago: Pix e cartão.
- Stripe: cartão.
- PagSeguro / PagBank: Pix e cartão.
- Stone: Pix e cartão.
- Cielo: cartão.
- OpenPix: Pix.
Tentar configurar um gateway fora da lista resulta em erro no painel: o adapter precisa existir no registry para a opção aparecer.
Veja também
- Criar pagamento: uso da API após configurar o gateway.
- Criar assinatura: fluxo recorrente.
- Plano obrigatório no Pagar.me: pré-requisito específico do gateway.
- Testar webhooks localmente: túnel HTTPS para sandbox.