# 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" />

PSE es un método de pago por transferencia bancaria online en tiempo real en Colombia. En el momento de pago, el cliente selecciona el nombre de su banco e inicia sesión en su entorno de banca online. Revisa los detalles de pago precompletados, autoriza el pago y luego simplemente espera a que llegue la compra.

Esta guía proporciona instrucciones para los pagos con PSE, incluyendo ejemplos de peticiones, gestión de redirecciones y procesamiento de notificaciones.

## Requisitos

Antes de integrar PSE debe:

  * Generar un token de acceso a través del [endpoint de Autenticación](https://www.google.com/search?q=/en/products/online-payments/regional-api/swagger%23tag/authentication).
  * Configurar una `callback_url` HTTPS pública que reciba actualizaciones de estado una vez que los clientes completen la transacción.
  * Recuperación de la lista de bancos: Llame al endpoint banklookup para obtener la lista de bancos activos y mostrarla al cliente.

<Callout type="warning">

PSE solo está disponible en Colombia y espera la moneda **COP**.

</Callout>

## Especificidades de Casos de Uso

Al integrar PSE a través de Getnet, se aplican requisitos específicos del mercado. Para obtener más información sobre los requisitos específicos de Colombia, asegúrese de revisar los siguientes recursos antes de pasar a producción (go live):

  * [Códigos de moneda](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)
  * [Impuestos y normativas locales](https://www.google.com/search?q=/en/articles%3Farticle%3Dtaxes-and-regulations)

## Características

La siguiente tabla resume el comportamiento y los requisitos de los pagos con PSE.

| Capacidad                | Detalles                                                                               |
| :----------------------- | :------------------------------------------------------------------------------------ |
| **Interacción con el cliente** | El cliente selecciona el banco, es redirigido al portal de PSE/Banco, inicia sesión y autoriza el pago. |
| **Confirmación** | Asíncrona: estado inicial `PENDING`, luego `APPROVED` o `DECLINED` mediante webhook.    |
| **Notificaciones** | Los webhooks son necesarios para confirmar el estado final de la transacción.                 |

## Funcionalidades disponibles

Utilice la siguiente matriz para confirmar los escenarios actualmente soportados para PSE.

| Flujo de pago | Países soportados | Compras | Reembolsos | Reembolsos parciales | Reembolsos múltiples | Preautorizaciones |
| :----------: | :-----------------: | :-------: | :-----: | :-------------: | :--------------: | :----------------: |
|   Redirect   |       Colombia      |     ✅     |    ❌    |        ❌        |         ❌        |          ❌         |

## Flujo de Pago

Esta sección le guía a través del proceso completo de implementación de pagos con PSE. El siguiente diagrama ofrece una visión general del proceso de pago con PSE:

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

## Flujo Soportado

Este es el flujo de pago actualmente soportado por Getnet:

  * **Transferencia PSE (`INSTANT_TRANSFER`):** El usuario selecciona su banco y es redirigido para autorizar el cargo. El flujo se **basa en redirección**.

<Callout type="warning">

Esta operación es asíncrona; el estado final solo se confirma cuando Getnet recibe el webhook.

</Callout>

## 1\. Recuperar la lista de bancos

Antes de iniciar el pago, debe recuperar la lista actual de instituciones financieras participantes para mostrarla al cliente.

**Petición para recuperar los bancos disponibles:**

```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'

```

**Ejemplo de respuesta:**

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

<Callout type="warning">

Capture el `code` del banco seleccionado (por ejemplo: **1022**) para utilizarlo en la petición de pago posterior.

</Callout>

## 2\. Crear la petición de pago

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

Debe especificar `WALLET` como método de pago y proporcionar la `brand` como `PSE`. El código bancario seleccionado por el usuario debe pasarse en `additional_data`.

La tabla resume los campos mínimos obligatorios para un pago con PSE.

| Atributo                            | Descripción                 | Valor obligatorio                 |
| ------------------------------------ | --------------------------- | ------------------------------ |
| `payment_method`                     | Identificador del método de pago   | `WALLET`                       |
| `brand`                              | Identificador de la marca            | `PSE`                          |
| `amount`                             | Importe de la transacción en céntimos | Entero (ej. `400` para 4,00 \$) |
| `currency`                           | Código de moneda ISO           | `COP`                          |
| `payment.instant_transfer.bank_code` | Código del Banco Seleccionado          | Cadena (ej., `1022`)          |
| `customer.document_type`             | Tipo de Documento del Cliente          | `CC`, `NIT`, etc.              |
| `customer.document_number`           | Número de Documento del Cliente        | Cadena                         |
| `customer.email`                     | Email del Cliente              | Dirección de email válida            |

**Ejemplo de Petición 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"
                }
            }
        }
    }
}'
```

La respuesta contiene la `redirect_url`, que **debe utilizarse para redirigir al cliente al portal de 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\. Experiencia del Usuario

1.  El usuario es redirigido a la página de 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.  El usuario introduce su email.
2.  El usuario es redirigido a su banco para completar el depósito. Se recibe una notificación de pago.

## 3\. Verificar el estado del pago

Cuando el cliente completa el pago, se envía una notificación de webhook a su `callback_url` configurada con el estado actualizado del pago (`APPROVED` o `DECLINED`).

<Callout type="warning">

Confíe siempre en el webhook para conocer el estado final, ya que el cliente podría cerrar el navegador antes de volver a su sitio web.

</Callout>

## Reglas de Negocio

  * `payment_method` debe ser `WALLET`.
  * `brand` debe ser `PSE`.
  * Monedas soportadas: `COP`.
  * El pago es una operación **asíncrona**.
  * **Reembolsos:** No soportados para este método de pago.
  * **Selección de Banco:** El `bank_code` es obligatorio y debe obtenerse del endpoint banklookup.

## Más información

  * [Autenticación](https://www.google.com/search?q=/en/products/online-payments/regional-api%3Fdoc%3Dauthentication) para la gestión de tokens.