DRMasterChief Posted August 15 Posted August 15 (edited) Hallo, ...der Widerrufsbutton wird ja Pflicht ab 19. Juni 2026 https://www.bmjv.de/SharedDocs/Pressemitteilungen/DE/2025/0709_Widerrufsbutton.html Benötigt wird also eine elektronische Schaltfläche, mit der Verbraucher Verträge online widerrufen können – einfach, direkt und ohne Umwege. Ziel: Der Widerruf soll so einfach wie der Vertragsabschluss sein – mit einem Klick. Wie lösen wir das in ThirtyBees? Gibt es dazu schon Gedanken bzw. arbeitet jemand an einer Lösung? Es würde ja genügen, das vorhandene Kontaktformular zu nutzen oder zu kopieren und dafür zur Verfügung zu stellen. So bekommt man ggf. auch den automatischen Versand der E-Mail-Bestätigung hin. Es ist mal wieder die gesamte EU betroffen, wobei die Umsetzungen in manchen Ländern wohl wieder lockerer genommen werden. Edited August 15 by DRMasterChief
nickz Posted August 16 Posted August 16 Ist doch gar nicht Schlecht. Vor allem weil die Papierpflicht wegfällt.
DRMasterChief Posted August 16 Author Posted August 16 naja Papier"pflicht" gab es ja nicht direkt, aber egal, wir müssen es halt irgendwie im Shopsystem umsetzen. Die "KI" schlägt mir vor, entweder das Kontaktformular inklusive allen Änderungen zu "kopieren" um es als Widerrufsformular/-button zu nutzen und im CMS-Teil zu platzieren. KI würde mir dazu auch mit dem Code helfen, oder 2. Vorschläge wäre ein eigenes kleines Modul zu schreiben bzw. von KI schreiben zu lassen, aber da bin ich zu unsicher und vertraue zu wenig 🤕
nickz Posted August 21 Posted August 21 On 8/16/2025 at 4:24 PM, DRMasterChief said: wir müssen es halt irgendwie im Shopsystem umsetzen. Das Doppel Opt-in funktioniert so: Ein Kunde schreibt sich ein, und du schickst ihm dann die Frage, ob er es wirklich will. TB schickt doch eh eine Mail bei Registrierung, das muss nur um die Frage der Bestätigung ergänzt werden.
DRMasterChief Posted August 27 Author Posted August 27 bist du beim neuen "Widerrufsbutton" oder irgendwo anders? Denn für den braucht es doch kein Double Opt-In....
nickz Posted August 30 Posted August 30 Bei Widerruf wahrscheinlich nicht. Doppel Opt in ist für Email marketing. Quote Double opt-in User signs up, then confirms their subscription via a link in a confirmation email. Slower process, but ensures higher quality leads and verifiable consent. This aligns with a discussion of the pros and cons of using double opt-in. Quelle https://www.suped.com/knowledge/email-deliverability/compliance/which-countries-require-double-opt-in-for-email-marketing-according-to-gdpr-and-best-practices
DRMasterChief Posted August 30 Author Posted August 30 ja, daher die Frage wie du hier darauf kommst? Hat doch mit dem Thema nichts zu tun.
DRMasterChief Posted December 21 Author Posted December 21 (edited) Hallo, hier noch mal die Frage ob schon jemand den Widerrufsbutton umgesetzt hat? Kann ggf. jemand und mit KI-Hilfe unterstützen, das Kontaktformular entsprechend zu kopieren und zu ändern? Edited December 21 by DRMasterChief
DRMasterChief Posted 13 hours ago Author Posted 13 hours ago (edited) Habe mal einen kleinen, (hoffentlich möglichst sauberen) neuen Controller dafür erstellt, Cloudflare Turnstile ist integriert, damit das nicht von Bots überschwemmt wird. Datei ist angehängt. Bitte mal prüfen wer davon Ahnung hat und mitarbeiten 🙂 <?php class WiderrufbutController extends FrontController { public $php_self = 'widerrufbut'; public $ssl = true; public function postProcess() { if (Tools::isSubmit('submitwiderrufbut')) { // 1) Turnstile prüfen $turnstileResponse = Tools::getValue('cf-turnstile-response'); if (!$turnstileResponse) { $this->errors[] = $this->trans('Bitte bestätigen Sie, dass Sie kein Roboter sind.'); return; } $secret = 'DEIN_SECRET_KEY'; $verify = file_get_contents('https://challenges.cloudflare.com/turnstile/v0/siteverify', false, stream_context_create([ 'http' => [ 'method' => 'POST', 'header' => "Content-Type: application/x-www-form-urlencoded\r\n", 'content' => http_build_query([ 'secret' => $secret, 'response' => $turnstileResponse, 'remoteip' => Tools::getRemoteAddr(), ]), ], ])); $result = json_decode($verify, true); if (empty($result['success'])) { $this->errors[] = $this->trans('Die Turnstile‑Prüfung ist fehlgeschlagen. Bitte erneut versuchen.'); return; } // 2) Formularfelder $from = Tools::getValue('from'); $order_reference = Tools::getValue('order_reference'); $message = Tools::getValue('message'); // 3) Validierung if (!Validate::isEmail($from)) { $this->errors[] = $this->trans('Bitte geben Sie eine gültige E-Mail-Adresse ein.'); return; } if (empty($message)) { $this->errors[] = $this->trans('Bitte geben Sie einen Widerrufstext ein.'); return; } // 4) Mailvariablen $mailVars = [ '{email}' => $from, '{order_reference}' => $order_reference, '{message}' => nl2br($message), ]; // 5) Mail an den Kundendienst Mail::Send( (int)$this->context->language->id, 'widerruf_admin', $this->trans('Neuer Widerruf'), $mailVars, Configuration::get('PS_SHOP_EMAIL'), null, $from ); // 6) Bestätigung an den Kunden Mail::Send( (int)$this->context->language->id, 'widerruf_customer', $this->trans('Ihr Widerruf wurde übermittelt'), $mailVars, $from, null, Configuration::get('PS_SHOP_EMAIL') ); // 7) Erfolg anzeigen $this->context->smarty->assign('confirmation', true); } } public function initContent() { parent::initContent(); $this->setTemplate(_PS_THEME_DIR_.'widerrufbut.tpl'); } } WiderrufbutController.php Edited 13 hours ago by DRMasterChief
DRMasterChief Posted 13 hours ago Author Posted 13 hours ago und eine einfache .tpl dazu, was sagt ihr was ok ist und was nicht? bin kein Profi... {capture name=path}{l s='Widerruf'}{/capture} <h1 class="page-heading bottom-indent"> {l s='Widerrufsformular'} </h1> {* Erfolgsmeldung *} {if isset($confirmation)} <p class="alert alert-success"> {l s='Ihr Widerruf wurde erfolgreich übermittelt.'} </p> <ul class="footer_links clearfix"> <li> <a class="btn btn-default button button-small" href="{$base_dir}"> <span><i class="icon-chevron-left"></i>{l s='Home'}</span> </a> </li> </ul> {else} {* Fehleranzeige *} {include file="$tpl_dir./errors.tpl"} <form action="{$link->getPageLink('widerrufbut')}" method="post" class="contact-form-box box"> <fieldset> <h3 class="page-subheading">{l s='Widerruf absenden'}</h3> <div class="clearfix"> <div class="col-xs-12 col-md-3"> {* E-Mail *} <p class="form-group"> <label for="email">{l s='Ihre E-Mail-Adresse'}</label> <input class="form-control grey validate" type="email" id="email" name="from" data-validate="isEmail" value="{$email|escape:'html':'UTF-8'}" required /> </p> {* Bestellnummer *} <p class="form-group"> <label for="order_reference">{l s='Bestellnummer (optional)'}</label> <input class="form-control grey" type="text" id="order_reference" name="order_reference" value="{Tools::getValue('order_reference')|escape:'html':'UTF-8'}" /> </p> </div> <div class="col-xs-12 col-md-9"> {* Nachricht *} <div class="form-group"> <label for="message">{l s='Ihr Widerruf'}</label> <textarea class="form-control" id="message" name="message" rows="8" required>{Tools::getValue('message')|escape:'html':'UTF-8'}</textarea> </div> {* Turnstile *} <div class="form-group"> <div class="cf-turnstile" data-sitekey="DEIN_SITE_KEY" data-theme="light"> </div> </div> </div> </div> <div class="submit"> <button type="submit" name="submitwiderrufbut" id="submitwiderrufbut" class="button btn button-medium"> <span>{l s='Widerruf absenden'}<i class="icon-chevron-right right"></i></span> </button> </div> </fieldset> </form> {/if} {* Turnstile Script *} <script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now