# PSE

<img height="189" width="187" alt="pse logo" title="PSE logo" src="https://static-devportal-ux.sensedia-eng.com/Pagonxt/staging/documentations/image-1765313581919-qscls27q.png" />

O PSE é um método de pagamento por transferência bancária online em tempo real na Colômbia. No checkout, o cliente seleciona o nome de seu banco e faz login em seu ambiente de internet banking. Ele revisa os detalhes do pagamento pré-preenchidos, autoriza o pagamento e, em seguida, simplesmente aguarda a chegada da compra.

Este guia fornece instruções para pagamentos PSE, incluindo exemplos de requisição, tratamento de redirecionamento e processamento de notificação.

## Requisitos

Antes de integrar o PSE, você precisa:

  * Gerar um token de acesso através do [endpoint de Autenticação](https://www.google.com/search?q=/en/products/online-payments/regional-api/swagger%23tag/authentication).
  * Configurar uma `callback_url` HTTPS pública que recebe atualizações de status após os clientes concluírem a transação.
  * Recuperação da Lista de Bancos: Chamar o endpoint banklookup para obter a lista de bancos ativos para exibir ao cliente.

<Callout type="warning">

O PSE está disponível apenas na Colômbia e espera a moeda **COP**.

</Callout>

## Especificidades de Casos de Uso

Ao integrar o PSE via Getnet, aplicam-se requisitos específicos do mercado. Para saber mais sobre os requisitos específicos da Colômbia, certifique-se de revisar os recursos abaixo antes de entrar em produção (go live):

  * [Códigos de moeda](https://www.google.com/search?q=/en/articles%3Farticle%3Dcurrency-codes)
  * [Tipos de documento](https://www.google.com/search?q=/en/articles%3Farticle%3Ddocument-types)
  * [Impostos e regulamentações locais](https://www.google.com/search?q=/en/articles%3Farticle%3Dtaxes-and-regulations)

## Características

A tabela abaixo resume o comportamento e os requisitos para pagamentos PSE.

| Capacidade               | Detalhes                                                                               |
| :----------------------- | :------------------------------------------------------------------------------------ |
| **Interação com o cliente** | O cliente seleciona o banco, é redirecionado para o portal do PSE/Banco, faz login e autoriza o pagamento. |
| **Confirmação** | Assíncrona: status inicial `PENDING`, depois `APPROVED` ou `DECLINED` via webhook.    |
| **Notificações** | Webhooks são necessários para confirmar o status final da transação.                 |

## Funcionalidades disponíveis

Use a matriz abaixo para confirmar os cenários atualmente suportados para o PSE.

| Fluxo de pagamento | Países suportados | Compras | Reembolsos | Reembolsos parciais | Reembolsos múltiplos | Pré-autorizações |
| :----------: | :-----------------: | :-------: | :-----: | :-------------: | :--------------: | :----------------: |
|   Redirect   |       Colômbia      |     ✅     |    ❌    |        ❌        |         ❌        |          ❌         |

## Fluxo de Pagamento

Esta seção o guia através do processo completo de implementação de pagamentos PSE. O diagrama abaixo fornece uma visão geral do processo de pagamento PSE:

![](https://static-devportal-ux.sensedia-eng.com/Pagonxt/production/documentations/diagram-pse-1772650734403-ja4wv7j5.png)

## Fluxo Suportado

Este é o fluxo de pagamento atualmente suportado pela Getnet:

  * **Transferência PSE (`INSTANT_TRANSFER`):** O usuário seleciona seu banco e é redirecionado para autorizar o débito. O fluxo é **baseado em redirecionamento**.

<Callout type="warning">

Esta operação é assíncrona; o estado final é confirmado apenas quando a Getnet recebe o webhook.

</Callout>

## 1\. Buscando a lista de bancos

Antes de iniciar o pagamento, você deve recuperar a lista atual de instituições financeiras participantes para exibir ao cliente.

**Requisição para recuperar bancos disponíveis:**

```bash

curl --location --request GET 'https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/banklookup' \
--header 'Authorization: Bearer <ACCESS_TOKEN>' \
--header 'Content-Type: application/json'

```

**Exemplo de resposta:**

```json
{
  "banks": [
    {
      "name": "BANCO DE BOGOTA",
      "code": "1039"
    },
    {
      "name": "BANCO DAVIVIENDA",
      "code": "1051"
    },
    {
      "name": "BANCO UNION COLOMBIANO",
      "code": "1022"
    }
  ]
}
```

<Callout type="warning">

Capture o `code` para o banco selecionado (por exemplo: **1022**) para usar na requisição de pagamento subsequente.

</Callout>

## 2\. Criar a requisição de pagamento

Para iniciar um pagamento, chame o [endpoint Create - Authorize](https://www.google.com/search?q=/en/products/online-payments/regional-api/swagger%23tag/payments/post/dpm/payments-gwproxy/v2/payments).

Você deve especificar `WALLET` como o método de pagamento e fornecer a `brand` como `PSE`. O código do banco selecionado pelo usuário deve ser passado em `additional_data`.

A tabela descreve os campos mínimos obrigatórios para um pagamento PSE.

| Atributo                            | Descrição                 | Valor obrigatório                 |
| ------------------------------------ | --------------------------- | ------------------------------ |
| `payment_method`                     | Identificador do método de pagamento   | `WALLET`                       |
| `brand`                              | Identificador da marca            | `PSE`                          |
| `amount`                             | Valor da transação em centavos | Inteiro (ex.: `400` para \$4.00) |
| `currency`                           | Código de moeda ISO           | `COP`                          |
| `payment.instant_transfer.bank_code` | Código do Banco Selecionado          | String (ex., `1022`)          |
| `customer.document_type`             | Tipo de Documento do Cliente          | `CC`, `NIT`, etc.              |
| `customer.document_number`           | Número do Documento do Cliente        | String                         |
| `customer.email`                     | E-mail do Cliente              | Endereço de e-mail válido            |

**Exemplo de Requisição PSE**

```bash
curl --location --request POST 'https://api.pre.globalgetnet.com/dpm/payments-gwproxy/v2/payments' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer <ACCESS_TOKEN>' \
--data-raw '{
    "idempotency_key": "uuid-pse-v2-unique",
    "request_id": "req-id-v2-unique",
    "order_id": "1234123423128",
    "data": {
        "amount": 400,
        "currency": "COP",
        "customer_id": "customer-uuid",
        "payment": {
            "instant_transfer": {
                "bank_code": "1022"
            },
            "payment_id": "payment-uuid",
            "payment_method": "WALLET",
            "brand": "PSE",
            "soft_descriptor": "PSE TEST"
        },
        "additional_data": {
            "callback_url": "https://your-store.com/webhooks/pse",
            "customer": {
                "email": "customer@email.com",
                "document_number": "50506468",
                "document_type": "NIT",
                "name": "Jose da Silva",
                "phone_number": "34700000000",
                "billing_address": {
                    "street": "Avenida Siempre Viva",
                    "number": "123",
                    "city": "Bogota",
                    "state": "DC",
                    "country": "CO",
                    "postal_code": "110111"
                }
            }
        }
    }
}'
```

A resposta contém a `redirect_url`, que **deve ser usada para redirecionar o cliente para o portal do PSE**.

```json
{
  "payment_id": "47b9163c-64f3-41d1-8bd2-69512b9c1419",
  "status": "PENDING",
  "payment_method": "WALLET",
  "redirect_url": "https://gateway.pse.com.co/redirect/token-xyz",
  "reason_message": "Waiting for bank authorization."
}
```

## 2\. Experiência do Usuário

1.  O usuário é redirecionado para a página do PSE.

<img height="342" width="608" alt="pse redirect" title="PSE redirect" src="https://static-devportal-ux.sensedia-eng.com/Pagonxt/staging/documentations/pse1-1765313503862-y8ghsvh4.png" />

1.  O usuário insere seu e-mail.
2.  O usuário é redirecionado para o seu banco para concluir o depósito. Uma notificação de pagamento é recebida.

## 3\. Verificar status do pagamento

Quando o cliente conclui o pagamento, uma notificação de webhook é enviada para a sua `callback_url` configurada com o status atualizado do pagamento (`APPROVED` ou `DECLINED`).

<Callout type="warning">

Sempre dependa do webhook para o status final, pois o cliente pode fechar o navegador antes de retornar ao seu site.

</Callout>

## Regras de Negócio

  * `payment_method` deve ser `WALLET`.
  * `brand` deve ser `PSE`.
  * Moedas suportadas: `COP`.
  * O pagamento é uma operação **assíncrona**.
  * **Reembolsos:** Não suportados para este método de pagamento.
  * **Seleção de Banco:** O `bank_code` é obrigatório e deve ter origem no endpoint banklookup.

## Leia mais

  * [Autenticação](https://www.google.com/search?q=/en/products/online-payments/regional-api%3Fdoc%3Dauthentication) para gerenciamento de tokens.