Licensing & Activation

Licensing & Activation

QoinPay Enterprise is sold under a perpetual license. Once activated, the software runs indefinitely on the versions your entitlement covers — there is no subscription clock that switches the product off. Software Subscription & Support (S&S) is a separate, renewable agreement that governs your rights to new versions and support, and is covered in Software Subscription & Support.

From quote and order to entitlement, license key, and activation.
From quote and order to entitlement, license key, and activation.

From order to entitlement

A purchase moves through a fixed lifecycle. A quote becomes an order; the order is fulfilled as one or more entitlements recorded against your customer account in the QoinPay licensing portal. An entitlement is the authoritative statement of what you own: the product editions, the number of seats (concurrent activations), any optional modules, and the S&S coverage window.

From an entitlement the portal issues a license key in the form:

QPAY-7F3A9-2K8DL-QW4RT

The key is a human-transcribable identifier. It is not itself the license — it is the credential you present to redeem the machine-readable license file described next.

The .qplic file

Activation produces a .qplic file — a signed license container written to storage/license/current.qplic. It carries your entitlement details (product, edition, seats, S&S end date, feature flags) and a cryptographic signature the application verifies on every boot using an embedded QoinPay public key and the sodium extension. Because verification is offline and signature-based, the running application never needs to contact QoinPay to confirm it is licensed.

Do not edit the .qplic file; any modification invalidates the signature. Do back it up alongside APP_KEY — it is required to restore an installation, and for offline sites it is the only proof of entitlement on the host.

Online activation

Online activation is the default and the simplest path.

Online activation exchanges the key over TLS; offline activation moves a signed request and response by file.
Online activation exchanges the key over TLS; offline activation moves a signed request and response by file.
  1. In Settings → Licensing, enter your QPAY- key.
  2. The application computes a machine fingerprint (a stable hash derived from host attributes) and sends it with the key to the QoinPay license server over TLS.
  3. The server validates the key against the entitlement, checks that a seat is available, binds this fingerprint to a seat, and returns a signed .qplic file.
  4. The application writes the file and re-reads its entitlement immediately. Status becomes Active.

Offline (air-gapped) activation

For networks with no outbound access, the same result is achieved by moving two files by hand:

  1. On the QoinPay host, generate a signed activation request:
php bin/console license:request --key=QPAY-7F3A9-2K8DL-QW4RT --out=request.qpreq
  1. Carry request.qpreq to any internet-connected machine and upload it to the Offline Activation page of the licensing portal. The portal returns a current.qplic file.
  2. Install the file on the host:
php bin/console license:install --file=current.qplic

The request already contains the machine fingerprint, so the returned license is bound to exactly that host. No secrets leave your network in the clear — the request is signed and contains only the fingerprint and key.

Seats and fingerprint binding

Each entitlement grants a fixed number of seats. Every activation consumes one seat and binds it to the host's fingerprint. Re-activating the same host (for example after reinstalling to the same machine) reuses its existing binding and does not consume an additional seat.

When you decommission a host, deactivate it to release the seat:

php bin/console license:deactivate

Online, this frees the seat immediately. Offline, license:deactivate produces a signed release token to upload to the portal. If a host is lost before deactivation, an administrator can revoke the stale binding from the portal's seat list.

The fingerprint tolerates minor hardware changes but a major host change (new machine, virtualised migration to different underlying hardware) will present as a new fingerprint and require a fresh seat, so deactivate before migrating.

The heartbeat is advisory

An online installation periodically sends a heartbeat to the license server. This is a background job (dispatched by the cron worker) that reports liveness and lets the portal show which seats are active.

The heartbeat is strictly advisory. It never blocks the application. If heartbeats fail — because the network is down, the license server is unreachable, or the site is deliberately air-gapped — QoinPay continues to run normally on the strength of its locally verified .qplic file. A perpetual license is perpetual precisely because the running product depends only on the signed file it already holds, not on continuous contact. Heartbeat gaps surface only as an informational notice in the portal and, optionally, a low-severity banner for administrators.

What activation gates

The verified license controls edition-level and module feature flags — for example whether the Payments or Payroll module is enabled, and the seat ceiling. It does not gate on the S&S window for versions you are already entitled to run; installing a newer release than your S&S covers is the only version-related restriction, enforced at upgrade time. See Software Subscription & Support for how release dates map to your coverage.