Skip to main content
POST
/
api
/
v1
/
apple-pay
/
validate-session
Validar Sessão Apple Pay
curl --request POST \
  --url https://zeus-sandbox.autorizou.dev/api/v1/apple-pay/validate-session \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '
{
  "validationURL": "<string>",
  "domainName": "<string>"
}
'
{
  "sessionData": {
    "epochTimestamp": 123,
    "expiresAt": 123,
    "merchantSessionIdentifier": "<string>",
    "nonce": "<string>",
    "merchantIdentifier": "<string>",
    "domainName": "<string>",
    "displayName": "<string>",
    "signature": "<string>"
  }
}

Visão Geral

Este endpoint é chamado automaticamente durante o fluxo de pagamento Apple Pay na web, quando o evento onvalidatemerchant é disparado pelo ApplePaySession. A validação de sessão é necessária para estabelecer confiança entre o seu domínio, a Apple e a Autorizou antes de processar o pagamento.
Este endpoint não requer autenticação Bearer Token, mas deve ser chamado do frontend durante o fluxo Apple Pay.

Quando Este Endpoint é Usado

Este endpoint é chamado automaticamente quando você inicia uma sessão Apple Pay:
JavaScript
const session = new ApplePaySession(3, paymentRequest);

session.onvalidatemerchant = async (event) => {
  const response = await fetch('/api/v1/apple-pay/validate-session', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      validationURL: event.validationURL,
      domainName: window.location.hostname
    })
  });
  
  const merchantSession = await response.json();
  session.completeMerchantValidation(merchantSession.sessionData);
};

session.begin();

Parâmetros da Requisição

validationURL
string
required
URL fornecida pela Apple no evento onvalidatemerchantExemplo: https://apple-pay-gateway-cert.apple.com/paymentservices/startSessionEsta URL é única para cada sessão e expira rapidamente.
domainName
string
required
Nome do domínio onde o Apple Pay está sendo usadoExemplo: checkout.sualoja.com.brDeve ser um domínio verificado no Apple Developer Portal.

Exemplo de Requisição

curl -X POST https://zeus-sandbox.autorizou.dev/api/v1/apple-pay/validate-session \
  -H "Content-Type: application/json" \
  -d '{
    "validationURL": "https://apple-pay-gateway-cert.apple.com/paymentservices/startSession",
    "domainName": "checkout.sualoja.com.br"
  }'

Resposta de Sucesso

sessionData
object
required
Objeto de sessão retornado pela Apple, necessário para completar a validação no frontend

Exemplo de Resposta

{
  "sessionData": {
    "epochTimestamp": 1705319400000,
    "expiresAt": 1705319700000,
    "merchantSessionIdentifier": "SSH2EAF8AFAEAA94DEA3EB4E797AE2D2E6_916523AAED1343F5BC5815E12BEE9250AFFDC1A17C46B0DE5A943F0F94927C24",
    "nonce": "89dba098",
    "merchantIdentifier": "merchant.com.suaempresa.sualoja",
    "domainName": "checkout.sualoja.com.br",
    "displayName": "Sua Loja",
    "signature": "308006092a864886f70d010702a0803080020101310f300d06096..."
  }
}

Códigos de Erro

Parâmetros faltando ou inválidos
{
  "message": "ValidationURL and domainName are required",
  "errors": {
    "validationURL": ["ValidationURL is required"],
    "domainName": []
  }
}
Causas comuns:
  • validationURL ou domainName não foram fornecidos
  • Formato inválido dos parâmetros
Falha na validação com a Apple
{
  "message": "Apple Pay session validation failed"
}
Causas comuns:
  • Domínio não foi registrado pela Autorizou (solicite ao suporte)
  • Arquivo de verificação não está acessível no seu domínio
  • validationURL expirada (execute o fluxo mais rapidamente)
Solução:
  1. Confirme que solicitou o registro do domínio ao suporte da Autorizou
  2. Verifique se o arquivo está acessível em: https://seu-dominio/.well-known/apple-developer-merchantid-domain-association.txt
  3. Se persistir, entre em contato com o suporte
Erro na configuração interna da Autorizou. Pode retornar uma das mensagens abaixo:
{
  "message": "Apple Pay certificates not configured properly"
}
{
  "message": "Session validation failed due to server error"
}
Solução:
  • Entre em contato com o suporte da Autorizou
  • Informe o domínio e horário do erro
  • A equipe técnica verificará a configuração

Fluxo Completo de Integração

Este endpoint faz parte de um fluxo maior. Veja como ele se encaixa:
1

Usuário clica no botão Apple Pay

Frontend detecta o clique e inicia ApplePaySession
2

Apple dispara evento onvalidatemerchant

Fornece validationURL única para esta sessão
3

Frontend chama este endpoint

Envia validationURL e domainName para validação
4

Autorizou valida com Apple

Usa certificados Merchant Identity para estabelecer confiança
5

Retorna sessionData

Frontend recebe dados de sessão validados
6

Frontend completa validação

Chama session.completeMerchantValidation(sessionData)
7

Apple Pay exibe interface

Usuário pode selecionar cartão e autorizar pagamento
8

Processa pagamento

Token Apple Pay é enviado para /api/v1/charges/orders

Segurança

Como Funciona a Validação

  1. Seu domínio deve estar verificado no Apple Developer Portal
  2. Certificado Merchant Identity prova que você controla o Merchant ID
  3. Apple valida que domínio + certificado + Merchant ID são consistentes
  4. Apple retorna sessão criptografada válida por 5 minutos

Boas Práticas

✓ Sempre use HTTPS para servir a página com Apple Pay
✓ Valide que o domínio está correto antes de chamar o endpoint
✓ Trate erros adequadamente e mostre mensagem amigável ao usuário
✓ Não reutilize sessionData - cada sessão é única
⚠ Nunca armazene ou faça cache do sessionData. Ele é único por sessão e expira rapidamente (5 minutos).

Próximos Passos

Após validar a sessão com sucesso:
  1. Implementar fluxo completo de Apple Pay
  2. Criar pedido com Apple Pay
  3. Configurar webhooks para notificações

Recursos Adicionais

Guia Completo Apple Pay

Documentação completa de integração

Apple Developer Docs

Documentação oficial da Apple

Criar Pedido

Processar pagamento Apple Pay

Webhooks

Receber notificações de pagamento