NAV

API Transferencia Bancaria PSD2

Introducción

La API Transferencia Bancaria PSD2 está basada en arquitectura de desarrollo web REST y, al ser independiente del tipo de sintaxis o lenguaje utilizado, puede ser integrada en cualquier plataforma online.

Esta API proporciona al desarrollador un conjunto de definiciones técnicas y procesos para integrar el servicio de pago Transferencia Bancaria PSD2. Las peticiones API de inicio de pagos proporcionan al Cliente-Integrador URLs o enlaces cifrados que le permitirá utilizarlos según el caso de uso:

Botón de pago para plataformas online basadas en web o app que requieren integrar métodos de pago alternativos a las tarjetas para el pago de carritos de compra, pago de pedidos/facturas en plataformas online de clientes, etc.

Enlaces de requerimiento de pagos para adjuntar a documentos físicos o digitales y enviar posteriormente a clientes o deudores por cualquier canal (Facturas, emails, SMS, etc.).

La pulsación sobre el enlace (ya sea en formato botón de pago o como enlace de pago) redireccionan al Cliente-Pagador a la aplicación web Transferencia Bancaria PSD2, en la que le es mostrado un selector de entidades financieras. Una vez seleccionada la entidad desde la que desea pagar, el Cliente-Pagador es redirigido al portal bancario específico creado exclusivamente por su entidad financiera para autorizar el pago en 3 simples pasos:

  1. Identificación (login) con las mismas claves de su banca online
  2. Selección de cuenta corriente
  3. Autorización del pago a través del procedimiento habitual establecido por su entidad financiera

Cuando la operación ha sido finalizada con éxito, el servicio notificará al Cliente-Integrador, vía API en tiempo real, el resultado junto a los datos asociados al pago. El Cliente-Pagador será redirigido a una página de éxito de la aplicación Transferencia Bancaria PSD2 o del propio Cliente-Integrador.

El servicio Transferencia Bancaria PSD2 está basado en el servicio regulado de Iniciación de pagos (Real Decreto Ley 19/2018, de 23 de noviembre 2018 - PSD2) y es prestado directamente por la Entidad de Pago INESPAY FINANCIAL TECHNOLOGIES E.P., autorizada por Banco de España con el número de entidad 6902.

NOTA: Debido a las restricciones de seguridad impuestas por las entidades financieras, este servicio no puede integrarse como iframe en otras aplicaciones web o App.

Esquema API

Seguridad

La API Transferencia Bancaria PSD2 requiere un proceso de autenticación mediante claves API-KEY y API-TOKEN. Estas claves deben ser enviadas en la cabecera (Header) de cada llamada API. Para obtenerlas, el Cliente-Integrador debe registrarse previamente en el Dashboard INESPAY mediante una dirección de email y una contraseña: Acceder al Registro

Se utiliza el protocolo seguro HTTPS para el cifrado e intercambio de datos y el formato JSON para todas las peticiones y respuestas API.

Entornos

Con el objetivo de facilitar la integración, se ha habilitado un entorno SANDBOX que simula las acciones del entorno de PRODUCCIÓN, lo cual permitirá al Cliente-Integrador confirmar el correcto funcionamiento del servicio antes de ser expuesto al Cliente-Pagador.

Para realizar peticiones a uno u otro entorno (SANDBOX o PRODUCCIÓN), simplemente se deben utilizar las claves API-KEY y API-TOKEN y llamar a la URL base correspondiente a cada entorno. Las claves para realizar peticiones API al entorno SANDBOX se proporcionan automáticamente en el Dashboard INESPAY (Acceder al Registro sección Configuración/Claves API). Sin embargo, para obtener las claves API del entorno de PRODUCCIÓN es necesario formalizar el contrato de prestación del servicio. Para ello, puede ponerse en contacto con su gestor personal o enviar un email a la dirección sales@inespay.com.

Entorno Tipo URL
SANDBOX (Pruebas) POST https://apiflow.inespay.com/san/url/signer
PRODUCCIÓN POST https://apiflow.inespay.com/pro/url/signer

SANDBOX : Las peticiones a este entorno permiten iniciar pagos ficticios para comprobar la correcta integración del servicio Transferencia Bancaria PSD2. Debe realizar una petición API de inicio de pago a la URL de SANDBOX utilizando sus claves API. Esta acción le abrirá la aplicación web Transferencia Bancaria PSD2, en la que se mostrará un selector con una pequeña muestra de entidades financieras.

Para comprobar el flujo de pago que experimentará un Cliente-Pagador, puede seleccionar cualquiera de los bancos comerciales que aparecen en el selector. Sin embargo, para realizar pruebas de integración controladas recomendamos utilizar el banco SIMULADOR, que le permitirá simular distintas acciones informando un valor diferente en el campo Usuario:

  1. Pago OK: Usuario: user1 // Contraseña: 1234
  2. Pago KO: Usuario: user2 // Contraseña: 1234
  3. Pago pendiente de más firmas (firma mancomunada): Usuario: user3 // Contraseña: 1234

Por favor, complete diferentes pagos y experimente las respuestas que obtiene. Cuando finalice un pago con éxito asegúrese de visualizar la página de confirmación con el texto Orden de pago completada.

Para una adecuada integración, es recomendable comprobar las siguientes acciones:

a) Redirección del Cliente-Pagador a la URL de éxito de la plataforma del Cliente-Integrador. Para comprobar esta acción se requiere informar el parámetro urlOk en la llamada API de inicio de pago y finalizar un pago con éxito.

b) Redirección a la URL de KO de la plataforma del Cliente-Integrador. Para comprobar esta acción se requiere informar el parámetro urlError en la llamada API de inicio de pago y pulsar el botón SALIR que aparecerá en un pago KO.

c) Notificación electrónica de un pago a la plataforma del Cliente-Integrador. Para comprobar esta acción se requiere informar el parámetro urlNotif y completar un pago con éxito. Por favor, consulte la sección Notificación de pagos (Callback).

PRODUCCIÓN : En el entorno PRODUCCIÓN todos los pagos realizados serán reales. Previo a la exposición del servicio de pago al Cliente-Pagador, se recomienda al Cliente-Integrador realizar un pago real por sí mismo, con el fin de comprobar que la integración ha sido llevada a cabo correctamente. Para ello, el Cliente-Integrador debe iniciar un pago real, acceder a la aplicación web Transferencia Bancaria PSD2 y finalizarlo con éxito. Asegúrese de recibir correctamente la notificación de pago (Callback) así como de comprobar que es redirigido al parámetro urlOk, en el caso de haberse informado en la petición API.

Soporte Técnico

Para cualquier duda relacionada con asuntos técnicos o con la integración del servicio, INESPAY pone a disposición del Cliente-Integrador la dirección de email support@inespay.com.

Iniciación de Pagos

El servicio de iniciación de pagos Transferencia Bancaria PSD2 dispone de dos modalidades de pago:

- Pago simple (unitario) (Modalidad estándar) Para pagos puntuales o específicos de compras o facturas. Siempre requiere la interacción del Cliente-Pagador para autorizar cada pago.

- Pago periódico o recurrente Para pagos por suscripción o compras fraccionadas. El Cliente-Pagador interactúa con el servicio Transferencia Bancaria PSD2 una sola vez para autorizar el alta de una orden de pago con periodicidad, importe y concepto preestablecidos, no modificables a posteriori.

Pagos Simples

El servicio de iniciación de pagos simples proporciona al Cliente-Integrador un enlace de pago que incorporará los datos necesarios para abrir la aplicación web Transferencia Bancaria PSD2, donde se mostrará al Cliente-Pagador un selector de bancos, junto a los detalles de la transacción y las Condiciones Generales del servicio. El listado de bancos accesibles al Cliente-Pagador puede consultarse en cualquier momento desde el Dashboard INESPAY (sección Configuración/Bancos).

Petición de inicio de pago simple

Entorno Tipo URL
SANDBOX (Pruebas) POST https://apiflow.inespay.com/san/url/signer
PRODUCCIÓN POST https://apiflow.inespay.com/pro/url/signer

Header

Parámetro Descripción
X-Api-Key API-KEY proporcionada por INESPAY
Authorization API-TOKEN proporcionado por INESPAY
Content-Type application/json

Body

Parámetro Requerido Tipo Descripción
subject String Concepto de la transferencia bancaria que aparecerá en el extracto bancario tanto del Cliente-Pagador como del Cliente-Integrador. Tamaño máximo: 160 caracteres. Se recomienda utilizar un concepto específico que permita identificar inequívocamente la transacción para procesos de conciliación contable basados en extractos bancarios (Norma CSB43, etc.). Por favor, evite introducir en este campo cualquier información personal o sensible
amount Number Importe del pago mutiplicado por 100, sin decimales. Por ejemplo: 35598 = 355,98 Euros
reference String Identificador único de la orden de pago o del pedido informado por el Cliente-Integrador, gracias al cual se puede identificar una orden de pago en sus propios sistemas. Este valor permitirá al Cliente-Integrador matchear el pedido o la orden de pago que ha salido de su plataforma con la información que le devuelva INESPAY a través del parámetro urlNotif (ver Notificación de pagos). Tamaño máximo: 100 caracteres
urlOk No String URL de retorno a la que se redirigirá al Cliente-Pagador cuando el pago se ha realizado con éxito. Este parámetro es esencial cuando el Cliente-Pagador proviene de una tienda o cualquier otro tipo de plataforma online. En caso de no informarse, INESPAY presentará al Cliente-Pagador una página de éxito, desde la que podrá descargar un justificante del pago
urlOkMethod No String Método HTTP utilizado para redirigir al Cliente-Pagador a la urlOk. Valores posibles: GET o POST. En caso de no informarse, el valor será POST
urlError No String URL de retorno a la que se redirigirá al Cliente-Pagador si decide abandonar el proceso de pago sin completarlo. En caso de no informarse, INESPAY presentará al Cliente-Pagador una página estática de Cancelación
urlErrorMethod No String Método HTTP utilizado para redirigir al Cliente-Pagador a la urlError. Valores posibles: GET o POST. En caso de no informarse, el valor será POST
urlNotif No String URL a la que se notifica la información de una orden de pago finalizada con éxito (ver Notificación de pagos). Debe tenerse en cuenta que, tanto para el entorno de SANDBOX como para el de PRODUCCIÓN se debe informar una urlNotif de un entorno diferente al Local. En caso contrario, el proceso de notificación no se podrá llevar a cabo, ya que la URL informada debe ser accesible por INESPAY
urlNotifContentType No String Formato de la notificación realizada por INESPAY a la URL informada en el parámetro urlNotif. Los valores posibles son : x-www-form-urlencoded o json. En caso de no informarse, el valor por defecto es x-www-form-urlencoded.
expireMinutes No Number Tiempo de validez del enlace de pago. En caso de no informarse, la validez será de 30 minutos. El máximo tiempo posible será de 259200 minutos (180 días)
accountDestiny No String IBAN de destino de la orden de pago. Sólo es necesario informar este parámetro en caso de que el Cliente-Integrador necesite destinar el importe de cada orden de pago a un IBAN concreto. En caso de que el Cliente-Integrador disponga de un solo IBAN o tenga activado el servicio de Balanceo de bancos (consultar a INESPAY), no es necesario informar este parámetro. Cualquier IBAN informado en este parámetro debe estar previamente validado en el proyecto, a través del Dashboard INESPAY (sección Configuración/Bancos). En caso de enviarse un IBAN no validado en el proyecto, la API devolverá un error. Para realizar peticiones de inicio de pago en modo SANDBOX, por favor, consulte los IBAN de prueba informados al final de esta sección
customData No String Campo personalizable que puede ser utilizado por el Cliente-Integrador para persistir cualquier tipo de dato que requiera recibir posteriormente a través del parámetro urlNotif (ver Notificación de pagos). Tamaño máximo: 4000 caracteres
partnerId No String Identificador único de partner facilitado por INESPAY. Sólo disponible para integradores específicos que hayan establecido previamente una relación de partenariado con INESPAY
customRecipient No String Campo personalizable que permite mostrar al Cliente-Pagador un nombre diferente del proyecto en la aplicación web Transferencia Bancaria PSD2 (nombre comercial de la web, nombre de la plataforma online, etc…). En caso de no informarse este parámetro, el nombre que se mostrará en la aplicación web Transferencia Bancaria PSD2 al Cliente-Pagador será el nombre comercial del Cliente-Integrador

Respuesta a la petición de inicio de pago simple

Parámetro Tipo Descripción
url String Enlace de pago que permitirá al Cliente-Pagador acceder a la aplicación web Transferencia Bancaria PSD2
idDebt String Identificador único de la orden de pago
status String Código de éxito (200) o código de error
description String Descripción del código status

Pagos Periódicos

El servicio de iniciación de pagos periódicos está basado en dos subservicios: Alta y Cancelación. Un pago periódico no puede modificarse por lo que, en caso de requerir la modificacion de algún dato, será necesario cancelar la orden periódica original y generar una nueva.

Alta de un Pago Periódico

Este servicio proporciona al Cliente-Integrador un enlace de pago que incorporará los datos necesarios para permitir al Cliente-Pagador iniciar una orden de pago periódico de un mismo importe y una frecuencia establecida (mensual, trimestral, etc.). El Cliente-Pagador accederá directamente al portal PSD2 de su entidad financiera para autorizar la orden.

ATENCIÓN: A diferencia del pago simple, el servicio de Alta de un Pago Periódico requiere informar el IBAN del Cliente-Pagador en cada llamada de inicio de pago (parámetro debtorAccount). En próximas fechas el flujo de pago del pago periódico será idéntico al del pago simple, permitiendo al Cliente-Pagador seleccionar el IBAN desde el que desea dar de alta la orden de pago periódico. Una vez se confirme este desarrollo por parte de las entidades financieras, no será necesario utilizar el parámetro debtorAccount.

Previo a la petición de inicio de pago, el Cliente-Integrador debe realizar una primera petición a la API Transferencia Bancaria PSD2 para obtener tanto el listado de bancos que ofrecen este servicio como las frecuencias admitidas por cada uno. Una vez obtenida esta información, el Cliente-Integrador puede presentar al Cliente-Pagador el listado de bancos o enviar directamente la llamada de inicio de pago informando los parámetros necesarios para dar de alta la orden.

Petición del listado de bancos

Entorno Tipo URL
SANDBOX (Pruebas) GET https://apiflow.inespay.com/san/banks
PRODUCCIÓN GET https://apiflow.inespay.com/pro/banks

Header

Parámetro Descripción
X-Api-Key API-KEY proporcionada por INESPAY
Authorization API-TOKEN proporcionado por INESPAY
Content-Type application/json

Respuesta a la petición del listado de bancos

Parámetro Tipo Descripción
total Integer Número de elementos devueltos en data
data Array (Bank) Array de bancos
status String Código de éxito (200) o error
description String Descripción del código status

Array (Bank)

Parámetro Tipo Descripción
bankId String Identificador único de la entidad financiera asignado por INESPAY
name String Nombre de la entidad financiera
bankCodes Array (String) Array que contiene el/los código/s de la entidad financiera
country String País al que pertenece la entidad financiera
enabled Integer Indica si el banco se encuentra activado (valor = 1) o desactivado (valor = 0) en la aplicación web Transferencia Bancaria PSD2. En caso de que la entidad financiera se encuentre desactivada (0) significa que, por razones técnicas o puntuales, no se encuentra operativa en el momento de realizar la petición API
enabledPeriodicPayment Integer Indica si el banco dispone del servicio de pagos periódicos (valor = 1) o no (valor = 0)
frequencyPeriodicPayment Array(String) Frecuencias de pago admitidas (parámetro frequency) en caso de que el banco admita pagos periódicos
bankGroupId Integer Identificador del grupo en caso de que el banco se pueda agrupar en un nivel superior. En caso de presentar al Cliente-Pagador el listado de bancos se recomienda mostrar el nombre del Grupo y, una vez seleccionado, presentar un nuevo selector con las entidades financieras que lo conforman
bankGroupName String Nombre del grupo bancario, en caso de que el banco se pueda agrupar (P. Ej: Ruralvía)

NOTA: La utilización del parámetro bankGroupId permite reducir considerablemente el listado de bancos para presentar al Cliente-Pagador en un primer selector. En lugar de mostrar el nombre de todas las entidades financieras que se reciben en la petición del listado de bancos, se recomienda agrupar aquellas que vengan informadas con el parámetro bankGroupId y mostrarlas agrupadas con el nombre del mismo (bankGroupName).

Es posible realizar consultas filtradas sobre el listado de bancos. A continuación se describen los filtros disponibles:

Bancos activos por país

Consulta de los bancos activos por país:

Entorno Tipo URL
SANDBOX (Pruebas) GET https://apiflow.inespay.com/san/banks?enabled=1&country=ES
PRODUCCIÓN GET https://apiflow.inespay.com/pro/banks?enabled=1&country=ES

Bancos con la funcionalidad activa de pago periódico por país

Consulta de los bancos que tienen habilitado el servicio pagos periódicos por país:

Entorno Tipo URL
SANDBOX (Pruebas) GET https://apiflow.inespay.com/san/banks?enabledPeriodicPayment=1&country=ES
PRODUCCIÓN GET https://apiflow.inespay.com/pro/banks?enabledPeriodicPayment=1&country=ES

Petición de inicio de pago periódico

Entorno Tipo URL
SANDBOX (Pruebas) POST https://apiflow.inespay.com/san/url/periodic-payment-signer
PRODUCCIÓN POST https://apiflow.inespay.com/pro/url/periodic-payment-signer

Header

Parámetro Descripción
X-Api-Key API-KEY proporcionada por INESPAY
Authorization API-TOKEN proporcionado por INESPAY
Content-Type application/json

Body

Parámetro Requerido Tipo Descripción
subject String Concepto de la transferencia bancaria que aparecerá en el extracto bancario tanto del Cliente-Pagador como del Cliente-Integrador. Tamaño máximo: 160 caracteres. Se recomienda utilizar un concepto específico que permita identificar inequívocamente la transacción para procesos de conciliación contable basados en extractos bancarios (Norma CSB43, etc.). Por favor, evite introducir en este campo cualquier información personal o sensible
amount Number Importe del pago mutiplicado por 100, sin decimales. Por ejemplo: 35598 = 355,98 Euros
reference String Identificador único de la orden de pago o del pedido informado por el Cliente-Integrador, gracias al cual se puede identificar una orden de pago en sus propios sistemas. Este valor permitirá al Cliente-Integrador matchear el pedido o la orden de pago que ha salido de su plataforma con la información que le devuelva INESPAY a través del parámetro urlNotif (ver Notificación de pagos). Tamaño máximo: 100 caracteres
frequency String Periodicidad de ejecución del pago periódico. La frecuencia informada debe de estar admitida por el banco seleccionado por el Cliente-Pagador
debtorAccount String IBAN del Cliente-Pagador que va a autorizar la orden periódica de pago (IBAN del ordenante). Para inicios de pago en SANDBOX, utilice los IBAN de prueba informados al final de esta sección
startDate String Fecha a partir de la cual se inician los pagos periódicos en formato YYYY-MM-DD. La fecha informada en este parámetro debe ser siempre posterior a la fecha presente de la petición API. En caso de venir informado una frecuencia Monthly o superior, el día del mes informado en este parámetro se considerará como “día de ejecución”. Ejemplo: El valor 2021-10-18 significará que el primer pago se llevará a cabo el 18 de octubre de 2021 y los siguientes pagos se llevarán a cabo los días 18 de los sucesivos periodos
endDate String Fecha final de la orden del pago periódico en formato YYYY-MM-DD.
urlOk No String URL de retorno a la que se redirigirá al Cliente-Pagador cuando el pago se ha realizado con éxito. Este parámetro es esencial cuando el Cliente-Pagador proviene de una tienda o cualquier otro tipo de plataforma online. En caso de no informarse, INESPAY presentará al Cliente-Pagador una página de éxito, desde la que podrá descargar un justificante del pago
urlOkMethod No String Método HTTP utilizado para redirigir al Cliente-Pagador a la urlOk. Valores posibles: GET o POST. En caso de no informarse, el valor será POST
urlError No String URL de retorno a la que se redirigirá al Cliente-Pagador si decide abandonar el proceso de pago sin completarlo. En caso de no informarse, INESPAY presentará al Cliente-Pagador una página estática de Cancelación
urlErrorMethod No String Método HTTP utilizado para redirigir al Cliente-Pagador a la urlError. Valores posibles: GET o POST. En caso de no informarse, el valor será POST
urlNotif No String URL a la que se notifica la información de una orden de pago finalizada con éxito (ver Notificación de pagos). Debe tenerse en cuenta que, tanto para el entorno de SANDBOX como para el de PRODUCCIÓN se debe informar una urlNotif de un entorno diferente al Local. En caso contrario, el proceso de notificación no se podrá llevar a cabo, ya que la URL informada debe ser accesible por INESPAY
urlNotifContentType No String Formato de la notificación realizada por INESPAY a la URL informada en el parámetro urlNotif. Los valores posibles son : x-www-form-urlencoded o json. En caso de no informarse, el valor por defecto es x-www-form-urlencoded.
expireMinutes No Number Tiempo de validez del enlace de pago. En caso de no informarse, la validez será de 30 minutos. El máximo tiempo posible será de 259200 minutos (180 días)
accountDestiny No String IBAN de destino de la orden de pago. Sólo es necesario informar este parámetro en caso de que el Cliente-Integrador necesite destinar el importe de cada orden de pago a un IBAN concreto. En caso de que el Cliente-Integrador disponga de un solo IBAN o tenga activado el servicio de Balanceo de bancos (consultar a INESPAY), no es necesario informar este parámetro. Cualquier IBAN informado en este parámetro debe estar previamente validado en el proyecto, a través del Dashboard INESPAY (sección Configuración/Bancos). En caso de enviarse un IBAN no validado en el proyecto, la API devolverá un error. Para realizar peticiones de inicio de pago en modo SANDBOX, por favor, consulte los IBAN de prueba informados al final de esta sección
customData No String Campo personalizable que puede ser utilizado por el Cliente-Integrador para persistir cualquier tipo de dato que requiera recibir posteriormente a través del parámetro urlNotif (ver Notificación de pagos). Tamaño máximo: 4000 caracteres
partnerId No String Identificador único de partner facilitado por INESPAY. Sólo disponible para integradores específicos que hayan establecido previamente una relación de partenariado con INESPAY
customRecipient No String Campo personalizable que permite mostrar al Cliente-Pagador un nombre diferente del proyecto en la aplicación web Transferencia Bancaria PSD2 (nombre comercial de la web, nombre de la plataforma online, etc…). En caso de no informarse este parámetro, el nombre que se mostrará en la aplicación web Transferencia Bancaria PSD2 al Cliente-Pagador será el nombre comercial del Cliente-Integrador

Respuesta a la petición de inicio de pago periódico

Parámetro Tipo Descripción
url String Enlace del pago periódico que accederá directamente al portal bancario, según el IBAN informado en el parámetro debtorAccount
idDebt String Identificador único de la orden de pago
status String Código de éxito (200) o error
description String Descripción del código status

Cancelación de un pago periódico

Este servicio proporciona al Cliente-Integrador un enlace de pago que incorporará los datos necesarios para cancelar una orden periódica de pago previamente autorizada por el Cliente-Pagador. Al realizar esta llamada API, el Cliente-Pagador accederá directamente a su portal bancario para autorizar la cancelación de la orden periódica de pago. Debe tenerse en cuenta que un pago periódico no puede modificarse por lo que, en caso de requerir la modificacion de algún dato, es necesario cancelar la orden periódica original y generar una nueva.

Petición de cancelación de pago periódico

Entorno Tipo URL
SANDBOX (Pruebas) POST https://apiflow.inespay.com/san/url/cancel-periodic-payment-signer
PRODUCCIÓN POST https://apiflow.inespay.com/pro/url/cancel-periodic-payment-signer

Header

Parámetro Descripción
X-Api-Key API-KEY proporcionada por INESPAY
Authorization API-TOKEN proporcionado por INESPAY
Content-Type application/json

Body

Parámetro Requerido Tipo Descripción
idDebt String Identificador único de la orden de pago periódico
reference String Identificador interno del pago del Cliente-Integrador con el que puede identificar la orden de cancelación de pago. Tamaño máximo: 100 caracteres
urlOk No String URL de retorno a la que se redirigirá al Cliente-Pagador cuando la cancelación del pago se ha realizado con éxito. Este parámetro es esencial cuando el Cliente-Pagador proviene de una tienda o cualquier otro tipo de plataforma online. En caso de no informarse, INESPAY presentará al Cliente-Pagador una página de éxito, desde la que podrá descargar un justificante de la cancelación del pago
urlOkMethod No String Método HTTP utilizado para redirigir al Cliente-Pagador a la urlOk. Valores posibles: GET o POST. En caso de no informarse, el valor será POST
urlError No String URL de retorno a la que se redirigirá al Cliente-Pagador si decide abandonar el proceso de cancelación del pago periódico sin completarlo. En caso de no informarse, INESPAY presentará al Cliente-Pagador una página estática de Cancelación
urlErrorMethod No String Método HTTP utilizado para redirigir al Cliente-Pagador a la urlError. Valores posibles: GET o POST. En caso de no informarse, el valor será POST
urlNotif No String URL a la que se notifica el éxito de la cancelación del pago periódico (ver Notificación de pagos). Debe tenerse en cuenta que, tanto para el entorno de SANDBOX como para el de PRODUCCIÓN se debe informar una urlNotif de un entorno diferente al Local. En caso contrario, el proceso de notificación no se podrá llevar a cabo
urlNotifContentType No String Formato de la notificación realizada por INESPAY a la URL informada en el parámetro urlNotif. Los valores posibles son: x-www-form-urlencoded o json. En caso de no informarse, el valor por defecto es x-www-form-urlencoded
expireMinutes No Number Tiempo de validez del enlace de pago. En caso de no informarse, la validez del enlace será de 30 minutos. El máximo tiempo posible será de 259200 minutos (180 días)
customData No String Campo personalizable que puede ser utilizado por el Cliente-Integrador para persistir cualquier tipo de dato que requiera recibir posteriormente a través del parámetro urlNotif (ver Notificación de pagos) (P. Ej: {“name”:“Bruce Wayne”, “numDoc”:“11111112L”}). Tamaño máximo: 4000 caracteres
partnerId No String Identificador único de partner facilitado por INESPAY. Sólo disponible para integradores específicos que hayan establecido previamente una relación de partenariado con INESPAY

Respuesta a la petición de cancelación de un pago periódico

Parámetro Tipo Descripción
url String Enlace de cancelación del pago periódico que accederá directamente al portal bancario, según el parámetro transactionId informado en la petición de cancelación de pago periódico
idDebt String Identificador único de la orden de pago
status String Código de éxito (200) o error
description String Descripción del código status

Notificación de pagos (Callback)

INESPAY realiza la notificación de un pago (Callback) en el preciso instante en el que un Cliente-Pagador ha ejecutado con éxito una orden de pago. Esta notificación o Callback se realiza mediante una petición de tipo x-www-form-urlencoded o JSON a la URL informada en el parámetro urlNotif, en función del valor establecido en el parámetro urlNotifContentType. Esta petición es invisible e independiente de las acciones que pueda llevar a cabo el Cliente-Pagador en la aplicación web Transferencia Bancaria PSD2.

Tanto para el entorno de SANDBOX como para el de PRODUCCIÓN se debe informar un parámetro urlNotif de un entorno diferente al Local. En caso contrario, el proceso de notificación no se podrá llevar a cabo, ya que la URL informada debe ser accesible.

Las transacciones no finalizadas con éxito o los abandonos por parte del Cliente-Pagador no se notifican nunca a través de este parámetro urlNotif. En caso de que el Cliente-Pagador abandone voluntariamente el proceso de pago a través del botón Salir que aparece en la aplicación web Transferencia Bancaria PSD2, INESPAY lo redirigirá al parámetro urlError. En caso de no existir este parámetro, INESPAY redirigirá al Cliente-Pagador a una página estática de Cancelación.

ADVERTENCIA: El parámetro opcional urlOk no debe ser utilizado como Callback. INESPAY recomienda utilizar el parámetro urlOk únicamente para recibir al Cliente-Pagador en una página de éxito propia del Cliente-Integrador, confirmándole la gestión del pedido o del pago.

Para evitar duplicidades en la notificación de los pagos, el proceso de Callback se realiza solamente una vez. A pesar de nuestros múltiples controles, recomendamos al Cliente-Integrador bloquear la gestión del pago o del pedido al recibir la primera notificación procedente de INESPAY. De esta manera, en el hipotético caso de que recibiese más de una notificación de una misma referencia de pago, se evitará la duplicidad de un pedido o de un pago.

NOTA: En caso de que el proceso de notificación no se llegue a ejecutar con éxito, el Cliente-Integrador recibirá un email advirtiéndole de un Error en Notificación, con el fin de que pueda acceder al Dashboard de INESPAY, localizar la transacción incidentada y lanzar manualmente la notificación. Es importante que el Cliente-Integrador informe como mínimo una dirección de email para recibir estos avisos, a través ldel dashboard INESPAY, sección Configuración/Notificaciones.

IP La dirección IP fija del sistema notificaciones de INESPAY es 52.209.221.251.

La notificación de un pago OK incorpora los siguientes parámetros:

Parámetro Tipo Descripción
dataReturn String (JSON) Se encuentra codificado en Base64 y contiene los parámetros del pago:
    status String Código de éxito (200)
    description String Descripción del código status
    transactionId String Identificador único del pago en los sistemas INESPAY
    subject String Concepto del pago
    amount Number Importe del pago mutiplicado por 100, sin decimales
    reference String Identificador único de la orden de pago o del pedido asignado por el Cliente-Integrador
    dateInitPayment Number Timestamp en milisegundos. Zona horaria UTC
    accountDestiny String IBAN de destino al que se han transferido los fondos de la orden de pago
    holderOrigin String Titular del IBAN desde el que se ha ejecutado el pago (nombre del ordenante del pago). En caso de que la entidad bancaría no proporcione puntualmente dicha información este parámetro presentará el valor null. Dependiendo de la entidad financiera, el valor de este parámetro puede tener el formato: Nombre Apellido1 Apellido2 o Apellido1 Apellido2 Nombre
    accountOrigin String IBAN del Cliente-Pagador desde el que se ha realizado el pago (número IBAN del ordenante del pago). En caso de que la entidad bancaría no proporcione puntualmente dicha información este parámetro presentará el valor null
    customData String Datos devueltos por INESPAY al Cliente-Integrador que han sido previamente informados en la llamada API de inicio de pago
signatureDataReturn String Firma de dataReturn calculada con el algoritmo HmacSHA256, utilizando como clave la APIKEY proporcionada por INESPAY y codificada en base64

Verificación respuesta (Firma)

Por motivos de seguridad, es obligatorio calcular la firma de los datos devueltos en dataReturn y compararla con la firma devuelta por INESPAY en signatureDataReturn. Al calcular la firma de los datos devueltos por INESPAY verificamos la integridad y la autenticidad de los datos. En caso de que la firma calculada coincida con signatureDataReturn, garantizamos que los datos no han sido manipulados ni alterados o proceden de otras fuentes. Para el cálculo de la firma se debe utilizar la API-KEY proporcionada por INESPAY.

A continuación detallamos el proceso para realizar el cálculo de la firma:

  1. Aplicamos el algoritmo HmacSHA256 directamente sobre dataReturn codificado en Base64, utilizando como clave la API-KEY proporcionada por INESPAY. De esta forma obtenemos el hash de dataReturn
  2. Convertimos a minúsculas el hash obtenido en una cadena de texto hexadecimal
  3. Codificamos el resultado del punto anterior en Base64 y obtenemos la firma calculada
  4. Comparamos la firma calculada con el parámetro signatureDataReturn devuelto en el Callback:
    • Si firma calculada == signatureDataReturn, nos aseguramos que la respuesta procede de INESPAY (OK)
    • Si firma calculada != signatureDataReturn, los datos han sido alterados por un tercero y no son válidos (KO)

Servicios Adicionales

Consulta de órdenes de pago

Este servicio opcional se utiliza como consulta de los enlaces de pago generados. Puede utilizarse por aquellos clientes/integradores que deseen recibir el estado y la información de una orden de pago en cualquier momento.

Petición de consulta de una orden de pago por Identificador

Entorno Tipo URL
SANDBOX (Pruebas) POST https://apiflow.inespay.com/san/info/payment-order
PRODUCCIÓN POST https://apiflow.inespay.com/pro/info/payment-order

Header

Parámetro Descripción
X-Api-Key API-KEY proporcionada por INESPAY
Authorization API-TOKEN proporcionada por INESPAY
Content-Type application/json

Body

Parámetro Requerido Tipo Descripción
idDebt String Identificador único de la orden de pago devuelto por INESPAY en la petición API de inicio de pago (idDebt) o en el callback (transactionId)

Respuesta a la petición de consulta de una orden de pago por Identificador

Parámetro Tipo Descripción
paymentOrders Array (PaymentOrder) Array de elementos PaymentOrder, devolverá 1 elemento si existe la orden de pago o un array vacío [] si no existe.
status String Código de éxito (200) o error
description String Descripción del código status

Estructura PaymentOrder

Parámetro Tipo Descripción
idDebt String Identificador único de la orden de pago
enabled Boolean Indica si el enlace de pago se encuentra activo (puede utilizarse por el Cliente-Pagador) o inactivo (ya no puede utilizarse). Puede activar o desactivar enlaces de pago en cualquier momento utiliza el servicio Activar/Desactivar órdenes de pago.
amount Number Importe de la orden de pago mutiplicado por 100, sin decimales
subject String Concepto de la orden de pago
reference String Identificador interno de la orden de pago asignado inicialmente por el Cliente-Integrador
holderDestiny String Titular del IBAN de destino (beneficiario)
accountDestiny String Número IBAN destino de la transferencia
customRecipient String Nombre del beneficiario del pago que se mostrará al Cliente-Pagador en la aplicación web Transferencia Bancaria PSD2
customData String Campo personalizable informado por el Cliente-Integrador en la llamada API de inicio de pago
urlLong String Enlace de pago
urlShort String Enlace de pago recortado
urlShortClicks Number Número de pulsaciones (clics) realizados sobre sobre el enlace de pago (urlShort)
codStatus String Estado de la orden de pago. Listado de estados.
periodicOriginAccount  String IBAN del Cliente-Pagador, en caso de haberse solicitado el inicio de un pago periódico
periodicFrequency  String Frecuencia de ejecución del pago periódico, en caso de haberse solicitado el inicio de un pago periódico
periodicStartDate  String Fecha de inicio del pago, en caso de haberse solicitado el inicio de un pago periódico
periodicEndDate  String Fecha final del pago, en caso de haberse solicitado el inicio de un pago periódico
periodicExecutionRule  String Regla de ejecución del pago, en caso de haberse solicitado el inicio de un pago periódico. Valor por defecto: following
periodicDayOfExecution  String Día de ejecución del pago, en caso de haberse solicitado el inicio de un pago periódico. Este valor se recoge del mismo día informado en periodicStartDate
createAt Number Fecha de creación del enlace de pago, en formato milisegundos
updateAt Number Fecha de actualización del enlace de pago, en formato milisegundos
expireAt Number Fecha de caducidad del enlace de pago, en formato milisegundos

Petición de consulta de órdenes de pago por fecha

Entorno Tipo URL
SANDBOX (Pruebas) POST https://apiflow.inespay.com/san/info/payment-orders
PRODUCCIÓN POST https://apiflow.inespay.com/pro/info/payment-orders

Header

Parámetro Descripción
X-Api-Key API-KEY proporcionada por INESPAY
Authorization API-TOKEN proporcionada por INESPAY
Content-Type application/json

Body

Parámetro Requerido Tipo Descripción
dateFrom String Fecha en formato milisegundos UTC
dateTo No Number Fecha en formato milisegundos UTC. Si no se especifica, se realiza la búsqueda hasta la fecha actual
pageRequest String Número de página solicitada. La primera página es siempre la número 1
pageSize No String Número máximo de elementos devueltos por página. Si no se especifica, el tamaño de página por defecto es de 50 elementos. El máximo valor admitido es 300
orderAsc No Boolean Tipo de ordenación por fecha de creación: true=ASC o false=DESC

Respuesta a la petición de consulta de órdenes de pago por fecha

Parámetro Tipo Descripción
itemsReturned Number Número de elementos (paymentOrders) devueltos en la página actual
currentPage Number Número de página actual
totalItems Number Número total de elementos (paymentOrders). Es la suma de los elementos de todas las páginas
totalPages Number Número total de páginas existentes
paymentOrders Array (PaymentOrder) Array de elementos PaymentOrder
status String Código de éxito (200) o error
description String Descripción del código status

Activar/Desactivar enlaces de pago

Este servicio opcional permite al Cliente-Integrador activar o desactivar enlaces de pago, permitiendo al Cliente-Pagador hacer uso de los mismos o no.

Petición de activación/desactivación de enlaces de pago

Entorno Tipo URL
SANDBOX (Pruebas) POST https://apiflow.inespay.com/san/update/enable-disable-payment-order
PRODUCCIÓN POST https://apiflow.inespay.com/pro/update/enable-disable-payment-order

Header

Parámetro Descripción
X-Api-Key API-KEY proporcionada por INESPAY
Authorization API-TOKEN proporcionada por INESPAY
Content-Type application/json

Body

Parámetro Requerido Tipo Descripción
idDebt String Identificador único de la orden de pago devuelto por INESPAY en la petición API de inicio de pago (idDebt) o en el callback (transactionId)
enable Boolean true = enlace de pago activado, false = enlace de pago desactivado

Respuesta a la petición de activación/desactivación de órdenes de pago

Parámetro Tipo Descripción
status String Código de éxito (200) o error
description String Descripción del código status

Generación de fichero de devoluciones

Este servicio permite generar un fichero de transferencias (formato CSB34) que podrá tramitar a través de su Entidad Financiera para devolver órdenes de pago procesadas por INESPAY, permitiendo informar un importe y concepto diferentes. Una vez generado el fichero, puede proceder a su envío a través de su banca online. En función de la entidad financiera con la que trabaje, es posible que le requiera la contratación del servicio de tramitación de ficheros de pagos o transferencias SEPA (CSB34), informándole de un código de Emisor/Presentador (generalmente coincidente con el NIF/CIF) y un sufijo (generalmente 000).

Entorno Tipo URL
SANDBOX (Pruebas) POST https://apiflow.inespay.com/san/refund/sepa-xml
PRODUCCIÓN POST https://apiflow.inespay.com/pro/refund/sepa-xml

Header

Parámetro Descripción
X-Api-Key API-KEY proporcionada por INESPAY
Authorization API-TOKEN proporcionada por INESPAY
Content-Type application/json

Body

Parámetro Requerido Tipo Descripción
debtorIdFromBank String Código de Emisor/Presentador (generalmente coincide con el NIF/CIF) y un sufijo (generalmente 000) facilitado por la entidad bancaria. (P. Ej: B99999999001)
debtorBic String BIC correspondiente a la entidad financiera del Cliente-Integrador
debtorIban String IBAN del Cliente-Integrador en la que se realizará el cargo de las transferencias
debtorName String Nombre del Cliente-Integrador (Ordenante)
paymentOrders Array (PaymentOrder) Array de órdenes de pago a transferir
batchBooking No Boolean Identificador de cargo único en la cuenta bancaria: Cargo único = true; múltiples cargos individuales = false. En caso de no informarse, u valor por defecto es false

Array (PaymentOrder)

Parámetro Tipo Descripción
idDebt String Identificador único de la orden de pago devuelto por INESPAY en la petición API de inicio de pago (idDebt) o en el callback (transactionId)
amount String Importe de la devolución mutiplicado por 100, sin decimales. Puede ser inferior al importe original de la orden de pago pero no puede ser superior
subject String Concepto de la transferencia (P. Ej: Devolución factura). Tamaño máximo: 160 caracteres

Respuesta a la petición

Parámetro Tipo Descripción
xml String XML en formato SEPA (CSB34). Las comillas dobles (“) se encuentran escapadas mediante la barra invertida (\)
status String Código de éxito (200) o error
description String Descripción del código status

Códigos de respuesta

Listado de códigos de estado y error devuelto por la API Transferencia Bancaria PSD2.

Código Descripción Información
200 OK_DEFAULT Éxito petición API (OK)
E300 ERROR_DEFAULT Error genérico (KO)
E301 INVALID_PARAMS Error parámetros incorrectos

Librerías API (SDK)

Con el objetivo de facilitar la integración de la API Transferencia Bancaria PSD2, se proporciona una librería que facilita y simplifica la integración de la misma, de forma que sólo es necesario copiar y pegar unas sencillas líneas de código.

PHP

Descargar SDK PHP API PAYFLOW v1.0.8

Pago simple

Permite generar pagos en tiempo real con una cuenta bancaria de destino fija asociada al Cliente-Integrador, informada y validada en el Dashboard de Inespay. El enlace de pago emitido tiene una validez de 30 minutos desde que es generado.

Pago simple
------------
<?php
require_once('InespayApiPublic.php');

$environmentApiInespay = InespayApiPublic::ENV_SAN; //Sandbox (pagos fictícios)
//$environmentApiInespay = InespayApiPublic::ENV_PRO; //Producción (pagos reales)
$apiKeyInespay = 'APIKEY API Transferencia Bancaria PSD2';
$tokenInespay = 'TOKEN API Transferencia Bancaria PSD2';

$apiInespay = new InespayApiPublic();
$apiInespay->setEnvironmentInespay($environmentApiInespay);
$apiInespay->setApiKeyInespay($apiKeyInespay);
$apiInespay->setTokenInespay($tokenInespay);

//Campos a rellenar dinámicamente
$apiInespay->setSubject('Prueba pago simple INESPAY');   //Concepto del pago
$apiInespay->setAmount(1.99);                //Importe con 2 decimales separados por un punto
$apiInespay->setReference('ID_2022_AP');     //Identificador interno del pago personalizable por el Cliente-Integrador  

//Opcionales
$apiInespay->setUrlOk('https://www.example.com/ok.php'); //Url retorno éxito
$apiInespay->setUrlError('https://www.example.com/error.php'); //Url retorno error
$apiInespay->setUrlNotif('https://www.example.com/notif.php'); //Url notificación (Callback)
$apiInespay->setCustomData("Custom data personalizado");

$response = $apiInespay->generateSimplePaymentUrl(); //Llamada síncrona API Transferencia Bancaria PSD2

if ( $response->getStatusCode() == InespayApiPublic::STATUS_CODE_SUCCESS){
    //Éxito generación URL de pago firmada
    echo $response->getUrlSigned();
}else{
    //Error generación URL
}
?>

Notificación del Estado de la Transacción (Callback)

Verificación de la firma de los datos enviados por INESPAY para asegurar que la respuesta procede de INESPAY y no han sido alterados. Esta verificación se debe realizar siempre por el Cliente-Integrador de la API en su lado de servidor.

Notificación del Estado de la Transacción (Callback)
-----------------------------------------------------
<?php
require_once('InespayApiPublic.php');

$apiKeyInespay = 'APIKEY API Transferencia Bancaria PSD2';
$apiInespay = new InespayApiPublic();
$apiInespay->setApiKeyInespay($apiKeyInespay);

//Params received in POST    
if (!empty( $_POST )) {

       $apiInespay->setDataReturn($_POST['dataReturn']);
       $apiInespay->setSignatureDataReturn($_POST['signatureDataReturn']);

        //Firma OK, la respuesta ha sido enviada por INESPAY
        if ($apiInespay->isDataReturnValid()){
            echo "<p>FIRMA OK, realizar tareas en el Cliente Final</p>";
            echo "<p>status=".$apiInespay->getStatusFromDataReturn()."</p>";
            echo "<p>description=".$apiInespay->getDescriptionFromDataReturn()."</p>";
            echo "<p>amount=".$apiInespay->getAmountFromDataReturn()."</p>";
            echo "<p>reference=".$apiInespay->getReferenceFromDataReturn()."</p>";
            echo "<p>transactionId=".$apiInespay->getTransactionIdFromDataReturn()."</p>";
            echo "<p>customData=".$apiInespay->getCustomDataFromDataReturn()."</p>";

        } else {
            echo "<p>FIRMA KO, firma inválida revise los parámetros</p>";
        }
    }
?>

Pago periódico

Permite generar órdenes de pago periódicas. El enlace de pago emitido tiene una validez de 30 minutos desde que es generado.

Pago periódico
---------------
<?php
require_once('InespayApiPublic.php');

$environmentApiInespay = InespayApiPublic::ENV_SAN; //Sandbox (pagos fictícios)
//$environmentApiInespay = InespayApiPublic::ENV_PRO; //Producción (pagos reales)
$apiKeyInespay = 'APIKEY API Transferencia Bancaria PSD2';
$tokenInespay = 'TOKEN API Transferencia Bancaria PSD2';

$apiInespay = new InespayApiPublic();
$apiInespay->setEnvironmentInespay($environmentApiInespay);
$apiInespay->setApiKeyInespay($apiKeyInespay);
$apiInespay->setTokenInespay($tokenInespay);

//Campos a rellenar dinámicamente
$apiInespay->setSubject('Prueba pago periódico INESPAY');   //Concepto del pago
$apiInespay->setAmount(1.10);                //Importe con 2 decimales separados por un punto
$apiInespay->setReference('PE_2021_FO');     //Identificador interno del pago personalizable por el Cliente-Integrador
$apiInespay->setFrequency('Monthly');    
$apiInespay->setDebtorAccount('ES2501822200160201933547'); //Sanbox debtorAccount
$apiInespay->setStartDate('2021-12-01');

//Opcionales
$apiInespay->setUrlOk('https://www.example.com/ok.php'); //Url retorno éxito
$apiInespay->setUrlError('https://www.example.com/error.php'); //Url retorno error
$apiInespay->setUrlNotif('https://www.example.com/notif.php'); //Url notificación (Callback)
$apiInespay->setCustomData("Custom data personalizado");
$apiInespay->setEndDate('2022-12-01');

$response = $apiInespay->generatePeriodicPaymentUrl(); //Llamada síncrona API Transferencia Bancaria PSD2

if ( $response->getStatusCode() == InespayApiPublic::STATUS_CODE_SUCCESS){
    //Éxito generación url de pago firmada
    echo $response->getUrlSigned();
}else{
    //Error generación url
}
?>

Cancelación pago periódico

Permite cancelar órdenes de pago periódicas que se han generado previamente con el servicio de Alta de Pagos Periódicos.

Cancelación pago periódico
---------------------------
<?php
require_once('InespayApiPublic.php');

$environmentApiInespay = InespayApiPublic::ENV_SAN; //Sandbox (pagos fictícios)
//$environmentApiInespay = InespayApiPublic::ENV_PRO; //Producción (pagos reales)
$apiKeyInespay = 'APIKEY API Transferencia Bancaria PSD2';
$tokenInespay = 'TOKEN API Transferencia Bancaria PSD2';

$apiInespay = new InespayApiPublic();
$apiInespay->setEnvironmentInespay($environmentApiInespay);
$apiInespay->setApiKeyInespay($apiKeyInespay);
$apiInespay->setTokenInespay($tokenInespay);

//Campos a rellenar dinámicamente
$apiInespay->setDebtId('XXXXXXXX-XXXX-XXXX-XXXXXXXXXXXXXXXX');
$apiInespay->setReference('CP_2021_CANCEL'); 
$response = $this->apiInespay->generateCancelPeriodicPaymentUrl(); //Llamada síncrona API Transferencia Bancaria PSD2

//Opcionales
$apiInespay->setUrlOk('https://www.example.com/ok.php'); //Url retorno éxito
$apiInespay->setUrlError('https://www.example.com/error.php'); //Url retorno error
$apiInespay->setUrlNotif('https://www.example.com/notif.php'); //Url notificación
$apiInespay->setCustomData("Custom data personalizado");

$response = $apiInespay->generateCancelPeriodicPaymentUrl(); //Llamada síncrona API Transferencia Bancaria PSD2

if ( $response->getStatusCode() == InespayApiPublic::STATUS_CODE_SUCCESS){
    //Éxito generación url de pago firmada
    echo $response->getUrlSigned();
}else{
    //Error generación url
}
?>