Seite 1 von 1
Einmal Link
Verfasst: Do 7. Aug 2025, 00:16
von Volker
Ihr sehr ich bin sehr fleißig wie ihr seht
Meine Idee: Einen Link zu senden , per mail z.B. der nur einmal verwendbar ist. Quasi ein Einmal Link.
Z.B. wenn ich ein Script verkaufe und der Empfänger es runter laden soll, aber eben nicht so oft er will oder den Link weitergeben usw.
Mein Ansatz: Ein PHP Script was einen token an die Datei hängt und über ein downloadscript runter ladbar ist.
Hier mal ein Test:
https://www.niederastroth.de/token/down ... 60e70c4939
Das ist das Bild was hier zu sehen ist. Es kann nur einmal runter geladen werden. wer danach auf den Link klickt bekommt eine Fehlermeldung :-)
Ich glaube das kann man brauchen

oder?
Ja da hat es schon jemand runter geladen ..sehe ich in meinem Dashboard:
https://www.niederastroth.de/token/down ... 7fc80aa841
https://www.niederastroth.de/token/down ... df24000030
https://www.niederastroth.de/token/down ... 4b0367ca04
Re: Einmal Link
Verfasst: Do 7. Aug 2025, 04:26
von Tommy Herrmann
Moin,
ich müsste darüber nachdenken. Es könnte nützlich sein, ist aber wahrscheinlich eher lästig. Schnell hat man etwas verlegt oder versehentlich gelöscht. Besonders wenn man für etwas bezahlt hat, sollte man weiterhin Zugang zum Download haben.
Meiner Meinung nach gehören solche Downloads in ein geschütztes Verzeichnis, auf das nur der berechtigte Nutzer Zugriff hat.
Am Ende des Tages muss man ein Script nicht erneut herunterladen, um es unerlaubt und gesetzeswidrig an Dritte weiterzugeben; stattdessen reicht es, das eigene Script einfach zu kopieren. Aus diesem Grund verkaufen die meisten Softwarefirmen, darunter auch Mobirise, ihre Scripts nicht mehr direkt, sondern kontrollieren die Nutzung über eine gültige Lizenz.
Re: Einmal Link
Verfasst: Do 7. Aug 2025, 08:48
von zen2cool
Hallo
Ich habe einen ähnlichen Code, der aber lediglich eine IPN-Rückmeldung von PayPal in einer Datenbank speichert und zeitlich begrenzten Zugriff auf ein Verzeichnis gewährt.
https://forums.mobirise.com/discussion/ ... ent_122108
Code: Alles auswählen
<?php
// Ce script reçoit les notifications IPN de PayPal
// et met à jour la base de données si le paiement est validé
require_once "config.php";
// Lire les données brutes de PayPal
$raw_post_data = file_get_contents('php://input');
$raw_post_array = explode('&', $raw_post_data);
$myPost = array();
foreach ($raw_post_array as $keyval) {
$keyval = explode('=', $keyval);
if (count($keyval) == 2) {
$myPost[$keyval[0]] = urldecode($keyval[1]);
}
}
// Ajouter 'cmd=_notify-validate'
$req = 'cmd=_notify-validate';
foreach ($myPost as $key => $value) {
$value = urlencode($value);
$req .= "&$key=$value";
}
// Poster la requête de validation à PayPal
$ch = curl_init('https://ipnpb.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
curl_setopt($ch, CURLOPT_CAINFO, __DIR__ . '/cert/cacert.pem');
$res = curl_exec($ch);
curl_close($ch);
if (strcmp($res, "VERIFIED") == 0) {
// Paiement validé par PayPal
$payer_email = $_POST['payer_email'];
$custom = $_POST['custom']; // Contient l'id de l'utilisateur
$payment_status = $_POST['payment_status'];
if ($payment_status === 'Completed') {
$stmt = $conn->prepare("UPDATE pdfsecure SET has_paid = 1 WHERE id = ?");
$stmt->bind_param("i", $custom);
$stmt->execute();
}
} else {
// Erreur ou tentative frauduleuse
file_put_contents("ipn_error.log", date("Y-m-d H:i:s") . " : Échec IPN
", FILE_APPEND);
}
?>
Code: Alles auswählen
<?php
session_start();
require_once "config.php";
if (!isset($_SESSION["user_id"])) {
die("Accès refusé.");
}
$id = $_SESSION["user_id"];
$stmt = $conn->prepare("SELECT has_paid, date_achat FROM pdfsecure WHERE id = ?");
$stmt->bind_param("i", $_SESSION["user_id"]);
$stmt->execute();
$result = $stmt->get_result();
$user = $result->fetch_assoc();
if (!$user["has_paid"]) {
die("Vous n'avez pas accès au téléchargement.");
}
// Calcul expiration
$date_achat = strtotime($user["date_achat"]);
$now = time();
$diff = $now - $date_achat;
if ($diff > DOWNLOAD_VALIDITY_DURATION) {
// Optionnel : désactive l'accès
$stmt = $conn->prepare("UPDATE pdfsecure SET has_paid = 0 WHERE id = ?");
$stmt->bind_param("i", $_SESSION["user_id"]);
$stmt->execute();
$date_expiration = date("d/m/Y H:i", strtotime($user["date_achat"]) + DOWNLOAD_VALIDITY_DURATION);
die("Your link expired on $date_expiration. Contact support");
}
$allowed_files = ['ebook.pdf', 'ebook2023.pdf', 'ebook2024.pdf'];
$file = basename($_GET['file']);
if (!in_array($file, $allowed_files)) {
die("Unauthorized file.");
}
$path = __DIR__ . '/fichiers/' . $file;
if (!file_exists($path)) {
die("File not found.");
}
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="' . $file . '"');
readfile($path);
exit;
Dies ist ein Add-on, das ich gerade für mein Admin-Panel (digitaler Einkauf) fertigstelle.
Re: Einmal Link
Verfasst: Do 7. Aug 2025, 10:12
von zen2cool
Schauen Sie sich hier den digitalen Shop an, ich bin gerade dabei, ihn fertigzustellen. Sie werden ein Beispiel für einen Shop und auch den Verwaltungsteil haben
https://www.unsitepourtous.be/mobi/Addo ... npanel.php