Notificaciones

IPN (Instant Payment Notification) es una notificación enviada de un servidor a otro a través de una solicitud HTTP POST informando las transacciones.

Para poder recibir notificaciones sobre los eventos en la plataforma, hay que configurar previamente la notificación al realizar el POST del pago, indicando la URL en el campo notify_url.

Notification

POST $notify_url which defined when submitting the payin transaction.

Notification Parameters

Headers

NameTypeDescription

Content-Type*

String

application/json

Pagsmile-Signature*

String

t=$timestamp,v2=HMAC SHA256($RequestBody)

Request Body

NameTypeDescription

trade_no*

String

Pagsmile transaction id

out_trade_no*

String

merchant out_trade_no

out_request_no

String

Pagsmile refund transaction id. Only for refund order

app_id*

String

trade_status*

String

trade status.

amount*

String

method*

String

currency*

String

timestamp*

String

success

Eventos

Cada vez que ocurra un evento, enviaremos una notificación en formato json usando HTTP POST a la URL que se especificó.

Se notificará en caso de los siguientes eventos:

AcciónDescripción

PROCESSING

Usuario envió la información de pago

SUCCESS

Transacción exitosa

CANCEL

Transacción cancelada

RISK_CONTROLLING

Transacción es riesgosa o los datos de pago no son claros

DISPUTE

Transacción en disputa

REFUSED

Transacción rechazada

REFUNDED

Transacción reembolsada

CHARGEBACK

Contracargo ocurrido

CHARGEBACK_REVERSED

Contracargo reversado

Pagsmile enviará notificaciones con el siguiente cronograma de reintentos y tiempos de espera de confirmación. Debe devolver un HTTP STATUS 200 (OK) con los datos de respuesta "correctos" antes de que expire el tiempo correspondiente. De lo contrario, se asumirá que no lo recibió correctamente y se le notificará nuevamente.

Se recomienda que responda a la notificación antes de ejecutar la lógica empresarial o antes de acceder a los recursos externos para no exceder los tiempos de respuesta estimados.

Esta comunicación es exclusiva entre los servidores de Pagsmile y su servidor, por lo que no habrá un usuario físico observando ningún tipo de resultado.

EventoTiempo luego del primer envío

Envío

-

1st intento

10 minutos

2nd intento

30 minutos

3rd intento

60 minutos

4th intento

120 minutos

5th intento

360 minutos

6th intento

840 minutos

Verificación de firmas (opcional)

El contenido aproximado del encabezado Pagsmile-Signature es el siguiente (aquí con salto de línea para facilitar la visualización, el contenido real está todo en una línea):

Pagsmile-Signature:
t=1577808000,
v2=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd

El encabezado Pagsmile-Signature contiene un timestamp y una firma. La marca de tiempo está prefijada por t=, seguida de una marca de tiempo UNIX; la firma tiene el prefijo v2=, seguido del contenido de la firma.

Paso 1 : Extraer el timestamp y firmas del encabezado

Divida el encabezado usando el carácter [,] como separador, para obtener una lista de elementos. Luego divida cada elemento utilizando el carácter [=] como separador, para obtener un prefijos y valores.

El valor del prefijo [t] corresponde a la marca de tiempo y [v2] corresponde a la firma. Puede descartar todos los demás elementos.

Paso 2 : Prepare el RequestBody string original

Obtenga todo el contenido en RequestBody. Por favor, preste atención aquí. No utilice la estructura autoconstruida del programa para formatear y/o serializar el contenido de RequestBody. Si tiene requisitos similares, hágalo después de obtener los datos originales para su verificación para evitar la clasificación innecesaria de campos y la adición de caracteres que afectan la firma.

Paso 3 : Determine la firma esperada

Calcule un HMAC con la función hash SHA256. Utilice secretKey get del merchant dashboard como clave (salt) y use el string RequestBody original como mensaje.

Paso 4 : Compare las firmas

Compare la firma en el encabezado con la firma esperada. Para un match de igualdad, calcule la diferencia entre la marca de tiempo actual y la marca de tiempo recibida y luego, decida si la diferencia está dentro de su tolerancia.

Ejemplo de notificación

La siguiente notificación es sólo un ejemplo. Diferentes métodos pueden tener más o menos parámetros en la notificación real. Consulte lo recibido al realizar la prueba.

Content-Type: application/json
Method: POST
Header: t=1645516741, v2=f6e345eca80d74c470ba456b7b559046f22b49fcaad9b81938ff1488b0f497ac
Body:
  {
    "amount":"12.01",
    "out_trade_no":"202201010354002",
    "method":"Boleto",
    "trade_status":"SUCCESS",
    "trade_no":"2022022201111100011",
    "currency":"BRL",
    "out_request_no":"",
    "app_id":"162************38",
    "timestamp":"1645516741",
    "user":{
      "buyer_id":"",
      "identify":{
        "type":"CPF",
        "number":"50284414727"
      },
      "name":"test user name",
      "phone":"75991435892",
      "email":"test@pagsmile.com"
    },
    "card":{
      "card_no":""
    }
  }

Lista de Notificaciones IP

  • 13.56.110.186

Nuestras notificaciones se enviarán desde estas direcciones IP, por favor agréguelas a su whitelist.

Last updated