Finanpay
¿Qué es Finanpay?
Finanpay es un orquestador de los nuevos servicios digitales de compra, pago y financiación que ayudan a los comercios a vender más.
Conceptos
Alta de comercios
Antes de que un comercio pueda operar con Finanpay se tiene que llevar a cabo un proceso de alta. Este proceso de alta consiste en la presentación de información y documentació relativa al comercio. En resumen serían los siguientes puntos:
Empresas:
- Documento de identidad del dueño (En el caso que sea NIE de la UE solicitar también pasaporte)
- Certificado de titularidad bancaria
- Mod 200 (en el caso que no tenga pedir modelo 390 y si no tiene 390, solicitar los 303 de los trimestres del año corriente)
- Tarjeta de titularidad tributaria (CIF)
- Manifestación de titularidad real (documento del portal)
- Documento de identidad de las personas que figuren en el punto 5
- Extracto del Registro Mercantil desde los Registradores de España con fecha válida de menos de 3 meses
- Escrituras de constitución (Solo Soyou)
Importante: Si uno de los propietarios mayoritarios (>25% de la sociedad es una sociedad se deberá solicitar todos los documentos enumerados)
Autónomos:
- Documento de identidad (En el caso que sea NIE de la UE solicitar también pasaporte)
- Tarjeta de titularidad tributaria (Mod 036)
- IRPF
- Certificado de titularidad bancaria
Integración técnica
La integración consiste principalmente en la integración de un llamada API REST con un mensaje JSON que nos permitirá obtener una dirección web (url) que presentaremos en el navegador del consumidor.
Esta url llevará al consumidor a una página donde se le presentará el resumen de su compra y el simulador de cuotas.
Una vez haya seleccionado el plan de financiación que más se adapta a sus necesidades comenzará el proceso de validación. Este proceso de validación consistirá en los siguientes pasos:
- Solicitud de datos personales
- Capturar los datos de tarjeta para autenticar al titular y realizar el cobro de la primera cuota
- Informar al comercio para que pueda cerrar el pedido y distribuirlo
Una vez que el consumidor es considerado apto para recibir el préstamo, automáticamente se generará un plan de cobro recurrente mensual. El cobro de cuota será siempre el mismo día en el que se realizó el primer cobro.
El siguiente diagrama recoge los pasos explicados en esta sección:
Consejos
Es importante que el integrador se asegure que el carrito no sufre modificaciones una vez que se ha calculado el importe de la financiación.Es decir, la integración técnica debe ser capaz de bloquear el carrito para que ningún usuario puede añadir o borrar items que modifiquen el contenido e importe.
No implementar correctamente este punto conllevaría un riesgo adicional en la fase de concesión de la financiación pudiendo provocar rechazos en la misma y reduciendo el ratio de conversión del comercio asociado a un aspecto técnico y no de usabilidad.
Inicio rápido
El inicio rápido de la integración consiste en integrar la principal llamada API que devuelve un enlace web que lleva directamente al formulario para la simulación de cuotas y el onboarding del cliente.
Este enlace tendrá tres terminaciones posibles:
- Procesamiento correcto "success"
- Procesamiento fallido "failure"
- El usuario canceló la operación "cancel"
En el caso de "success", el comercio siempre tendrá que ejecutar una llamada de confirmación para cerrar la operación financiera y así poder cerrar el pedido en el sistema de venta del comercio.
Los detalles de integración del API pueden encontrarse en este vínculo. Revise en esta sección:
Primer paso: generar URL de financiación
POST /payment/api/v1/
El objetivo de este paso es obtener un request_id que permita realizar una confirmación de la operación. Para obtener dicho valor, el proceso debe terminar la URL del comercio preparada para recoger el estado OK. A nivel de integración esta URL se llamada payload.redirect_after.success.
Petición de ejemplo para una operación 300€:
Body
{
"key": "key-value",
"resource": "resource-value",
"mode": "sha256",
"nonce": "1234567890",
"payload": {
"amount": 30000,
"currency": "EUR",
"cart": {
"items": [{
"sku": "SKUVALUE1",
"tax": "1",
"name": "Item name 1",
"quantity": "2",
"amount": 70,
"image": "https://url_to_optional_item_image/",
"shipping": "2"
},
{
"sku": "SKUVALUE2",
"tax": "1",
"name": "Item Name 2",
"quantity": "2",
"amount": 70,
"image": "https://url_to_optional_item_image/",
"shipping": "2"
}
]
},
"redirect_after": {
"cancel": "http://httpbin.org/get?status=cancel",
"success": "http://httpbin.org/get?status=success",
"failure": "http://httpbin.org/get?status=failure"
}
}
Parámetro | Descripción |
---|---|
key | Identificador del comercio. |
mode | sha256 o sha512 según el algoritmo de la firma hmac empleado. |
resource | Identificador del recurso de configuración del comercio. |
nonce | Identificador único de la petición, permite controlar la duplicidad de datos. Se recomienda utilizar unix timestamp con el máximo nivel de precisión. |
payload | Objeto con los parámetros específicos de cada petición. |
payload.amount | Importe en formato entero y céntimos en la moneda elegida. Si la moneda es euro y queremos reflejar 20,25€, multiplacaremos por 100 para obtener 2025. |
payload.currency | Acrónimo ISO 4217 de la moneda. Ejemplo: EUR para euro. Ver más en https://es.wikipedia.org/wiki/ISO_4217. |
payload.redirect_after | Objeto con los parámetros que controlan la redirección final al comercio y que permite conocer el estado de la operación para continuar con el proceso de cierre de pedido. |
payload.redirect_after.success | La operación se ha completado con éxito y se puede proceder a la confirmación del cobro. La URL de este parámetro tendrá concatenado el valor de request_id en formto QueryString. Ejemplo: redirect_after.success=http://httpbin.org/get?status=success url final=http://httpbin.org/get?status=success&request_id=abcdefgh1234 |
payload.redirect_after.failure | La operación ha tenido algúna fallo en el procesamiento. La URL de este parámetro tendrá concatenado el valor de request_id en formto QueryString. Ejemplo: redirect_after.success=http://httpbin.org/get?status=failure url final=http://httpbin.org/get?status=failure&request_id=abcdefgh1234 |
payload.redirect_after.cancel | El usuario ha dado al botón de cancelar o de vuelta atrás en el formulario. La URL de este parámetro tendrá concatenado el valor de request_id en formto QueryString. Ejemplo: redirect_after.success=http://httpbin.org/get?status=cancel url final=http://httpbin.org/get?status=cancel&request_id=abcdefgh1234 |
Respuesta de ejemplo (truncado y simplificado):
Body
{
"type": "resource.status",
"code": "0",
"detail": "Successful payment request.",
"payload": {
"url": "https://sandbox.sipay.es/payment/api/v1/6242d085b19538c1ea4ccff1/fastpay",
"finanpay": {
"url": "http://localhost:8080/payment/api/v1/6242d085b19538c1ea4ccff1/finanpay",
"supports_card_data": false,
"supports_security_data": false,
"supports_tokenization": false,
"supports_refund": false,
"supports_recurring": false,
"available_card_capturers": [],
"supports_direct_payment": true,
"direct_url": "https://sandbox.sipay.es/payment/api/v1/6242d085b19538c1ea4ccff1/vivo/direct"
}
},
"request_id": "6242d085b19538c1ea4ccff1",
"uuid": "6242d085b19538c1ea4ccff1"
}
Deberemos utilizar el campo url y enviarlo al navegador para que el consumidor puede iniciar el proceso de financiación. El valor del request_id es importante almacenarlo porque nos permitirá realizar operaciones posteriores como:
- Confirmación de la operación
- Consulta de operación
Segundo paso: enviar información del cliente
En esta sección encontrarás como enviar los datos del cliente. Si no se envían los mínimos, no aparecerá el método de pago de financiación.
Tercer paso: confirmar operación
POST /payment/api/v1/{request_id}
Una vez que hemos recogido el valor del request_id, programaremos esta petición API para confirmar la operación y el plan de financiación.
Secret: test-secret
Headers
Content-Signature: c5150a4dd8f82ef243e9d84b3f362bc90a9adb7bf1c1d7bec474a485e2124273
Body
{
"key": "key-value",
"resource": "resource-value",
"mode": "sha256",
"nonce": "1234567890",
"payload": {
}
}
Parámetro | Descripción |
---|---|
key | Identificador del comercio. |
mode | sha256 o sha512 según el algoritmo de la firma hmac empleado. |
resource | Identificador del recurso de configuración del comercio. |
nonce | Identificador único de la petición, permite controlar la duplicidad de datos. Se recomienda utilizar unix timestamp con el máximo nivel de precisión. |
payload | Objeto con los parámetros específicos de cada petición. En este caso irá vacía porque es el ejemplo del inicio rápido y no es necesario personalizar nada más. |
Respuesta de ejemplo:
Body
{
"type": "resource.status",
"code": "0",
"detail": "Operation confirmed successfully",
"payload": {
...
}
},
"request_id": "6242d085b19538c1ea4ccff1",
"uuid": "6242d085b19538c1ea4ccff1"
}
El código 0 indicará que la operación se ha completado con éxito.