Ir al contenido
Volver a la documentación de Launch

Descargar MarkdownDocumento original en GitHub

Ejemplo de adaptador para el sistema de licencias del comerciante

Este ejemplo de Python 3.10+ implementa el puente HTTP externo de Launch con persistencia de eventos/nonces en SQLite y un worker de recuperación. No genera licencias, valida funciones protegidas ni sustituye su sistema de licencias.

Implemente un módulo de Python con estos hooks:

def apply_snapshot(snapshot):
    # Call your licensing system with snapshot["event_id"] as its durable
    # idempotency key. Apply desired_state and the absolute purchased dates.
    # Return only after confirming the original operation was applied.
    # Raise ValueError for a result requiring manual review.
    ...

def delivery(snapshot):
    # Read an existing result owned by this purchase; do not issue here.
    return {"type": "instructions", "value": "Your own delivery instructions", "expires_at": None}

Sustituya ... por una integración real antes de configurar un backend. Si no se configura un módulo de backend, los hooks incluidos lanzan NotImplementedError; los eventos pasan a revisión manual y nunca afirman que se haya emitido una autorización. El worker del ejemplo puede reintentar un hook tras un fallo del proceso o un error de resultado incierto; por tanto, su backend de licencias debe deduplicar o recuperar usando el mismo ID de evento.

Configure el adaptador mediante variables de entorno, manteniendo la clave fuera del control de versiones y del historial de la shell:

  • CUSTOM_LICENSING_KEY: codificación Base64 estándar de 32–128 bytes aleatorios, coincidente con Launch.
  • CUSTOM_LICENSING_KEY_ID: key-1 o el identificador de clave configurado.
  • CUSTOM_LICENSING_CONNECTION_REF: referencia de conexión coincidente.
  • CUSTOM_LICENSING_ENVIRONMENT: sandbox o live.
  • CUSTOM_LICENSING_DATABASE: ruta privada y escribible de SQLite fuera del directorio de trabajo del repositorio; consérvela entre reinicios.
  • CUSTOM_LICENSING_BACKEND: módulo importable que implementa los hooks anteriores.
  • CUSTOM_LICENSING_PORT: puerto de escucha local, 18883 por defecto.

Ejecute python server.py. Para pruebas sandbox locales, configure http://127.0.0.1:18883 en Launch y habilite explícitamente su excepción HTTP de bucle local. En producción, use terminación HTTPS, supervisión de procesos, copias de seguridad protegidas de la base de datos y la verificación del SDK/entorno de ejecución de su backend. Declare solo los tipos de compra/entrega que su backend admita realmente y adapte capabilities en consecuencia.

Después de corregir un problema del backend, python server.py --retry-event ORIGINAL_EVENT_UUID vuelve a poner en la cola local el mismo payload guardado. En la página de tareas de autorización de Launch, reintente también ese evento original. No cambie los ID ni añada tiempo otra vez para recuperar una respuesta.

El ejemplo es un punto de partida, no una certificación de preparación para producción. El lease del worker dura 60 segundos; limite las llamadas a hooks con un tiempo de espera inferior o renueve el lease. Añada supervisión, procedimientos de rotación, comprobaciones más estrictas de negocio/esquema y los controles operativos de su despliegue antes de aceptar compras live. La guía de integración y el OpenAPI definen el protocolo. Nunca use una respuesta de estado de Launch como permiso para ejecutar código protegido.