# Processar Pagamentos em Etapa Única

Este guia detalha como implementar o fluxo de pagamento padrão (Venda). Neste fluxo, você envia uma única requisição para a API, e o terminal lida com a interação com o portador do cartão.

Como as interações com o terminal físico levam tempo, este processo é **assíncrono**. Você iniciará o pagamento por meio de uma chamada direta à API e receberá o resultado final via uma notificação de webhook.

## O Ciclo de Vida da Transação

1. **Requisição:** Seu servidor envia uma requisição `POST` para o endpoint `/pago`.  
2. **Reconhecimento:** A API retorna um `200 OK` síncrono indicando que o terminal recebeu o comando.  
3. **Interação:** O terminal solicita que o cliente insira o cartão e digite o PIN.  
4. **Notificação:** Assim que a transação for concluída (Aprovada, Negada ou Cancelada), a API envia um payload JSON para a sua `urlNotificacion`.

## Passo 1: Enviar a Requisição de Pagamento

Para iniciar uma venda, envie uma requisição POST para o endpoint `/pago`.

* **Endpoint de Teste:** `https://tpvpc-i.redsys.es:27443/TPV_PC/services/rest/tpvpcwss/v1/pago`  
* **Endpoint de Produção:** `https://tpvpc.redsys.es/TPV_PC/services/rest/tpvpcwss/v1/pago`

### Payload da Requisição

O payload deve incluir o valor, sua referência interna de fatura e a URL de notificação onde você deseja receber o resultado final.

```json
{
  "info": {
    "comercio": "777888991",
    "terminal": 1,
    "timestamp": "20250428 111217",
    "notificacion": {
      "urlNotificacion": "https://your-server.com/api/webhooks/payment-results",
      "correoNotificacion": "backup-email@merchant.com"
    },
    "datosOperacion": {
      "importe": "25.50",
      "factura": "ORD-2025-001"
    }
  },
  "signature": "YOUR_CALCULATED_SIGNATURE"
}
```

<Callout type="tip">

Certifique-se de que o `importe` esteja formatado como `XXXXXXXXX.XX` (ex.: `25.50` ou `0.01`). Não utilize vírgulas.

</Callout>

## Passo 2: Tratar a Resposta Síncrona

Imediatamente após enviar a requisição, a API retornará uma resposta.

**Resposta Esperada:**

```json
{
  "info": {
    "resultado": {
      "codigo": "0"
    }
  },
  "signature": "SERVER_SIGNATURE"
}
```

* **`codigo: "0"`**: Sucesso. O terminal agora está processando o pagamento.  
* **Qualquer outro código**: A requisição falhou (ex.: erro de validação, terminal offline). Consulte a referência do [Catálogo de Códigos de Erro e Negação](/pt/get-smart/get-smart-api-cloud/reference/error-and-denial-code-catalog).

<Callout type="warning">

NÃO libere os produtos/serviços ainda. Um código `0` aqui significa apenas "Requisição Aceita". Isso **não** significa que o pagamento foi pago ou autorizado.

</Callout>

## Passo 3: Receber a Notificação Assíncrona

Quando o cliente finaliza (ou cancela) a transação, a API Cloud envia uma requisição `POST` para a sua `urlNotificacion`.

### Exemplo de Notificação de Sucesso

```json
{
  "info": {
    "comercio": "777888991",
    "terminal": 1,
    "timestamp": "20250428 111500",
    "datosRespuesta": {
      "tipoPago": "PAGO",
      "importe": "25.50",
      "moneda": "978",
      "factura": "ORD-2025-001",
      "resultado": "Autorizada",
      "codigoRespuesta": "998877",
      "estado": "F",
      "tarjetaClienteRecibo": "************1234",
      "marcaTarjeta": "1"
    }
  },
  "signature": "SERVER_SIGNATURE"
}
```

### Campos Principais para Validação

Você deve inspecionar campos específicos em `datosRespuesta` para confirmar o status do pagamento:

| Campo | Valor para Sucesso | Descrição |
| :---- | :---- | :---- |
| `resultado` | `Autorizada` | Declara explicitamente que a transação foi aprovada. |
| `estado` | `F` | Indica que a operação está "Finalizada" (Finalized). |
| `codigoRespuesta` | *(Código de Autorização)* | O código de autorização do banco. Se a transação foi negada, conterá um código de negação (ex.: `101`, `117`). |
| `importe` | *(Seu Valor)* | Verifique se o valor autorizado corresponde ao valor que você solicitou. |

### Tratamento de Negações e Erros

Se o pagamento falhar, a notificação refletirá a falha:

* `resultado`: `Denegada`  
* `codigoRespuesta`: Um código de negação (ex.: `117` para PIN Incorreto).  
* `estado`: Pode ser `G` (Negada), `A` (Cancelada) ou `T` (Falha Técnica).

## Próximos Passos

* [**Configurar Webhooks e Notificações**](/pt/get-smart/get-smart-api-cloud/integration-guides/set-up-webhooks-and-notifications)**:** Guia detalhado sobre como processar (parse) e validar o payload de notificação.  
* [**Especificações de Impressão de Recibos**](/pt/get-smart/get-smart-api-cloud/reference/receipt-printing-specifications)**:** Use os dados da notificação (`tarjetaClienteRecibo`, `marcaTarjeta`) para imprimir o recibo obrigatório em conformidade.