Acceso de clientes a facturas
Factulit puede alojar un portal de solo lectura con las facturas de un pedido. Tu servidor autentica al cliente local y llama a Factulit; el navegador solo recibe una URL aleatoria que caduca a los 30 minutos. Nunca expongas una API key en JavaScript, HTML, una redirección o un iframe.
Flujo recomendado
- En el historial de pedidos, envía hasta 50 identificadores externos a
POST /api/v1/order/invoice-availabilitydesde el servidor. Muestra “Ver facturas” solo para los elementosavailable. - Al pulsar, pasa por un controlador local protegido. Comprueba de nuevo que el cliente autenticado posee el pedido usando la autorización nativa del CMS.
- El controlador llama a
POST /api/v1/order/invoice-accessconpresentation: linky redirige aviewer_url. - Si la URL ha caducado, repite el paso 3. No la guardes como un campo permanente del pedido.
// Ejemplo server-side después de que el CMS autorice el acceso a $order.
$response = $http->post('/api/v1/order/invoice-access', [
'headers' => ['X-API-KEY' => getenv('FACTULIT_API_KEY')],
'json' => ['order_id' => (string) $order->externalId(), 'presentation' => 'link'],
]);
if ($response->getStatusCode() === 200) {
$data = json_decode($response->getBody(), true)['data'];
if ($data['state'] === 'available') {
redirect($data['viewer_url']);
}
}Un pedido desconocido devuelve 404; la función desactivada, 403; una entrada inválida o un origen de iframe no registrado, 422. Respeta 429, 503 y Retry-After. Un pedido conocido sin facturas entregables devuelve 200 con state: not_available.
Integraciones con iframe
Usa presentation: embed y envía el origen HTTPS exacto de la página que contendrá el iframe. Debe pertenecer previamente a la conexión o a su inventario multitienda; no se admiten comodines ni orígenes arbitrarios.
<!-- viewerUrl procede de tu backend; nunca se genera en el navegador. -->
<iframe src="<?= htmlspecialchars($viewerUrl) ?>" title="Facturas" loading="lazy"></iframe>El portal de enlace normal no puede cargarse en un frame. Los tokens son capacidades opacas: no registres la URL completa, no la envíes a analítica y no la compartas entre clientes. En pedidos de invitado solo se puede usar un flujo nativo con order key o sesión que ya demuestre la propiedad; en caso contrario se conserva el enlace enviado por email.
El titular puede desactivar esta función en Conexión → Acceso de clientes a facturas dentro de Factulit. Al desactivarla se invalidan inmediatamente las capacidades vigentes.