# ✓ CORRIGIDO: Erro -2015 "Invalid API-key" em Testnet

## Problema Identificado

**Erro**:
```
-2015: Invalid API-key, IP, or permissions for action
```

**Causa Raiz** 🎯:
O código estava usando as **chaves API de PRODUÇÃO** mesmo quando `testnet: true` estava configurado!

```python
# ❌ ANTES (ERRADO):
API_KEY = config.get("api_key", "")          # ← Chave produção
API_SECRET = config.get("api_secret", "")    # ← Secreta produção

if TESTNET:
    exchange.set_sandbox_mode(True)  # ← Ativa sandbox DEPOIS
```

Resultado: CCXT tenta usar chaves de produção no sandbox → erro -2015

---

## Solução Implementada ✓

**Agora**:
```python
# ✓ DEPOIS (CORRETO):
if TESTNET:
    chave_api = API_KEY_TESTNET          # ✓ Chave testnet
    chave_secreta = API_SECRET_TESTNET   # ✓ Secreta testnet
else:
    chave_api = API_KEY                  # ✓ Chave produção
    chave_secreta = API_SECRET           # ✓ Secreta produção

exchange = ccxt.binance({
    'apiKey': chave_api,           # ✓ Correto desde início
    'secret': chave_secreta,       # ✓ Correto desde início
    ...
})

if TESTNET:
    exchange.set_sandbox_mode(True)  # ✓ Ativa after confirming keys
```

---

## Mudanças Feitas

**Arquivo**: `robo_balanceamento.py`

### 1. Carregamento de Chaves (Linha ~54):
```python
# Adicionadas 2 novas linhas:
API_KEY_TESTNET = config.get("api_key_testnet", "")
API_SECRET_TESTNET = config.get("api_secret_testnet", "")
```

### 2. Seleção de Chaves (Nova Lógica, Linha ~103-107):
```python
# Selecionar chaves corretas baseado no modo
if TESTNET:
    chave_api = API_KEY_TESTNET
    chave_secreta = API_SECRET_TESTNET
else:
    chave_api = API_KEY
    chave_secreta = API_SECRET
```

### 3. Conexão com Chaves Corretas (Linha ~110-115):
```python
exchange = ccxt.binance({
    'apiKey': chave_api,        # ← Agora usa a variável correta
    'secret': chave_secreta,    # ← Agora usa a variável correta
    ...
})
```

---

## Teste Agora

Reinicie o robô:
```powershell
python robo_balanceamento.py
```

**Esperado no log agora:**
```
Modo Testnet: ATIVADO (usando chaves testnet)    ← ✓ Nova mensagem
✓ Mercados carregados (Exchange pronta)
Compra Imediata: ATIVADA (tolerância 10%)

========== FASE DE CONSTRUÇÃO DO PORTFÓLIO ==========
⚠ Saldo USDT zerado detectado. Usando capital inicial: 1500.00
Saldo USDT disponível: 1500.00

>>> Comprando SOL <<<         ← ✓ DEVE COMPRAR AGORA (sem erro -2015)
    Preço Atual: 83.56
    Valor: 150.00 USDT
✓ Ordem de COMPRA executada: ...  ← ✓ SUCESSO!
```

**Não deve mais aparecer:**
```
ERRO: Falha ao executar ordem buy para SOL/USDT: 
      binance {"code":-2015,"msg":"Invalid API-key..."}
```

---

## Verificação das Chaves

Se ainda receber erro -2015 após o teste:

1. **Verifique no Navegador (Dashboard Testnet)**:
   - Acesse: https://testnet.binance.vision/
   - Copie as chaves ATUAIS de lá
   - Atualize em `configuracoes_balanceamento.json`

2. **Valide Permissões**:
   - Certifique-se que as chaves testnet têm permissão para "Spot Trading"
   - Verifique se o IP está autorizado (geralmente qualquer IP é OK em testnet)

3. **Teste Direto**:
   ```powershell
   python teste_config.py
   ```
   Isso vai exibir qual chave está sendo usada.

---

## Configuração Recomendada

Seu `configuracoes_balanceamento.json` já tem:
```json
{
  "api_key": "...",                    // ← Chave produção (para modo live)
  "api_secret": "...",                 // ← Secreta produção (para modo live)
  "api_key_testnet": "BSJZZHij...",    // ← Chave testnet ✓
  "api_secret_testnet": "rCUbxdu...",  // ← Secreta testnet ✓
  "testnet": true,                     // ← Modo testnet ✓
  ...
}
```

Perfeit! Agora o código vai usar as chaves testnet automaticamente.

---

## Como Mudar para Produção Depois

Quando estiver pronto para live trading:
```json
{
  "testnet": false,  // ← Muda para false
  ...
}
```

Código automaticamente vai usar `api_key` e `api_secret` (produção).

---

**Última atualização**: 09/04/2026  
**Versão**: robo_balanceamento.py v2.3 (chaves testnet corrigidas)  
**Status**: Pronto para testar compras
