# 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.
# Post Notification
$notify_url which defined when submitting the payin transaction.
Notification Parameters
# Parameters
# Header
Content-Type* | string | application/json |
transfersmile-Signature* | string | t=$timestamp,v2=HMAC SHA256($RequestBody) |
# Body
trade_no* | ID de transacción de transfersmile |
out_trade_no* | merchant out_trade_no |
out_request_no | transfersmile refund transaction id. Only for refund order |
app_id* | |
trade_status* | trade status. |
amount* | |
method* | |
currency* | |
timestamp* |
# Responses
200:OK | Merchant process the callback, and response "success" |
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ón | Descripció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 |
transfersmile 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 transfersmile y su servidor, por lo que no habrá un usuario físico observando ningún tipo de resultado.
Evento | Tiempo luego del primer envío |
---|---|
Dispatch | - |
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 transfersmile-Signature es el siguiente (aquí con salto de línea para facilitar la visualización, el contenido real está todo en una línea):
transfersmile-Signature:
t=1577808000,
v2=5257a869e7ecebeda32affa62cdca3fa51cad7e77a0e56ff536d0ce8e108d8bd
El encabezado transfersmile-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
TIP
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":"[email protected]"
},
"card":{
"card_no":""
}
}
}
# Lista de Notificaciones IP
- 13.56.110.186
WARNING
Nuestras notificaciones se enviarán desde estas direcciones IP, por favor agréguelas a su whitelist.