Обычно это происходит, когда покупка завершается успешно, серверный скрипт генерирует уникальный идентификатор загрузки (обычно некоторую длинную последовательность случайно сгенерированных цифр), связывает его с человеком, который его купил, сохраняет эту информацию в базы данных, а затем помещает ее в ссылку для скачивания и отправляет ее покупателю - либо на возвращенной веб-странице, либо по электронной почте.
Покупатель может перейти по той ссылке, которая приведет покупателя на ваш сервер. Сервер ищет уникальный идентификатор загрузки, который находится в URL-адресе, проверяет базу данных, решает, является ли он все еще допустимым идентификатором загрузки, и, если это так, возвращает этот фактический файл загрузки в браузер с правильным типом содержимого, чтобы браузер правильно делает с возвращенными данными.
Затем ваш сервер может решить, как долго он будет сохранять этот идентификатор загрузки действительным. Это может быть только для 1-3 использований (учитывая тот факт, что законный пользователь, загружающий, мог иметь сбой и должен был повторно загрузить его), это может быть только в течение определенного количества времени от покупки или от первой загрузки или любого другого Алгоритм, который вы думаете, соответствует потребностям вашего бизнеса. Вы можете устаревать устаревшие записи из БД либо с помощью хрон-задания, либо с помощью какой-либо обычной служебной функции, которую вы вызываете.
Извините, но я недостаточно знаю о вариантах внутренней интеграции в PayPal, чтобы знать, как интегрировать это в PayPal, но это общий рабочий процесс, который вам, вероятно, нужен. Если PayPal генерирует уникальный идентификатор транзакции, который является достаточно случайным для ваших нужд, вы можете даже использовать его в своем URL и базе данных.