Marketplace y licencias
El Marketplace del portal ofrece a tu comercio lo que FINORA publica: aplicativos (AuroraPOS, FINORA Caja, FINORA Pago, Agente ECR), SDK, actualizaciones, licencias y documentación. Cada artefacto lleva plataforma, arquitectura, SHA-256, sello de certificación y el motivo por el que lo ves.
Derecho de descarga
Una versión te aparece si está activa y certificada y además una de estas cosas es cierta:
- es pública;
- hay una política de distribución dirigida a tu comercio;
- hay una política dirigida a un modelo de terminal que posees (por ejemplo, un APK solo para un modelo concreto de terminal);
- tienes una licencia vigente para ese producto.
El motivo viene en cada tarjeta (motivo: PUBLICO, POLITICA_COMERCIO, POLITICA_MODELO, LICENCIA). Si algo no te aparece, no es un error de la página: pídelo al operador.
Descargar por API (portal)
Desde tu propio software, con el token del usuario del portal (OAuth2), puedes automatizar la bajada:
# 1) Ver lo publicado
curl -s https://pos.finoracore.com/api/v1/portal/marketplace -H "Authorization: Bearer $TOKEN_PORTAL"
# 2) Pedir un enlace firmado (5 minutos) para una versión
curl -s -X POST https://pos.finoracore.com/api/v1/portal/marketplace/versiones/101/descarga -H "Authorization: Bearer $TOKEN_PORTAL"
# → 201 {"url":"https://pos.finoracore.com/api/v1/portal/descargas/<token>","expiraEn":"…","expiraEnSegundos":300,"nombreArchivo":"aurorapos-1.10.2.apk","tamanoBytes":48234112,"checksumSha256":"3f7a…"}
# 3) Bajar el binario (sin cabeceras: la firma es la autenticación) y verificar la huella
curl -sL -o aurorapos.apk "<url>"
sha256sum aurorapos.apk
El enlace es base64url(carga).base64url(HMAC-SHA256) con versión, comercio, usuario, vencimiento y nonce. Antes de entregar, el Merchant vuelve a comprobar tu derecho y registra la descarga (origen = PORTAL_WEB). Errores: 403 ENLACE_INVALIDO, 410 ENLACE_VENCIDO (pide otro), 403 SIN_DERECHO_DE_DESCARGA, 503 ARTEFACTO_NO_DISPONIBLE.
Compara siempre el SHA-256 del archivo con el de la ficha antes de instalarlo en un terminal. La ficha lo trae copiable; la descarga lo repite en la cabecera X-Checksum-SHA256.
Licencias
Una licencia es un artefacto de primera clase: FIN-<APP>-<32 caracteres> firmado con HMAC sobre a quién, de qué y hasta cuándo. Editar la vigencia sin reemitir invalida la firma. Estados: EMITIDA → ACTIVA (primera validación) · REVOCADA · VENCIDA. Las tuyas están en Licencias.
Cómo la valida un terminal
La app (AuroraPOS, o la tuya si distribuyes software licenciado por FINORA) pregunta al Merchant con el token del dispositivo. El comercio es el del token; el dispositivo se resuelve por su serial.
curl -s "https://pos.finoracore.com/api/v1/pos/licencias/validar?app=AURORAPOS" -H "Authorization: Bearer $DEVICE_TOKEN"
{ "app": "AURORAPOS", "estado": "VALIDA", "valida": true, "validaHasta": "2026-12-31", "maxDispositivos": 2, "estadoLicencia": "ACTIVA" }
Siempre responde 200 con el veredicto (una licencia vencida es una respuesta, no un error); 401 solo si el token no vale; 400 si falta app.
estado ∈ VALIDA · SIN_LICENCIA · REVOCADA · VENCIDA · NO_VIGENTE_AUN · FIRMA_INVALIDA · DISPOSITIVO_NO_AUTORIZADO · TOPE_DISPOSITIVOS. El orden de evaluación es ese: si todas las licencias del par están revocadas se responde REVOCADA, no SIN_LICENCIA (para el comercio no es lo mismo «nunca tuvo» que «se la quitaron»).
const v = await fetch("https://pos.finoracore.com/api/v1/pos/licencias/validar?app=AURORAPOS", { headers: { Authorization: `Bearer ${deviceToken}` } }).then((r) => r.json());
if (!v.valida) bloquearPantalla(v.estado); // VENCIDA, REVOCADA, TOPE_DISPOSITIVOS…
var res = client.send(HttpRequest.newBuilder(URI.create("https://pos.finoracore.com/api/v1/pos/licencias/validar?app=AURORAPOS"))
.header("Authorization", "Bearer " + deviceToken).GET().build(), HttpResponse.BodyHandlers.ofString());
boolean valida = new ObjectMapper().readTree(res.body()).get("valida").asBoolean();
var v = await http.GetFromJsonAsync<JsonElement>("https://pos.finoracore.com/api/v1/pos/licencias/validar?app=AURORAPOS");
bool valida = v.GetProperty("valida").GetBoolean();
Lo que ve el comercio
- Marketplace: destacado, rieles por tipo, ficha con novedades, requisitos, SHA-256 e historial de versiones; «Nuevo» cuando la versión supera la última que tu comercio bajó.
- Mis descargas: quién bajó qué, cuándo y desde dónde.
- Licencias: vigencia, tope de terminales y serial cuando la licencia está atada a un equipo.