Como construir um payment app na Shopify em 2026 — Blog AM Lab
Payment Apps 14 abr 2026 · 18 min de leitura

Como construir um payment app na Shopify em 2026

Em 2026 o ecossistema de pagamentos da Shopify amadureceu de forma significativa. Com mais de 4,7 milhões de lojistas ativos e um GMV acima de US$ 250 bilhões por ano, a demanda por payment apps customizados — especialmente em mercados como o Brasil — nunca foi tão alta.

Seja para integrar um gateway local com Pix, Boleto Bancário ou BNPL, seja para entregar experiências de checkout customizadas a lojistas Shopify Plus, construir um Payment App exige entendimento profundo da arquitetura da plataforma. Este guia cobre o caminho completo, do setup inicial à aprovação na Shopify App Store.

Shopify Payments — métodos de pagamento no checkout
A Payments Platform é a porta de entrada para novos métodos dentro do checkout da Shopify.
⚡ Pré-requisito: este tutorial assume familiaridade com Node.js (ou Ruby/Python), conceitos de OAuth 2.0, webhooks e uso básico do Shopify Partner Dashboard. Experiência prévia com a Admin API é um plus.

01Arquitetura de um payment app na Shopify

Um Payment App não é um app de storefront: ele se integra diretamente ao checkout e ao ciclo de vida do pedido pela Payments Apps API. Diferente de gateways tradicionais configurados no admin, ele atua como provedor de pagamento completo, com controle total sobre a experiência.

App backendProcessa sessões de pagamento, capturas, estornos e chargebacks.Node.js · Ruby · Python · Go
Frontend (checkout extension)UI renderizada dentro do checkout via Checkout UI Extensions.React + Shopify UI Extensions SDK
Gateway externoO processador de fato — seu PSP ou gateway parceiro.API do provedor (Stripe, Pagar.me, Adyen…)
"Payment Apps são a evolução dos gateways customizados — permitem construir experiências de pagamento nativas dentro do checkout da Shopify, sem atrito e com controle total do fluxo de dados."— Shopify Developer Documentation, 2025

Fluxo de dados simplificado

Quando o cliente clica em "Finalizar compra", a Shopify cria uma Payment Session e chama o endpoint /payment do seu app. O backend conversa com o gateway externo, atualiza a sessão via mutation GraphQL, e a Shopify finaliza ou cancela o pedido conforme o status retornado.

checkoutpayment sessionseu backendPSP✓ resolve

02Pré-requisitos e setup do ambiente

Antes de escrever uma única linha de código, garanta que o ambiente está corretamente configurado:

01Conta no Partner Dashboard — crie uma conta gratuita em partners.shopify.com. É onde você registra, gerencia e publica o app.
02Shopify CLI 3.x instalado — o Shopify CLI é a ferramenta central de desenvolvimento. Instale via npm: npm install -g @shopify/cli@latest. A versão 3.x introduziu suporte nativo a Payment Extensions.
03Development store — crie no Partner Dashboard e habilite o Bogus Gateway para os testes iniciais.
04Node.js 18+ e ngrok (ou Cloudflare Tunnel) — o backend precisa estar acessível publicamente via HTTPS durante o desenvolvimento.
05Conta de PSP verificada — credenciais de sandbox do processador para simular transações reais.

03Criando o app no Partner Dashboard

Com o ambiente configurado, gere o scaffold pelo Shopify CLI — o template de Payment App já vem com as extensões necessárias:

# Cria o projeto com o template oficial
shopify app init my-payment-app

# Selecione: Payment App
# Framework: Node.js (recomendado) ou Ruby

cd my-payment-app
npm install

# Sobe o servidor de desenvolvimento
shopify app dev

O CLI cria o app no Partner Dashboard, configura as callback URLs e abre um túnel HTTPS para o servidor local.

Configurando permissões (scopes)

No arquivo shopify.app.toml, configure os scopes necessários para um Payment App:

[scopes]
scopes = "write_payment_sessions,write_payment_gateways,write_orders,read_checkouts"

[[extensions]]
type   = "payments_extension"
name   = "My Payment Provider"
handle = "my-payment-provider"

  [extensions.capabilities]
  network_access = true

  [extensions.settings]
  api_version               = "2025-04"
  start_payment_session_url = "/api/payment"
  start_refund_session_url  = "/api/refund"
  start_capture_session_url = "/api/capture"
  start_void_session_url    = "/api/void"

04Trabalhando com a Payments Apps API

A Payments Apps API é uma extensão da Admin API GraphQL, disponível exclusivamente para payment apps aprovados. Ela expõe mutations para atualizar o status das sessões de pagamento, captura, estorno e cancelamento.

Principais mutations

paymentSessionResolvePagamento aprovado com sucessoRESOLVED
paymentSessionRejectPagamento recusado pelo gatewayREJECTED
paymentSessionPendingPagamento pendente (Boleto/Pix)PENDING
refundSessionResolveEstorno processadoRESOLVED
captureSessionResolveCaptura da pré-autorização concluídaRESOLVED
voidSessionResolveCancelamento da pré-autorizaçãoRESOLVED

Exemplo: resolvendo uma payment session

mutation PaymentSessionResolve($id: ID!) {
  paymentSessionResolve(id: $id) {
    paymentSession {
      id
      state {
        ... on PaymentSessionStateResolved {
          code
        }
      }
      nextAction {
        action
        context {
          ... on PaymentSessionActionsRedirect {
            redirectUrl
          }
        }
      }
    }
    userErrors {
      field
      message
    }
  }
}

05Implementando o fluxo completo de pagamento

O coração do app é o endpoint que recebe a requisição da Shopify quando o cliente tenta pagar. Uma implementação em Node.js com Express:

import express from 'express';
import { resolvePaymentSession, rejectPaymentSession } from '../utils/shopify-mutations.js';
import { chargeWithGateway } from '../utils/gateway.js';

const router = express.Router();

// A Shopify chama este endpoint quando o checkout inicia
router.post('/api/payment', async (req, res) => {
  const {
    id,             // ID da payment session
    gid,            // GID global da Shopify
    amount,         // Valor em centavos
    currency,       // Ex.: "BRL"
    test,           // true em ambiente de teste
    customer,       // Dados do cliente
    payment_method  // Dados do método de pagamento
  } = req.body;

  // Responde 200 imediatamente para evitar timeout da Shopify
  res.status(200).json({ received: true });

  try {
    const chargeResult = await chargeWithGateway({
      amount, currency, customer, payment_method, test
    });

    if (chargeResult.status === 'approved') {
      await resolvePaymentSession(gid);
    } else {
      await rejectPaymentSession(gid, {
        reason: 'PAYMENT_METHOD_DECLINED',
        merchantMessage: chargeResult.message
      });
    }
  } catch (error) {
    console.error('Payment processing error:', error);
    await rejectPaymentSession(gid, {
      reason: 'INTERNAL_ERROR',
      merchantMessage: 'Erro interno. Tente novamente.'
    });
  }
});

export default router;
⚠️ Importante: a Shopify espera apenas 5 segundos pela resposta HTTP inicial. Sempre retorne 200 OK imediatamente e processe o pagamento de forma assíncrona, notificando a Shopify via mutation quando concluir.

Suporte a pagamentos pendentes (Pix e Boleto)

Para métodos assíncronos, use paymentSessionPending com um webhook de callback. A Shopify mantém o pedido pendente até você chamar resolve (ou reject) na confirmação do gateway.

// Gera o código Pix ou o boleto no gateway
const pixResult = await gateway.createPixPayment({ amount, currency });

// Informa à Shopify que o pagamento está pendente
await client.request(
  `mutation PaymentSessionPending($id: ID!, $pendingExpiresAt: DateTime!) {
    paymentSessionPending(
      id: $id,
      pendingExpiresAt: $pendingExpiresAt,
      reason: WAIT_FOR_CUSTOMER
    ) {
      paymentSession { id state { ... } }
      userErrors { field message }
    }
  }`,
  {
    variables: {
      id: gid,
      // Boleto expira em 3 dias; Pix, em 30 minutos
      pendingExpiresAt: new Date(Date.now() + 30 * 60 * 1000).toISOString()
    }
  }
);

06Webhooks obrigatórios e tratamento de eventos

Todo payment app aprovado precisa implementar um conjunto mínimo de webhooks para GDPR e ciclo de vida da loja.

app/uninstalledLimpar dados na desinstalaçãoOBRIGATÓRIO
customers/data_requestGDPR: exportar dados do clienteOBRIGATÓRIO
customers/redactGDPR: excluir dados do clienteOBRIGATÓRIO
shop/redactGDPR: excluir dados da lojaOBRIGATÓRIO
payment_sessions/expireSessões de pagamento expiradasOBRIGATÓRIO
orders/paidConfirmação de pedido pagoOPCIONAL
🔐 Validação HMAC: valide sempre a assinatura HMAC de cada webhook com o SHOPIFY_API_SECRET do app. Webhooks inválidos devem retornar 401 imediatamente.
import crypto from 'crypto';

function validateWebhook(rawBody, hmacHeader, secret) {
  const digest = crypto
    .createHmac('sha256', secret)
    .update(rawBody, 'utf8')
    .digest('base64');

  return crypto.timingSafeEqual(
    Buffer.from(digest),
    Buffer.from(hmacHeader)
  );
}

07PCI DSS, 3DS2 e compliance

Construir um app de pagamento significa lidar com dados financeiros sensíveis. O nível de compliance exigido depende de quais dados o app toca diretamente.

Níveis de PCI DSS

A maioria dos payment apps opera no modelo SAQ A (o menos restritivo), porque a captura dos dados de cartão acontece no gateway parceiro, via iFrame ou redirect — seu backend nunca vê o cartão. Se você processa dados de cartão diretamente, precisa de certificação SAQ D ou auditoria completa por QSA.

🛡️ Recomendação AM Lab: use sempre o SDK de tokenização do gateway parceiro (Stripe.js, Adyen Web Components etc.) para capturar o cartão no browser. Seu servidor recebe apenas o token — nunca o dado bruto. Isso mantém a operação no escopo SAQ A.

3D Secure 2 (3DS2) em 2026

Na Europa — e cada vez mais no Brasil, por exigência do Banco Central — o 3DS2 é obrigatório para autenticação forte do cliente (SCA). A Shopify suporta 3DS2 nativamente pelo campo threeDS da payment session: você precisa repassar o resultado da autenticação junto com o resultado da cobrança.

08Testando com o sandbox da Shopify

A Shopify oferece um ambiente de testes robusto para payment apps. Use sua development store com o test mode habilitado para simular todos os cenários de pagamento sem transações reais.

Cenários de teste obrigatórios

T1Pagamento aprovado — sessão criada → gateway aprova → resolve → pedido confirmado.
T2Pagamento recusado — gateway recusa → reject → cliente vê a mensagem de erro no checkout.
T3Pagamento pendente (Pix/Boleto) — sessão pendente → webhook de confirmação → resolve.
T4Estorno total e parcial — admin inicia → /api/refund → gateway processa → refundSessionResolve.
T5Timeout e recuperação de erro — falha do gateway → app retorna 200 e chama reject corretamente.

09Publicando na App Store

A submissão de um payment app é mais rigorosa que a de apps convencionais: a Shopify faz um review manual de segurança que leva de 2 a 6 semanas.

Todos os endpoints de pagamento implementados
Webhooks de GDPR respondendo corretamente
Documentação do PSP parceiro verificada
Política de privacidade e termos de uso publicados
App testado com múltiplas moedas
Rate limiting e tratamento de erros implementados
Certificado PCI DSS (SAQ A no mínimo) anexado
💡 Dica de quem já passou: antes de submeter, rode shopify app deploy e confira os erros de validação no Partner Dashboard. Submissões com erros básicos são rejeitadas automaticamente.

Conclusão — o mercado de payment apps no Brasil em 2026

O Brasil é hoje um dos mercados mais dinâmicos para payment apps no ecossistema Shopify. A combinação de Pix como método dominante, crescimento do BNPL e a migração de operações brasileiras para o Shopify Plus criou uma janela única para desenvolvedores especializados.

Construir um payment app robusto exige domínio técnico em várias frentes — GraphQL, webhooks, compliance financeiro — mas o retorno para quem domina essa stack é significativo. Lojistas pagam por soluções confiáveis que se integrem nativamente ao checkout com os métodos que seus clientes já conhecem.

Na AM Lab já construímos payment apps para fintechs como Barte e Divibank, e a lição é clara: a chave está em uma arquitetura assíncrona sólida, tratamento cuidadoso de erros e um processo de QA que cubra todos os cenários de falha antes da submissão.

[ PAYMENT APPS ]
Construindo um payment app? Já passamos pelo review — mais de uma vez.

Podemos construir o seu app de pagamento ou revisar sua arquitetura antes da submissão.

Falar com a engenharia ↗
Leia também Ver todos os artigos →