# Credenciais para Produção — Fase 19.7

Documento de referência para ativar recursos já implementados na Lotérica Premiada v2.

## Variáveis de ambiente

### API (container app / servidor PHP)

Definir no ambiente do servidor (Docker, .env, ou variáveis de sistema):

| Variável | Descrição | Obrigatório | Exemplo |
|----------|-----------|--------------|---------|
| `CIELO_MERCHANT_ID` | Merchant ID Cielo (painel Cielo) | Para pagamento cartão | `xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx` |
| `CIELO_MERCHANT_KEY` | Merchant Key Cielo | Para pagamento cartão | `XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX` |
| `CIELO_SANDBOX` | Usar ambiente sandbox (1/true = sandbox) | Não | `0` ou `1` |
| `VAPID_PUBLIC_KEY` | Chave pública VAPID para Web Push | Para notificações push | Base64 URL-safe |
| `VAPID_PRIVATE_KEY` | Chave privada VAPID | Para notificações push | Base64 URL-safe |
| `CRON_SECRET` | Token para endpoints `/api/v2/cron/*` (Fase 23.2) | Para cron automatizado | `openssl rand -hex 32` |
| `GA4_PROPERTY_ID` | ID numérico da propriedade no GA4 (Admin > Configurações da propriedade) | Opcional se `GA4_MEASUREMENT_ID` estiver definido | Ex.: `123456789` (não confundir com `G-XXXX`) |
| `GA4_MEASUREMENT_ID` | ID do stream web (`G-XXXX`), igual ao `NEXT_PUBLIC_GA_ID` da v2 | Opcional; a API resolve o property id via Admin API | Ex.: `G-GBK96ZZ1VC` |
| `GA4_SERVICE_ACCOUNT_JSON_PATH` | Caminho ao JSON da conta de serviço (Google Cloud) com papel leitor no GA4 | Obrigatório para visitas no admin | Ex.: `config/ga4-service-account.json` (fora do Git). Ative também a API **Google Analytics Admin API** no projeto GCP |
| `GA4_DISABLED` | `1` desliga a API de dados do GA4 | Opcional | Omitir ou vazio = ativo |

**Google / GA4:** o login social usa `GOOGLE_CLIENT_ID` (OAuth cliente web). A **Data API** do GA4 é outro fluxo: conta de serviço + `GA4_*`. Na v1, `ClienteController` também lê `GA4_PROPERTY_ID`, `GA4_MEASUREMENT_ID`, `GA4_SERVICE_ACCOUNT_JSON_PATH` e `GA4_DISABLED` de `api/.env` (mesmo padrão do `GOOGLE_CLIENT_ID`) para `getenv()` funcionar em scripts legados.

**Gerar chaves VAPID:**
```bash
# Instalar web-push (se não estiver no composer)
composer require minishlink/web-push

# Gerar chaves (PHP)
php -r "
require 'vendor/autoload.php';
\$keys = \Minishlink\WebPush\VAPID::createVapidKeys();
echo 'VAPID_PUBLIC_KEY=' . \$keys['publicKey'] . PHP_EOL;
echo 'VAPID_PRIVATE_KEY=' . \$keys['privateKey'] . PHP_EOL;
"
```

### Frontend (Next.js)

Definir em `.env.local` ou variáveis de build:

| Variável | Descrição | Obrigatório | Exemplo |
|----------|-----------|--------------|---------|
| `NEXT_PUBLIC_API_URL` | URL base da API (produção) | Sim | `https://www.lotericapremiada.com.br` |
| `NEXT_PUBLIC_LEGACY_URL` | URL do site v1 (redirecionamentos) | Não | `https://www.lotericapremiada.com.br` |
| `NEXT_PUBLIC_CHAT_WIDGET_ID` | ID do widget Tawk.to (property_id/widget_id) | Para chat online | `xxxxxxxx/yyyyyyyy` |
| `NEXT_PUBLIC_WHATSAPP_NUMBER` | Número WhatsApp (DDI+DDD, sem espaços) | Para atendimento | `5511965730344` |
| `NEXT_PUBLIC_GOOGLE_CLIENT_ID` | Client ID Google OAuth | Para login social | `xxx.apps.googleusercontent.com` |
| `NEXT_PUBLIC_FACEBOOK_APP_ID` | App ID Facebook | Para login social | `xxxxxxxxxxxxxxxx` |

## Recursos ativados por credencial

| Recurso | Variáveis necessárias | Status sem credenciais |
|---------|----------------------|------------------------|
| Pagamento cartão (Cielo) | CIELO_MERCHANT_ID, CIELO_MERCHANT_KEY | API retorna erro "Credenciais Cielo não configuradas" |
| Push notifications | VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY | Botão não envia; ConferenciaService não notifica |
| Chat online (Tawk.to) | NEXT_PUBLIC_CHAT_WIDGET_ID | ChatWidget não renderiza |
| WhatsApp | NEXT_PUBLIC_WHATSAPP_NUMBER | Link WhatsApp vazio |
| Login Google | NEXT_PUBLIC_GOOGLE_CLIENT_ID | Botão desabilitado |
| Login Facebook | NEXT_PUBLIC_FACEBOOK_APP_ID | Botão desabilitado |
| Visitas no funil (GA4) | `GA4_SERVICE_ACCOUNT_JSON_PATH` + (`GA4_PROPERTY_ID` ou `GA4_MEASUREMENT_ID`) | “—” até configurar; Admin API ativa no GCP se usar só measurement id |

## Docker Compose (exemplo produção)

```yaml
services:
  app:
    environment:
      CIELO_MERCHANT_ID: ${CIELO_MERCHANT_ID}
      CIELO_MERCHANT_KEY: ${CIELO_MERCHANT_KEY}
      CIELO_SANDBOX: ${CIELO_SANDBOX:-0}
      VAPID_PUBLIC_KEY: ${VAPID_PUBLIC_KEY}
      VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY}
      # ... MYSQL_*, etc.
```

## Checklist de ativação

- [ ] CIELO: obter credenciais no painel Cielo; configurar CIELO_SANDBOX=1 para testes
- [ ] VAPID: gerar chaves; adicionar ao ambiente da API
- [ ] Web Push: `composer require minishlink/web-push` (se não instalado)
- [ ] Tawk.to: criar propriedade em tawk.to; copiar property_id e widget_id
- [ ] WhatsApp: número com DDI (55) e DDD
- [ ] OAuth: configurar em console.cloud.google.com e developers.facebook.com

## Referências

- docs/v2/fase-18-implementacao.md
- api/src/Service/CreditoService.php (Cielo)
- api/src/Service/PushSubscriptionService.php (VAPID)
- frontend/components/feedback/ChatWidget.tsx (Tawk.to)
