Puedes hacer una copia temporal del fichero que se borre cuando se ha descargado una vez.... no se como se hace. O pedir al usuario que se loguee antes de mostrar el enlace ....
O la otra opción que te daba, una vez has cobrado muestras el link siempre que se mantenga la sesión, y el link a una copia temporal usando por ejemplo el id de la sesion para darle nombre, si la sesion no coincide no se baja.... y obviamente tendras que crear un proceso para borrar esos temporales..... me suena como que hay algo de ficheros temporales ligados a la sesión con lo que se borran al cerrarla ... pero lo digo de memoria.
Pero si el que te ha comprado quiere dar el fichero a otra persona lo puede hacer directamente no mandando el link si no el fichero directamente.
Detectar el final de una descarga parece que se puede detectar cuando finaliza la descarga, luego en ese momento debes borrar la copia temporal.