Digitální a virtuální produkty
Modul 3: Produkty · Doba čtení: 11 minut
Cíl lekce: Po této lekci budete umět bezpečně prodávat digitální a virtuální produkty: zvolíte bezpečnou metodu stahování, ochráníte složku se soubory ke stažení, nastavíte limity a správně ošetříte právo odstoupit od smlouvy u digitálního obsahu.
Klíčové pojmy: virtuální produkt, produkt ke stažení, odkaz ke stažení, limit stahování, datum platnosti, metoda stahování (Vynutit stažení, X-Accel-Redirect/X-Sendfile, Pouze přesměrování), woocommerce_uploads, .htaccess, nginx, schválené adresáře pro stahování (Approved download directories), přístup po zaplacení, digitální obsah, výslovný souhlas, vzdání se práva odstoupit od smlouvy
Virtuální a ke stažení: dvě různá zaškrtávací políčka
U jednoduchého produktu nebo u varianty uvidíte dvě zaškrtávací políčka. Vypadají podobně, ale dělají něco jiného:
- Virtuální (Virtual) znamená: nic se neodesílá. WooCommerce neúčtuje dopravu a při placení se neptá na doručovací adresu (pokud je všechno v košíku virtuální). Například degustace čaje na místě, dárkový poukaz zaslaný e-mailem nebo online workshop.
- Ke stažení (Downloadable) znamená: po zaplacení dostane zákazník jeden nebo více souborů. WooCommerce vytvoří pro každého zákazníka odkaz ke stažení a zobrazí ho v potvrzovacím e-mailu a v sekci Můj účet > Stahování.
Digitální kniha receptů ve formátu pdf je obvykle obojí: poštou se nic neposílá a existuje soubor. Tištěná kniha receptů s pdf zdarma k tomu je ke stažení, ale není virtuální: kniha se poštou posílá.
Theehuis Example prodává „Receptenboek Thee en Taart“ (Kniha receptů Čaj a dort) jako pdf za € 9,95 (≈ 242 Kč). Zaškrtnutá políčka: virtuální a ke stažení.
Jak stahování funguje a proč na metodě záleží
Když u produktu ke stažení nahrajete soubor, WooCommerce ho uloží do složky wp-content/uploads/woocommerce_uploads/. Ve výchozím nastavení připojí k názvu souboru náhodný řetězec znaků (nastavení „Append a unique string to filename for security“, ve výchozím stavu zapnuté). Zákazník tuto adresu nikdy nedostane, ale obdrží odkaz na Váš e-shop s klíčem objednávky a kódem pro stažení. WooCommerce při každém kliknutí zkontroluje: patří toto stažení k zaplacené objednávce, není vyčerpaný limit, nevypršela platnost? Teprve pak zákazník soubor dostane.
Jak se soubor potom k zákazníkovi dostane, zvolíte v WooCommerce > Nastavení > Produkty > Produkty určené ke stažení u položky metoda stahování (File download method):
| Metoda | Jak funguje | Bezpečnost |
|---|---|---|
| Vynutit stažení (Force downloads, výchozí) | PHP soubor načte a samo ho odešle | Skutečná adresa zůstává skrytá. Velké soubory se mohou na některých serverech zasekávat nebo narazit na časový limit PHP |
| X-Accel-Redirect/X-Sendfile | PHP kontroluje, soubor odesílá webový server | Stejně bezpečné a lepší pro velké soubory; webový server to musí podporovat (u Apache je k tomu potřeba modul mod_xsendfile, nginx zná X-Accel-Redirect). Zeptejte se svého poskytovatele hostingu |
| Pouze přesměrování (Redirect only) | WooCommerce přesměruje zákazníka na skutečnou adresu souboru | Nebezpečné: kdo má adresu, může ji sdílet a soubor lze získat bez nákupu. WooCommerce sám tuto metodu označuje jako „Insecure“ |
Zvolte tedy Vynutit stažení nebo X-Sendfile. Přesměrování je jen nouzové řešení. Nastavení „Allow using redirect mode (insecure) as a last resort“ způsobí, že se WooCommerce vrátí k přesměrování, když jiná metoda selže; nechte ho vypnuté, pokud přesně nevíte proč.
Ochrana složky
Při metodě Vynutit stažení nebo X-Sendfile musí být složka woocommerce_uploads pro běžné návštěvníky uzavřená. Jinak by si ten, kdo uhodne název souboru nebo ho vyčte z uniklého odkazu, mohl soubor stáhnout přímo. WooCommerce proto při instalaci vloží do této složky dva soubory:
- prázdný
index.html, aby složka nezobrazovala seznam souborů; .htaccesssdeny from all(u metody Pouze přesměrování:Options -Indexes).
Soubor .htaccess funguje na Apache a LiteSpeed (například u WebOké a u mnoha dalších sdílených hostingů). Na nginx webový server .htaccess nečte. Tam musí být v konfiguraci serveru pravidlo, které složku blokuje. U spravovaného nginx hostingu to někdy zařídí poskytovatel; na vlastním VPS to musíte udělat sami. WooCommerce to sám kontroluje a zobrazí v administraci (a ve Stav webu) upozornění, pokud se složka nezdá chráněná.
Na co si dát pozor:
- Prázdná odpověď 200 není důkaz. Když si složku otevřete a uvidíte prázdnou stránku, může to být prázdný
index.html, zatímco samotné soubory jsou volně dostupné. Proto otestujte také jeden soubor (úkol to dělá). - Soubory odjinud. U produktu můžete zadat i odkaz na soubor uložený jinde. K tomu slouží v WooCommerce seznam schválených adresářů pro stahování (Approved download directories): jako soubor ke stažení lze použít jen soubory z těchto složek nebo z těchto adres. Nikdo s administrátorskými právy tak nemůže u produktu omylem nebo úmyslně nabídnout ke stažení libovolný soubor ze serveru. Udržujte tento seznam krátký.
- Zálohy a staging. Složka je součástí Vaší zálohy. Na testovacím prostředí (staging) jsou tedy i Vaše placené soubory: staging zabezpečte (lekce 7.3).
Limity a přístup
U každého produktu ke stažení nebo u každé varianty nastavíte:
- Limit stahování (Download limit): kolikrát smí zákazník soubor stáhnout. Prázdné pole znamená bez omezení. Limit například 5 omezuje sdílení, ale vyvolá stížnosti, když si někdo koupí nový notebook. Zvolte něco rozumného a zákazníkům, kteří se ozvou, vyjděte vstříc.
- Datum platnosti (Download expiry): po kolika dnech odkaz přestane fungovat.
Obecná nastavení v sekci Produkty určené ke stažení:
- Stahování vyžaduje přihlášení (Downloads require login), ve výchozím stavu vypnuté. Zapnutí znamená, že hosté nemohou nic stáhnout; zapněte ho jen tehdy, když vyžadujete i zákaznické účty.
- Přístup po zaplacení (Grant access to downloadable products after payment), ve výchozím stavu zapnuté: zákazník může stahovat, jakmile má objednávka stav Zpracovává se, tedy hned po úspěšné platbě. Pokud je vypnuté, až po stavu Dokončeno.
Odstoupení od smlouvy u digitálního obsahu
U běžné čajové konvice má zákazník 14 dní na rozmyšlenou (lekce 5.2). U souboru ke stažení je to složité: kdo pdf má, ten ho má, i po odstoupení od smlouvy. Proto existuje výjimka, ale jen za určitých podmínek. V EU je uvedena v článku 16 směrnice 2011/83/EU; v Nizozemsku v čl. 6:230p písm. g nizozemského občanského zákoníku (BW). Právo odstoupit od smlouvy neplatí u digitálního obsahu, který není dodán na hmotném nosiči, pokud:
- dodání začalo s výslovným předchozím souhlasem spotřebitele;
- spotřebitel prohlásil, že se tím vzdává svého práva odstoupit od smlouvy; a
- Vy jste mu to potvrdili (v potvrzení smlouvy, na trvalém nosiči dat, například v e-mailu s objednávkou).
Pokud kterákoli z těchto tří podmínek chybí, zákazník si právo odstoupit od smlouvy ponechává, i když už soubor stáhl. V Belgii a Německu platí stejné pravidlo EU ve vlastním zákoně (viz lekce 5.2). V Česku upravuje odstoupení od smlouvy uzavřené distančním způsobem do 14 dnů občanský zákoník (zákon č. 89/2012 Sb.).
WooCommerce to neřeší automaticky. Potřebujete:
- povinné zaškrtávací políčko při placení, zobrazené jen tehdy, když je v košíku digitální obsah, s textem jako „Souhlasím s tím, že dodání začne okamžitě, a beru na vědomí, že tím ztrácím právo odstoupit od smlouvy“;
- stejný text jako potvrzení v e-mailu s objednávkou u těchto produktů;
- správnou větu v informacích o odstoupení od smlouvy, že to platí pro soubory ke stažení.
Existují rozšíření, která takové políčko přidají; blok pokladny má také možnosti pro další pole. Posuďte je stejně jako každý jiný plugin. Políčko, které je předem zaškrtnuté, se nepočítá jako výslovný souhlas (lekce 5.4).
Pozor na rozdíl oproti virtuálním službám, například workshopu v konkrétní den. Tam platí pravidla pro služby s jinými výjimkami. Přečtěte si lekci 5.2.
Shrnutí
- Virtuální = nic se neodesílá; ke stažení = soubory po zaplacení. Pdf je obvykle obojí.
- Zvolte Vynutit stažení nebo X-Accel-Redirect/X-Sendfile; Pouze přesměrování je nebezpečné.
- Složka
woocommerce_uploadsmusí být uzavřená:.htaccessna Apache a LiteSpeed, pravidlo serveru na nginx. Otestujte skutečný soubor, nejen složku. - Udržujte seznam schválených adresářů pro stahování krátký a nastavte rozumné limity.
- Bez práva odstoupit od smlouvy u souborů ke stažení jen s výslovným souhlasem, vzdáním se práva a potvrzením; WooCommerce to automaticky nezajistí. V Česku upravuje odstoupení od smlouvy uzavřené distančním způsobem občanský zákoník (zákon č. 89/2012 Sb.).
Kvíz
Úkol
Úkol A3.3: Jsou Vaše soubory ke stažení chráněné? Tento úkol se dotazuje na cesty, na které nevedou odkazy, a proto funguje jen pro Váš vlastní e-shop. Nejprve prokážete, že doména patří Vám: vytvoříte TXT záznam _weboke-cursus.<Vaše doména> s kódem, který obdržíte, nebo umístíte soubor /.well-known/weboke-cursus-<kód>.txt, který tento kód obsahuje. Poté zadejte adresu svého e-shopu a případně cestu k jednomu souboru ke stažení tak, jak ji WooCommerce zobrazuje u produktu (začíná na /wp-content/uploads/woocommerce_uploads/). Program si vyžádá složku (bez sledování přesměrování, jen začátek) a pokud jste zadali cestu, jednou i hlavičky tohoto souboru. Zelená, když složka vrátí 401, 403 nebo 404, nebo stránku bez seznamu souborů, a soubor vrátí 401, 403 nebo 404. Oranžová, když jste nezadali soubor: pak byla zkontrolována jen složka a prázdná stránka toho neříká dost. Červená, když složka zobrazuje seznam souborů nebo když se soubor dá normálně stáhnout (200): pak si ho může kdokoli s adresou stáhnout bez nákupu. Program ukládá jen stavové kódy, nikdy samotný soubor.
Otázka pro Vás (nekontroluje se): jaká metoda stahování je ve Vašem e-shopu nastavená a jak máte u svých digitálních produktů ošetřené odstoupení od smlouvy?
Další čtení
- Digital and downloadable product handling (woocommerce.com, anglicky): https://woocommerce.com/document/digital-downloadable-product-handling/
- Bezplatný kurz WordPress 7.4: Zabezpečení webu: oprávnění, hlavičky a bezpečnostní pluginy
- Zakázáno (403): Nemáte oprávnění k přístupu k / na tomto serveru
- Nizozemský občanský zákoník (Burgerlijk Wetboek), kniha 6, článek 6:230p (wetten.overheid.nl, nizozemsky): https://wetten.overheid.nl/BWBR0005289/
Znalostní báze popisuje situaci u WebOké (LiteSpeed, .htaccess funguje); u jiných poskytovatelů to funguje podobně, s výjimkou nginx.
