Saltar al contenido principal

Notificación del pago

Ejemplo de la notificación recibida:

{
"message": "OK",
"code": 200,
"current_time": "2022-11-16T11:16:33+0100",
"order": {
"uuid": "D16004FF-3421-409C-ADFC-DA2618D36135",
"created": "2022-11-16T11:11:03+0100",
"created_from_client_timezone": "2022-11-16T12:11:03+0200",
"amount": 1050,
"currency": "978",
"paid": true,
"status": "SUCCESS",
"safe": true,
"refunded": 0,
"additional": "227610373340",
"service": "CREDORAX",
"service_uuid": "B1F13B01-BA97-491C-BBDE-1C18988BD229",
"customer": "user42",
"cof_txnid": "202232016000606",
"transactions": [
{
"uuid": "2343BE77-1383-491E-8D95-5E00F0D35FAA",
"created": "2022-11-16T11:11:15+0100",
"created_from_client_timezone": "2022-11-16T12:11:15+0200",
"operative": "AUTHORIZATION",
"amount": 1050,
"authorization": "651979",
"processor_id": "XZZ01d4d229b0d5dB40RPKQCOSFNBGBH",
"status": "SUCCESS",
"error": "NONE",
"source": {
"object": "CARD",
"uuid": "F1E73ECB-D88C-4C57-919E-102F0E822416",
"type": "CREDIT",
"token": "95d37eaa18762d7d8c7b4ef098c4dd1e55450f21a9efaea27466d42da183b21b6cf3d0d8b74001b17ee3ba7d23e1daba7dda9b54a37979f3bb7cebc6e18ee7fe",
"brand": "VISA",
"country": "MT",
"holder": "Miguel C",
"bin": 401881,
"last4": "0036",
"is_saved": true,
"expire_month": "12",
"expire_year": "34",
"additional": null,
"bank": "BANK OF VALLETTA P.L.C",
"prepaid": false,
"validation_date": "2022-11-16 11:12:02",
"creation_date": "2022-11-16 11:11:51",
"brand_description": null,
"origin": "PAYMENT_CARD",
"cof": {
"is_available": true
}
},
"antifraud": null,
"device": {
"fingerprint": "495973560",
"user_agent": "Mozilla\/5.0 (X11; Linux x86_64; rv:106.0) Gecko\/20100101 Firefox\/106.0"
},
"error_details": null,
"bizum": {
"account": "ES51XXXXXXXXXXXXXXXX0001",
"phone_number": "346XXXXX306"
}
}
],
"token": null,
"ip": "127.0.0.1",
"reference": null,
"dynamic_descriptor": null,
"threeds_data": {
"version": "2.1",
"flow": "FRICTIONLESS",
"sca_requested": false,
"status": "Y",
"eci": "06",
"exemption": null
},
"dcc": {
"fee": "3.00 %",
"change": 0.099415,
"mode": "LOCAL",
"selection": "CARD",
"card_currency": "NOK",
"merchant_currency": "EUR",
"ecb_change": null
}
},
"client": {
"uuid": "42B8CF56-A7D7-4D4A-8349-4E27263CB2D5"
},
"extra_data": {
"halcash": {
"sender_name": "sender",
"secret_key": "1234",
"expiry_date": "2022-11-11"
}
},
"validation_hash": "8fe27963c7dd6c134dfd09fca6e544942acf89a57c8488c6437ca9c355397250"
}

NOTAS:

  • El campo order.dcc de la notificación sólo se incluirá en transacciones con DCC.
  • El campo transaction.bizum de la notificación sólo se incluirá en pagos con Bizum.

Para comprobar que las notificaciones que se reciben a la url_post provienen de Paylands existen varias formas de proceder.

Whitelist IPs de Paylands

En primer lugar, se puede introducir en una whitelist las IPs procedentes de los sistemas de Paylands. Esta es una de las soluciones más comunes y sencillas.

Para ello ha de ponerse en contacto con soporte@paylands.com para que les faciliten las IPs.

Validación mediante el hash de la notificación

La otra forma que existe de comprobar que no se está interceptando la comunicación entre Paylands y el comercio es comprobando el hash de validación. Una vez procesada la petición a Paylands, se devolverá una respuesta tipo json como la que aparece a continuación.

El campo extra_data solo aparecerá si en la petición inicial enviada por el comercio, se indicó este campo.

{
"message": "OK",
"code": 200,
"current_time": "2023-04-05T17:39:56+0200",
"order": {
"uuid": "E89DFBF6-23D3-4D78-BC98-06936F38D85F",
"created": "2022-12-30T12:21:32+0100",
"created_from_client_timezone": "2022-12-30T12:21:32+0100",
"amount": 10,
"currency": "978",
"paid": true,
"status": "SUCCESS",
"safe": false,
"refunded": 0,
"additional": null,
"service": "CREDORAX",
"service_uuid": "E6C5D97A-BDE8-45E0-904C-60EDEFDEC16D",
"customer": "test2222",
"cof_txnid": null,
"transactions": [
{
"uuid": "7DD3AE71-A758-416C-B813-D3EE936500F3",
"created": "2022-12-30T12:21:32+0100",
"created_from_client_timezone": "2022-12-30T12:21:32+0100",
"operative": "AUTHORIZATION",
"amount": 10,
"authorization": "202046",
"processor_id": "XZZ01f0a9404ffbb7B95LCGT274ERFW7",
"status": "SUCCESS",
"error": "NONE",
"source": {
"object": "CARD",
"uuid": "80C55ED9-3D72-4636-8AC7-27898AAD36B3",
"type": "CREDIT",
"token": "d3879e8cf246d2a9fbd0db46e013329a4772127a8634ea9b5fcb86ec1b9b29c888d60912fc96ff8320673d0570620967c959cb6d6671ce9145315a8b664c7ea4",
"brand": "VISA",
"country": "MT",
"holder": "Miguel C",
"bin": 401881,
"last4": "0011",
"is_saved": false,
"expire_month": "12",
"expire_year": "34",
"additional": null,
"bank": "Bank of Valletta p.l.c",
"prepaid": null,
"validation_date": "2022-12-30 12:22:18",
"creation_date": "2022-12-30 12:21:58",
"brand_description": "Visa Classic",
"origin": "KEYENTRY",
"cof": {
"is_available": false
}
},
"antifraud": null,
"device": {
"fingerprint": "2032183838",
"user_agent": "Mozilla\/5.0 (X11; Linux x86_64; rv:108.0) Gecko\/20100101 Firefox\/108.0"
},
"error_details": null
}
],
"token": null,
"ip": "127.0.0.1",
"reference": null,
"dynamic_descriptor": null,
"threeds_data": null
},
"client": {
"uuid": "42B8CF56-A7D7-4D4A-8349-4E27263CB2D5"
},
"validation_hash": "eae6e4c9d3dcb27067041aac25e15044909bc5a96830387332c62885cb6324b8"
}

Una vez obtenemos el json que devuelve la notificación, debemos calcular el hash usando nuestra signature.

Primero, debemos obtener los campos order, client y extra_data provenientes de la notificación y almacenarlos en un array. Tras esto, pasaremos el array a json y usaremos el SHA 256 y nuestra signature para calcular el hash.

Como ya hemos mencionado antes, el campo extra_data puede no aparecer si este no se mandó en la petición inicial enviada por el comercio.

<?php
$jsonObject = json_decode($response);

$array['order'] = $jsonObject->order;
$array['client'] = $jsonObject->client;
$array['extra_data'] = $jsonObject->extra_data;

$data = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

$signature ='341f7de8e6fc49da8d8736473af6b03a';

$validationHash = hash('sha256', $data . $signature);

El $validationHash que se obtiene debe ser idéntico al recibido en la notificación de Paylands. Se puede utilizar el ejemplo anterior para las pruebas necesarias, puesto que se trata de un caso real.

Notificaciones de órdenes expiradas

Paylands posee la capacidad de notificar las órdenes que hayan expirado. Para habilitar esta opción debe ponerse en contacto con soporte@paylands.com y pedir que le habiliten Notificar órdenes expiradas.

Tras la habilitación de esta característica, cada vez que Paylands marque una orden como expirada, se le enviará una notificación al comercio en la url especificada en el campo url_post junto con el objeto order actualizado:

{
"message": "OK",
"code": 200,
"current_time": "2023-04-05T17:39:56+0200",
"order": {
"uuid": "E89DFBF6-23D3-4D78-BC98-06936F38D85F",
"created": "2022-12-30T12:21:32+0100",
"created_from_client_timezone": "2022-12-30T12:21:32+0100",
"amount": 10,
"currency": "978",
"paid": false,
"status": "EXPIRED",
"safe": false,
"refunded": 0,
"additional": null,
"service": "CREDORAX",
"service_uuid": "E6C5D97A-BDE8-45E0-904C-60EDEFDEC16D",
"customer": "test2222",
"cof_txnid": null,
"transactions": [
{
"uuid": "7DD3AE71-A758-416C-B813-D3EE936500F3",
"created": "2022-12-30T12:21:32+0100",
"created_from_client_timezone": "2022-12-30T12:21:32+0100",
"operative": "AUTHORIZATION",
"amount": 10,
"authorization": "",
"processor_id": null,
"status": "CREATED",
"error": "NONE",
"source": null,
"antifraud": null,
"device": null,
"error_details": null
}
],
"token": null,
"ip": "127.0.0.1",
"reference": null,
"dynamic_descriptor": null,
"threeds_data": null
},
"client": {
"uuid": "42B8CF56-A7D7-4D4A-8349-4E27263CB2D5"
},
"validation_hash": "eae6e4c9d3dcb27067041aac25e15044909bc5a96830387332c62885cb6324b8"
}

En la Referencia API puedes consultar la especificación completa para Generar orden de pago.