# Notificación

{% hint style="success" %}
Para esta etapa del proceso de integración el comercio debe construir un servicio REST que sera consumido por Payvalida para realizar el proceso de notificación. Este una vez construido se debe comunicar a Payvalida para que se realice el registro de la url de dicho servicio.&#x20;
{% endhint %}

Al momento de registrar una orden, ésta se crea en estado **PENDIENTE**. La orden puede cambiar de estado por diversas razones:

1. Se ha recibido el pago correspondiente -> Cambia de **PENDIENTE** a **APROBADA** y se notifica con estatus ***approved.***
2. No se ha recibido el pago correspondiente antes de la fecha de vencimiento -> Cambia de **PENDIENTE** a **VENCIDA** y se notifica con estatus ***cancelled.***
3. El comercio *elimina* la orden (usando el API) -> Cambia de **PENDIENTE** a **CANCELADA**. No se notifica
4. El cliente realiza un reclamo de devolución del pago realizado -> Cambia de **APROBADA** a **ANULADA** y se notifica con estatus ***cancelled.***
5. El comercio solicita devolución del pago de un cliente -> Cambia de **APROBADA** a **ANULADA**, no se notifica.

El sistema notifica de forma automática en el momento del cambio de estado de la orden, pero es posible que exista más de una notificación de la misma orden. ***Es responsabilidad del comercio evitar entregar mas de una vez el producto adquirido por el cliente en caso de que haya más de una notificación**.*

![](https://1874222255-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-MNsmrOb2q0SiO670iPn%2F-MQiKjlKqK4VqBlH6jUJ%2F-MQimC3gH_4L2DtV1Cxm%2FCaptura%20de%20Pantalla%202021-01-10%20a%20la\(s\)%207.11.32%20p.%C2%A0m..png?alt=media\&token=e154f9f2-12f1-4c9c-9cc9-a2308580aac9)

{% hint style="success" %}
Esta notificación se realizara a la **URL** proporcionada por el comercio.
{% endhint %}

{% tabs %}
{% tab title="Request (Realiza Payvalida)" %}

| Campo         | Tipo   | Descripción                                                                       |
| ------------- | ------ | --------------------------------------------------------------------------------- |
| pv\_po\_id    | int    | Identificación de la orden de Payvalida                                           |
| po\_id        | String | Identificación de la orden del comercio                                           |
| status        | String | Estado de la orden. Puede ser **approved** o **cancelled**.                       |
| pv\_checksum  | String | Cadena de comprobación calculada con SHA256(po\_id + status + NOTIFICATION\_HASH) |
| amount        | String | Monto de la orden                                                                 |
| iso\_currency | String | Moneda con la que se registra la orden                                            |
| pv\_payment   | String | Medio de pago con el que se registra la orden                                     |
| {% endtab %}  |        |                                                                                   |

{% tab title="Request (ejemplo)" %}

```go
curl --location --request POST 'https://url-comercio.com/notificacion/payvalida' \
--header 'Content-Type: application/json' \
--data-raw '{
    "pv_po_id":1934480,
    "po_id":"999999991",
    "status":"approved",
    "pv_checksum":"0C08309AE28D15E8D337344E88668E2047947F653B126B7F62B0EACC4B1A30FD680DBE25BD8B38413032A219B86BDAE52D9554D45A892CA4B5C5103597876EAD",
    "amount":"10500.0",
    "iso_currency":"COP",
    "pv_payment":"PSE"
}'

```

{% endtab %}

{% tab title="Respuesta (Esperada)" %}

```go
//Para este caso se puede responder en el body con texto claro y el mensaje
OK

//Adicionalmente se puede responder en el body una estructura json
{"status":"OK"}
```

{% endtab %}

{% tab title="Cabeceras" %}

| Cabecera      | Valor            |
| ------------- | ---------------- |
| Content-Type  | application/json |
| {% endtab %}  |                  |
| {% endtabs %} |                  |

{% hint style="danger" %}
De lado del comercio por motivos de seguridad se recomienda hacer la construcción del **pv\_checksum** con la credencial **NOTIFICATION\_HASH** entregada en el registro. Para validar que sea payvalida la que realiza la notificación al compararlas.&#x20;
{% endhint %}

El sistema registra la respuesta obtenida al momento de la notificación, por ello es recomendable enviar como respuesta un texto adecuado al proceso de notificación, por ejemplo, **OK** en caso afirmativo y **ERROR** en caso contrario, también se recomienda acompañar la respuesta de una breve descripción, como por ejemplo: **“OK. Pago registrado”**, **“ERROR. Orden no reconocida”**.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.payvalida.com/api-cashin-plus/api/notificacion.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
