Wspieramy społeczność WordPress w Bazylei
Nie jesteśmy tylko zdalną agencją. Jesteśmy aktywną częścią ekosystemu. Wierzymy w Open Source i wnosimy wkład w społeczność, która napędza ponad 40% sieci (W3Techs).
Programista WordPress & WooCommerce w Bazylei
W Bazylei, gdzie konkurencja jest wysoka, szybkość strony to Twój najważniejszy atut SEO. Nasz stack Astro + Headless WP gwarantuje wyniki, które zostawiają konkurencję w tyle.
Dla firm w Bazylei obsługujących sektor Lokalne MŚP i firmy korporacyjne, bezpieczeństwo danych jest priorytetem. Architektura Headless wirtualnie eliminuje najczęstsze wektory ataków na WordPressa.
Sklep WooCommerce w Bazylei konkuruje z kupującym z laboratorium przy Grenzacherstrasse albo z działem zakupów przy Fabrikstrasse, który oczekuje ceny netto z UID, numeru zamówienia zakupowego na fakturze, kodu QR-Rechnung z adresem strukturalnym i Track & Trace od Post CH, nie numeru z polskiego kuriera. Checkout skopiowany z rynku euro albo z RFN - karta na pierwszym miejscu, niemiecki MwSt, brak TWINT, brak pola PO - gubi zamówienia zanim ktokolwiek oceni motyw. Ta strona opisuje budowę i naprawę sklepu: katalog, checkout B2B, płatności, dostawy, stany i dokumenty. Nie opisuje opieki serwera ani motywu korporacyjnego bez koszyka.
Zakres pokrywa programistę WooCommerce w warunkach szwajcarskich. Strona firmowa bez koszyka to osobna ścieżka: programista WordPress w Bazylei. Sklep już na produkcji, który potrzebuje aktualizacji i kopii, a nie przebudowy checkoutu, idzie na opiekę techniczną WordPress w Bazylei.
Checkout WooCommerce w Bazylei
Bazylea to europejski węzeł life sciences: Roche przy Grenzacherstrasse, Novartis Campus przy Fabrikstrasse, Lonza w Muttenz, ekosystem CRO, dostawców odczynników i spin-offów wokół BaselArea (baselarea.swiss) i acceleratorów DayOne. To nie jest lista klientów WPPoland i nie jest obietnica certyfikacji GxP. To jest geografia rynku, z której wynika prosta rzecz: sklep B2B dla laboratoriów, dostawców sprzętu i firm usługowych w ekosystemie pharma ma inne wymagania checkoutu niż sklep detaliczny na Marktplatz, ale ten sam stack płatności i podatku.
Sklepy, które tu stawiamy albo naprawiamy, zwykle łączą dwa rytmy: codzienną sprzedaż B2B z fakturą z góry i numerem PO do kodów 4001, 4051 albo 4056 oraz skoki katalogu przed konferencją life sciences w Messe Basel albo przed zamknięciem kwartału, gdy magazyn w Pratteln albo Muttenz musi wyjechać paletą Swiss-Express, a nie listem A+. Oba rytmy kończą się w tym samym checkoucie. Jeśli checkout kłamie w podatku MWST, w metodzie płatności albo w zaokrągleniu brutto do 5 Rappen, reszta sklepu nie uratuje zamówienia. Prace trzymają się WooCommerce. Customizacje idą przez hooki action i filter oraz własną wtyczkę, nigdy przez edycję plików rdzenia. Granica między rdzeniem Woo, kodem wtyczki i motywem zapada na audycie i trafia do runbooka.
Płatności na checkoucie w Szwajcarii w 2026
Szwajcarski koszyk nie zaczyna się od karty Visa. TWINT jest portfelem, którego kupujący szuka w pierwszym ekranie metod. Oficjalna wtyczka TWINT-AG dla WooCommerce (PHP 8.1+, rozszerzenie soap, certyfikat .p12, PHP CLI dla procesów tle) obsługuje Regular Checkout i Express Checkout. Brak CLI na serwerze kończy się ostrzeżeniem w panelu i martwymi webhookami. PostFinance Checkout (wtyczka woo-postfinance-checkout w repozytorium WordPress) agreguje TWINT, PostFinance Pay, Visa, Mastercard, American Express, Apple Pay, Click to Pay, fakturę (Purchase by invoice), eBill i przelew z góry w jednym kontrakcie z PostFinance. Konfiguracja wymaga Space ID, User ID i Authentication Key z portalu Checkout; aktywacja subskrypcji u acquirera trwa zwykle jeden do dwóch dni roboczych.
datatrans działa jako PSP trzeciej strony, gdy sklep potrzebuje jednego API pod kartę, TWINT i portfele bez wiązania się wyłącznie z PostFinance. Stripe w Szwajcarii obsługuje karty i Apple Pay, ale nie zastąpi TWINT w oczach lokalnego kupującego. PayPal nadal jest warstwą uniwersalna dla klientów zagranicznych i dla ekspatów pracujących w ekosystemie pharma. Kauf auf Rechnung przez Powerpay albo Klarna wchodzi tam, gdzie koszyk przekracza próg zaufania i gdzie Treuhänder akceptuje ryzyko niewypłacalności.
W Bazylei kolejność metod na checkoucie ustawiamy pod mix B2B i B2C: faktura z góry i eBill wysoko w ścieżce instytucjonalnej z limitem kredytowym, TWINT i PostFinance Pay w B2C, Apple Pay obok, karta niżej, PayPal dla ruchu spoza CH. Domyślny szablon Woo z kartą na górze pracuje wbrew nawykom rynku bazylejskiego. Polski runbook z BLIK, Przelewy24 albo InPost nie przenosi się do Bazylei. W Bazylei obowiązuje TWINT, PostFinance, MWST i QR-Rechnung, nie KSeF ani Allegro.
Dla każdej bramki w runbooku zostaje: obsługiwane flow (jednorazowe, cykliczne, capture, zwrot pełny, zwrot częściowy), adres webhooka, lista zdarzeń które zmieniają status, matryca kont sandbox i historia idempotencji. PostFinance Checkout zgłasza capture i odmowę osobnymi zdarzeniami. TWINT wymaga osobnej ścieżki Express Checkout z konfiguracją ekranów wyświetlania przycisku. Faktura z góry albo eBill to osobny flow: zamówienie nie może iść na processing, zanim księgowość zobaczy wpływ na koncie PostFinance albo w camt.053. W B2B life sciences to standard, nie wyjątek.
Strefy dostaw: Post CH, walidacja adresu i Swiss-Express
Krajowa dostawa z Szwajcarii w 2026 to przede wszystkim Post CH (Schweizerische Post). Oficjalna wtyczka Swiss Post: Barcodes, Address Checker & Auto-Complete (rynek WooCommerce) wymaga kontraktu biznesowego, Client Identifier i Client Secret z Digital Commerce API, oraz licencji frankingu (franking license). Od czerwca 2023 domyślny endpoint to DCAPI zamiast WEDEC. Wtyczka generuje etykiety z kodem kreskowym Post CH, Track & Trace i opcjonalnym mailem statusu (SMS Post CH nie jest już wspierany).
Auto-complete i Address Checker na checkoucie podpowiadają ulicę, kod i miejscowość według bazy Post CH. Klient może nadal wysłać adres niewalidowany, ale walidacja zmniejsza błędy typu „4001 Basel” bez numeru domu albo „Grenzacherstrasse” bez numeru lokalu. Dla sklepu w St. Alban błąd adresu kończy się zwrotem paczki do magazynu w Pratteln i kosztem obsługi, którego marża na odczynnik laboratoryjny nie pokrywa.
Strefy Woo rozdzielamy na produkty PostPac Economy, PostPac Priority, Bulky Goods, Swiss-Express Moon i Saturday Delivery tam, gdzie kontrakt Post CH to przewiduje. Gabaryt nie wchodzi do skrytki pocztowej tak jak mała paczka. Odbiór osobisty w Bazylei (Filiale, nie Packstation w niemieckim sensie) ma osobną metodę z adresem punktu. Jedna stawka „darmowa dostawa CH” na wszystko psuje marżę na sprzęcie laboratoryjnym wysyłanym Bulky Goods albo na materiałach wymagających osobnej obsługi logistycznej.
Etykieta i numer śledzenia wracają do zamówienia Woo i do maila klienta. Generowanie etykiety po payment_complete zdejmujemy do Action Scheduler (as_enqueue_async_action), żeby handler webhooka TWINT oddał 200 zanim API Post CH policzy routing. Ręczne klejenie etykiet w portalu Post CH przy liczbie zamówień po weekendzie zakupowym w Kleinbasel nie skaluje się.
MWST, CHF i QR-Rechnung
Ta strona nie publikuje cen WPPoland. Opisuje, jak podatek szwajcarski ma wyglądać w sklepie, nie w cenniku agencji. MWST (Mehrwertsteuer) to szwajcarski podatek od wartości dodanej, nie niemiecki MwSt. Od 1 stycznia 2024, bez zmiany na 2026, obowiązują trzy stawki ESTV: 8,1% (Normalsatz), 2,6% (redukowana: m.in. żywność, książki, leki) i 3,8% (Beherbergung). Próg rejestracji: obrót 100 000 CHF. Numer na fakturze: CHE-xxx.xxx.xxx MWST. Kwota brutto zaokrąglana do 5 Rappen (0,05 CHF), nie do 10 groszy ani do jednego centa euro.
Koszyk mieszany jest codziennością przy sklepie, który sprzedaje książkę obok sprzętu laboratoryjnego albo zestaw odczynników obok żywności ze stawką obniżoną. Woo musi liczyć podatek per pozycja, a nie „weź najwyższą stawkę koszyka”. Błąd w klasie podatkowej produktu wychodzi dopiero na PDF z QR-Rechnung i w eksporcie do Treuhändera. Sklep, który po aktualizacji wtyczki fakturującej gubi UID albo zaokrąglenie, produkuje dokumenty, których księgowość w Bazylei nie przyjmie.
QR-Rechnung (QR-bill) zastąpiła stare Einzahlungsscheine. W Swiss QR Code od 21 listopada 2025 ma być adres strukturalny (Adresstyp S): ulica, numer, kod, miejscowość, kraj w osobnych polach, nie jedna linia „Aeschenvorstadt 1, 4051 Basel” w polu typu K. Okno przejściowe zamyka się w 2026: banki zapowiadają kategoryczne odrzucanie nieustrukturyzowanych adresów. Checkout, który generuje kod z adresem typu K, kończy się tym, że klient „zapłacił” TWINT-em, a faktura QR nie przechodzi w eBankingu.
Granicę „co liczy podatek i wystawia dokument” zapisujemy w runbooku: wtyczka faktur w Woo, osobny silnik QR-Rechnung, albo ERP jako źródło prawdy. Jedno źródło numeracji. Dwa źródła dają podwójne numery albo dziury, a Treuhänder tego nie wybacza. Waluta sklepu to CHF. Wyświetlanie EUR „dla wygody” bez jawnej stopy i bez zgody klienta to osobna decyzja compliance, nie przełącznik w motywie.
B2B life sciences: katalog, role i zamówienia zakupowe
Sklep dostawcy dla laboratoriów Bazylei to nie ten sam produkt co sklep detaliczny z motywu premium. Dział zakupów firmie pharma oczekuje: ceny netto z UID na fakturze, numeru zamówienia zakupowego (PO) przed wysyłką, ścieżki zatwierdzenia dla zamówień powyżej progu, katalogu z numerem katalogowym (SKU) zgodnym z systemem ERP klienta i historii zamówień widocznej po zalogowaniu.
WooCommerce B2B realizujemy przez role klienta (Customer Role), cenniki według ról, minimalne wielkości zamówień i pole PO na checkoucie. Pole PO zapisujemy w meta zamówienia (_purchase_order_number) i drukujemy na PDF faktury. Zamówienie z PO trafia na status on-hold albo własny status „oczekuje na zatwierdzenie”, dopóki kierownik działu zakupów nie zatwierdzi w panelu albo przez webhook z systemu zatwierdzania. Hook woocommerce_checkout_order_processed uruchamia powiadomienie e-mail do approvera i zapis w logu audytowym.
Ceny netto / brutto na checkoucie B2B (netto plus MWST) i B2C (brutto) to dwa szablony, nie przełącznik CSS. Kupujący z UID w Muttenz oczekuje netto. Konsument z Grossbasel oczekuje brutto w CHF z zaokrągleniem 5 Rappen. Instytucja z Grenzacherstrasse oczekuje faktury z góry z terminem płatności 30 albo 60 dni, nie TWINT Express.
Katalog laboratoryjny wymaga atrybutów, które detal nie ma: numer partii (lot), data ważności, numer katalogowy producenta, klasa temperatury przechowywania, informacja o materiale niebezpiecznym (ADR). Te pola trzymamy w meta produktu albo w ACF na CPT, nie w opisie HTML. Eksport zamówienia do ERP (SAP Business One, Abacus, Bexio) idzie przez REST API albo plik CSV z ustalonym schematem kolumn. Synchronizacja stanu magazynowego z Muttenz albo Pratteln wymaga jednego źródła prawdy: albo ERP, albo Woo z rezerwacją, nigdy dwa niezależne liczniki.
Warianty trzymamy jako prawdziwe variation z własnym SKU, wagą i klasą podatkową MWST, nie jako pole tekstowe „wpisz objętość probówki”. Duża macierz (pojemność × czystość × opakowanie) dostaje własne zapytania i cache fragmentów. Filtrowanie, które na stagingu działa na 40 SKU, na produkcji z 4 000 wariantów potrafi zabić checkout, bo mini-cart liczy te same joiny.
Webhooki, rezerwacja stanu i HPOS
Najczęstsza wada sklepów, które wracają do naprawy w Bazylei, nie leży w wyglądzie checkoutu. Leży w tym, co dzieje się po kliknięciu „Zapłać TWINT-em” albo po złożeniu zamówienia B2B z fakturą z góry. Sklep z magazynem w Pratteln, który sprzedaje równolegle przez własne Woo i przez marketplace, płaci za ten błąd dwa razy: raz zamówieniem w limbo, drugi raz nadsprzedażą SKU, który był już zarezerwowany w drugim kanale.
Status zamówienia ustala serwer, nie powrót klienta
Status zamówienia ustala powiadomienie serwer do serwera. Powrót klienta na stronę podziękowania nie jest źródłem prawdy. Endpoint order-received to zdarzenie przeglądarki. Klient po autoryzacji TWINT zamyka kartę w tramwaju przy Marktplatz, traci sieć w tunelu przy Basel SBB, wraca z cache. Hook woocommerce_thankyou służy do wyświetlenia treści. Nie zmienia statusu płatności.
O pieniądzach decyduje callback bramki. W Woo odbiera go własny adres zwrotny z parametrem wc-api, czyli akcja z rodziny woocommerce_api_ rejestrowana przez wtyczkę bramki. Handler po weryfikacji sygnatury wywołuje payment_complete na obiekcie zamówienia i przenosi je z pending do processing. Sygnaturę sprawdzamy na surowym ciele żądania ze strumienia php://input, zanim cokolwiek zostanie sparsowane. Cięższą pracę po weryfikacji - synchronizację magazynu, wystawienie QR-Rechnung, nadanie Post CH - zdejmujemy do Action Scheduler, żeby odpowiedź 200 wracała szybko i PostFinance albo TWINT nie zaczęły ponawiać webhooka.
Powtórzony sygnał z bramki jest normą, nie awarią. Identyfikator zdarzenia zapisujemy w meta zamówienia i sprawdzamy przed przetworzeniem. Blok obsługi obudowujemy blokadą: wp_cache_add na trwałym cache obiektowym (Redis) albo add_option z wyłączonym autoloadem. Zamówienie już opłacone nie zmienia stanu drugi raz. Dostaje notatkę o zignorowanym duplikacie.
Płatność odrzucona i zwrot częściowy to dwie osobne ścieżki. Odrzucenie ustawia status failed, nie cancelled. Zwrot częściowy idzie przez wc_create_refund z listą pozycji i kwot oraz z flagą zwrotu na bramce TWINT albo PostFinance. Traktowanie każdego zwrotu jak pełnego anulowania psuje raport sprzedaży i stany po sezonie konferencyjnym w Messe Basel.
Rezerwacja magazynu i sprzedaż wielokanałowa
Stan rezerwujemy w momencie rozpoczęcia płatności, nie po jej potwierdzeniu. WooCommerce zapisuje rezerwację w tabeli wp_wc_reserved_stock przez wc_reserve_stock_for_order, zwalnia ją przez wc_release_stock_for_order, a czas trzymania bierze z opcji woocommerce_hold_stock_minutes. Bez tego dwoje laboratoriów wchodzi w TWINT na ostatnią sztukę odczynnika z półki w Muttenz i oboje dostaje potwierdzenie. Faktyczne odjęcie stanu robi wc_maybe_reduce_stock_levels i pilnuje go flaga _order_stock_reduced.
Przy sprzedaży wielokanałowej rezerwacja Woo nie wie nic o Galaxus, Ricardo ani innym kanale. Źródłem prawdy zostaje wspólna pula w ERP albo w warstwie fulfilment, a Woo trzyma stan przez synchronizację. Hold stock przy fakturze z góry ustawia się dłużej niż przy TWINT: przelew QR-Rechnung potrafi iść do następnego dnia roboczego. Zbyt krótki hold zdejmuje rezerwację, zanim księgowość zaksięguje wpływ. W B2B life sciences hold 48-72 godzin przy fakturze z góry to norma, nie błąd konfiguracji.
Tabele wp_wc_orders i tryb zgodności
High-Performance Order Storage jest domyślny dla nowych instalacji od WooCommerce 8.2. Zamówienia żyją wtedy w wp_wc_orders, wp_wc_order_addresses, wp_wc_order_operational_data i wp_wc_orders_meta, a nie jako wpisy shop_order w wp_posts. Sklepy postawione wcześniej przełączają się świadomie: najpierw tryb zgodności, potem HPOS jako magazyn autorytatywny, na końcu wyłączenie dual-write gdy raporty i wtyczki przestaną się rozjeżdżać.
Diagnostyka idzie przez wc_get_orders oraz OrderUtil, nie przez SQL w wp_posts. Wtyczka, która w 2026 nadal szuka zamówień wyłącznie w postmeta, na HPOS pokazuje puste listy, psuje eksport do księgowości i gubi zwroty. Oficjalne PostFinance Checkout, TWINT, Swiss Post i Stripe są na HPOS od dawna. Problemem są stare konektory magazynowe i autorskie crony. Audyt HPOS to lista wtyczek, które czytają zamówienia, plus wp wc hpos status na stagingu, plus zamówienie testowe z webhookiem TWINT, zanim produkcja dostanie przełączenie.
Log ma pozwolić odtworzyć historię zamówienia bez logowania do panelu PostFinance. Do dziennika przez wc_get_logger trafia identyfikator zdarzenia, status przed i po, kwota w CHF, wynik weryfikacji sygnatury i decyzja (przetworzono albo pominięto jako duplikat). Nie trafia pełny payload z danymi płatniczymi. Retencja logów uzgadniana jest z polityką nDSG klienta, nie „kasuj po siedmiu dniach” domyślnie z wtyczki debug. W B2B life sciences log zamówienia z numerem PO i timestampem zatwierdzenia to element ścieżki audytowej, nie luksus.
nDSG, hosting w CH i impressum
Sklep w Bazylei zbiera dane osobowe: adres dostawy, e-mail, telefon, czasem dane kontaktowe działu zakupów. Zrewidowana federalna ustawa o ochronie danych (nDSG, weszła 1 września 2023) wymaga informacji o administratorze, celu, odbiorcach i transferze za granicę w Datenschutzerklärung. EDÖB (FDPIC) nadzoruje compliance. Naruszenie z „likely high risk” zgłasza administrator przez portal DataBreach. Agencja WooCommerce nie składa zgłoszenia za klienta. Dostarcza oś czasu techniczną.
Hosting w CH (Cyon z Bazylei, Infomaniak, Metanet, Hostpoint) to decyzja, która wpada na kick-offie obok TWINT, nie w stopce marketingowej. Origin w Szwajcarii skraca drogę do użytkowników kraju i do SwissIX. Kopia nocą poza CH wymaga ujawnienia w polityce prywatności. CDN kończący TLS w USA bez świadomej zgody klienta odpada na pierwszej rozmowie z IT firmy z Grenzacherstrasse.
Impressum i UID muszą zgadzać się z Zefix i z Handelsregisteramt des Kantons Basel-Stadt. Niemiecki szwajcarski (de-CH): ss zamiast ß (Strasse), MWST zamiast MwSt. Szablon impressum skopiowany z niemieckiej GmbH z USt-IdNr i § 5 TMG na stronie bazylejskiej AG jest błędem, który prawnik klienta zobaczy szybciej niż wynik Lighthouse. Checkout w trzech językach (de-CH, fr, en) przez WPML albo Polylang nie może rozjechać klas podatkowych i metod Post CH między wersjami językowymi. Region Dreiländereck (Szwajcaria, Niemcy, Francja) wymaga spójności etykiet podatkowych także w wersji francuskiej dla klientów z Saint-Louis albo Weil am Rhein.
Katalog i checkout pod rynek bazylejski
BaselArea promuje region jako life sciences cluster z dostępem do trzech krajów. Dla WooCommerce wynika stąd druga oś: katalog, formularze i dokumenty muszą działać po niemiecku, często po francusku i po angielsku, bez rozjechanych hreflang i bez impressum skopiowanego z szablonu dla Zurychu albo Genewy.
To nie znaczy, że każdy sklep musi wyglądać jak portal Roche. Znaczy, że kupujący z laboratorium oczekuje spójności: CHF na etykiecie, faktura z góry w ścieżce B2B, TWINT w B2C, QR-Rechnung który przechodzi, Track & Trace Post CH w mailu transakcyjnym, numer PO na fakturze.
Preorder przed konferencją w Messe Basel albo przed zamknięciem kwartału: SKU jest widoczny, płatność schodzi TWINT-em albo faktura z góry, ale fulfillment stoi aż do daty. Status on-hold albo własny status „warte na magazyn” musi blokować etykietę Post CH. Inaczej wtyczka Swiss Post nada paczkę, której jeszcze nie ma w Pratteln.
Sklepy obsługujące instytucje pharma albo dostawców CRO często wymagają numeru zamówienia publicznego, osobnej ścieżki faktury z góry i archiwum dokumentów zgodnego z wymaganiami działu zakupów. To nie jest moduł z motywu. To warstwa w własnej wtyczce z hookiem na woocommerce_checkout_order_processed i osobnym statusem „oczekuje na PO”. W okresie Messe Basel i Art Basel procedura wdrożeniowa uwzględnia freeze wdrożeń: środowisko testowe dostaje zmiany, produkcja czeka do poniedziałku po wydarzeniu, chyba że to hotfix bezpieczeństwa z pisemną zgodą właściciela produktu.
Wydajność koszyka i checkoutu
Checkout jest dynamiczny. Pełny page cache na cart i checkout serwuje cudzy koszyk albo pusty fragment mini-cart. Warstwa cache (Redis, Cloudflare) omija te ścieżki albo stosuje segmentację. Skrypty TWINT, PostFinance i Swiss Post Address Checker ładujemy wtedy, gdy checkout jest na ekranie, z preconnect do ich domen, nie w stopce każdej strony kategorii.
Obrazy katalogu idą w AVIF / WebP z srcset. Bez przetwarzania LCP na karcie produktu spada, zanim kupujący zobaczy przycisk TWINT Express. Query Monitor na stagingu pokazuje, czy wtyczka faktur, Swiss Post i bramka nie dokładają po N zapytań na każdy request koszyka. HPOS zmniejsza ból list zamówień w panelu. Nie naprawia ciężkiego motywu na storefrontcie.
Pomiar: Lighthouse i dane terenowe na URL produktu, kategorii i checkoutu, przed i po. Origin w CH plus sensowny motyw daje przewagę na Core Web Vitals w kraju, gdzie lokalne CDN są normą, nie luksusem. Sklep z magazynem w Muttenz i klientami w całej Szwajcarii nie musi być w Zurychu, żeby checkout był szybki. Musi być poprawnie skonfigurowany.
Zakres prac, QA i przekazanie
Audyt na wejściu obejmuje: taksonomię i klasy podatkowe MWST, role B2B i cenniki, kolejność metod płatności (i czy TWINT Express w ogóle działa na PHP CLI), strefy Post CH i walidację adresu, HPOS i listę wtyczek czytających zamówienia, webhooki, hold stock, QR-Rechnung Adresstyp S, ścieżkę PO, baseline Lighthouse. Na tym etapie zapada, co jest źródłem stanu, podatku i numeru dokumentu.
Implementacja idzie gałęziami funkcyjnymi. Każda bramka ma scenariusz sandbox: PostFinance Checkout test, TWINT sandbox z certyfikatem, Stripe test tam gdzie karta jest aktywna. Swiss Post wymaga credentials DCAPI; etykieta z prawdziwym franking license na stagingu bez flagi testowej nadaje się do kłopotu. QA kończy się zamówieniem, które przechodzi: koszyk mieszany 8,1% / 2,6%, zamówienie B2B z numerem PO i fakturą z góry, płatność TWINT w ścieżce B2C, webhook, notatka w zamówieniu, etykieta PostPac, mail z Track & Trace, PDF z CHE-… MWST i QR typu S, a potem zwrot częściowy na tę samą bramkę.
Przekazanie to runbook bramek, mapa stref Post CH, opis zaokrąglenia 5 Rappen, instrukcja QR-Rechnung, zapis decyzji HPOS i dokumentacja ścieżki PO B2B. Wycena jest indywidualna i na piśmie przed startem. Zmiany zakresu omawiamy z konsekwencją dla terminu. Nie publikujemy cennika SKU na tej stronie.
Kiedy ta strona, a kiedy opieka albo programista WordPress
Ta strona zostaje przy sklepie: katalog, checkout, płatność, dostawa, stan, dokument, zwrot. Motyw bloga, Gutenberg, intranet albo strona korporacyjna bez koszyka nie są tutaj tematem - to programista WordPress oraz programista WordPress w Bazylei. Monitoring, aktualizacje rdzenia i kopie zapasowe bez przebudowy checkoutu to opieka techniczna WordPress w Bazylei i szerszy filar utrzymania stron WordPress. Wspólny filar e-commerce: programista WooCommerce.
WP Basel (wpbasel.ch) jest lokalnym punktem odniesienia dla ekosystemu WordPress, nie zamiennikiem audytu checkoutu. Sesje o nDSG, hostingu w CH i consent w 2025-2026 tłumaczą, skąd biorą się wymagania klientów bazylejskich. Nie tłumaczą, czemu QR-Rechnung z adresem typu K odrzuca bank.
Przypadek: aktualizacja wtyczki przed produkcją zatrzymała QR-Rechnung
Sklep WooCommerce obsługiwany przez polski zespół, sprzedaż B2B do laboratoriów Bazylei, stawki MWST 8,1%, UID na PDF, bramka z TWINT i z QR-Rechnung, pole PO na checkoucie. W kolejce do produkcji leżała aktualizacja wtyczki fakturującej plus patch PostFinance Checkout, tuż przed konferencją w Messe Basel.
Na środowisku testowym generator QR sypał kod z adresem typu K: cała linia „Grenzacherstrasse 124, 4058 Basel” w jednym polu. Po stronie banku taki kod po zamknięciu okna przejściowego w 2026 nie przechodzi. Równolegle TWINT wracał webhookiem, którego nowa wersja bramki mapowała na zły status zamówienia. Zamówienia B2B z numerem PO zostawały w on-hold bez powiadomienia approvera. Na produkcji ten sam zestaw poszedłby w tygodniu przed Messe Basel. Magazyn w Pratteln dostałby zamówienia w pending, księgowość dostałaby dziurę w numeracji QR, a dział zakupów dostałby kolejkę „złożyłem PO i nic”.
środowisko testowe zatrzymał promocję. Checklista checkoutu (koszyk B2B z PO, TWINT sandbox, PostFinance test, PDF z CHE-… MWST, QR z polami S, etykieta Post CH) przeszła, dopiero potem produkcja. Nie ma tu nazwy firmy, bo to kształt zdarzenia, nie case study z logotypem. Jest mechanizm: najpierw kopia, potem produkcja.
Rynek Bazylei: pharma, dostawcy i logistyka
Bazylea łączy klastr life sciences, logistykę w Muttenz i Pratteln oraz trójjęzyczny region graniczny. Sklep B2B dla dostawcy odczynników i sklep B2C na Marktplatz mają inne wymagania checkoutu, ale ten sam stack płatności i podatku. W pierwszym przypadku decyduje faktura z góry, numer PO i ścieżka zatwierdzenia. W drugim - TWINT Express i szybka etykieta PostPac.
BaselArea i DayOne przyciągają startupy i software house’y, które często budują MVP sklepu na motywie i dopiero po pierwszym sezonie sprzedażowym odkrywają, że checkout nie obsługuje MWST per pozycja albo że webhook PostFinance nie dociera przez firewall hostingu poza CH. Naprawa idzie szybciej, gdy audyt na wejściu obejmuje listę wtyczek czytających zamówienia i test webhooka z zewnętrznego IP, nie tylko Lighthouse na stronie głównej.
Dostawcy sprzętu laboratoryjnego i firmy CRO wokół Novartis Campus i Roche Tower mają sezonowość powiązaną z kalendarzem konferencyjnym i zamknięciami kwartalnymi, nie tylko z Art Basel w czerwcu. Sklep, który pokazuje ceny tylko w EUR „dla klientów z Niemiec”, bez jawnej stopy przeliczenia i bez zgody na przetwarzanie, ryzykuje reklamację u EDÖB szybciej niż utratę konwersji. Checkout w CHF z opcjonalnym podglądem EUR w stopce to decyzja produktowa i prawna, nie CSS.
Rozpocznij projekt sklepu WooCommerce w Bazylei
Do kontaktu wystarczy krótki opis: czy sklep już stoi, czy to B2B life sciences czy B2C, jakie bramki są włączone (TWINT, PostFinance, datatrans), czy QR-Rechnung ma Adresstyp S, czy checkout ma pole PO, skąd leci Post CH (DCAPI, PostPac czy Swiss-Express), czy HPOS jest włączony, gdzie stoi hosting (CH czy poza), jaki jest magazyn (Pratteln, Muttenz, 3PL) i czy Treuhänder czeka na poprawne MWST na fakturze. Na tej podstawie widać, czy potrzebna jest przebudowa checkoutu, czy zestawienie webhooków i stanów.
WPPoland pracuje przy WooCommerce od strony zamówienia, nie od strony slajdu. Bazylea dostaje ten sam rygor inżynierski co każdy inny sklep, tylko ze stackiem, którego kupujący w Szwajcarii naprawdę używa: CHF, TWINT, PostFinance, MWST, QR-Rechnung, Post CH i ścieżką B2B, której dział zakupów life sciences oczekuje.
Mapa w Bazylei i okolic
Obsługujemy klientów w Bazylei i pobliskich miejscowościach.
Ta strona zawiera informacje przygotowane specjalnie dla Bazylea.
Sklep WooCommerce w Bazylei konkuruje z kupującym z laboratorium przy Grenzacherstrasse albo z działem zakupów przy Fabrikstrasse, który oczekuje ceny netto z UID, numeru zamówienia zakupowego na fakturze, kodu QR-Rechnung z adresem strukturalnym i Track & Trace od Post CH, nie numeru z polskiego kuriera. Checkout skopiowany z rynku euro albo z RFN - karta na pierwszym miejscu, niemiecki MwSt, brak TWINT, brak pola PO - gubi zamówienia zanim ktokolwiek oceni motyw. Ta strona opisuje budowę i naprawę sklepu: katalog, checkout B2B, płatności, dostawy, stany i dokumenty. Nie opisuje opieki serwera ani motywu korporacyjnego bez koszyka.
Zakres pokrywa programistę WooCommerce w warunkach szwajcarskich. Strona firmowa bez koszyka to osobna ścieżka: programista WordPress w Bazylei. Sklep już na produkcji, który potrzebuje aktualizacji i kopii, a nie przebudowy checkoutu, idzie na opiekę techniczną WordPress w Bazylei.
Checkout WooCommerce w Bazylei
Bazylea to europejski węzeł life sciences: Roche przy Grenzacherstrasse, Novartis Campus przy Fabrikstrasse, Lonza w Muttenz, ekosystem CRO, dostawców odczynników i spin-offów wokół BaselArea (baselarea.swiss) i acceleratorów DayOne. To nie jest lista klientów WPPoland i nie jest obietnica certyfikacji GxP. To jest geografia rynku, z której wynika prosta rzecz: sklep B2B dla laboratoriów, dostawców sprzętu i firm usługowych w ekosystemie pharma ma inne wymagania checkoutu niż sklep detaliczny na Marktplatz, ale ten sam stack płatności i podatku.
Sklepy, które tu stawiamy albo naprawiamy, zwykle łączą dwa rytmy: codzienną sprzedaż B2B z fakturą z góry i numerem PO do kodów 4001, 4051 albo 4056 oraz skoki katalogu przed konferencją life sciences w Messe Basel albo przed zamknięciem kwartału, gdy magazyn w Pratteln albo Muttenz musi wyjechać paletą Swiss-Express, a nie listem A+. Oba rytmy kończą się w tym samym checkoucie. Jeśli checkout kłamie w podatku MWST, w metodzie płatności albo w zaokrągleniu brutto do 5 Rappen, reszta sklepu nie uratuje zamówienia. Prace trzymają się WooCommerce. Customizacje idą przez hooki action i filter oraz własną wtyczkę, nigdy przez edycję plików rdzenia. Granica między rdzeniem Woo, kodem wtyczki i motywem zapada na audycie i trafia do runbooka.
Płatności na checkoucie w Szwajcarii w 2026
Szwajcarski koszyk nie zaczyna się od karty Visa. TWINT jest portfelem, którego kupujący szuka w pierwszym ekranie metod. Oficjalna wtyczka TWINT-AG dla WooCommerce (PHP 8.1+, rozszerzenie soap, certyfikat .p12, PHP CLI dla procesów tle) obsługuje Regular Checkout i Express Checkout. Brak CLI na serwerze kończy się ostrzeżeniem w panelu i martwymi webhookami. PostFinance Checkout (wtyczka woo-postfinance-checkout w repozytorium WordPress) agreguje TWINT, PostFinance Pay, Visa, Mastercard, American Express, Apple Pay, Click to Pay, fakturę (Purchase by invoice), eBill i przelew z góry w jednym kontrakcie z PostFinance. Konfiguracja wymaga Space ID, User ID i Authentication Key z portalu Checkout; aktywacja subskrypcji u acquirera trwa zwykle jeden do dwóch dni roboczych.
datatrans działa jako PSP trzeciej strony, gdy sklep potrzebuje jednego API pod kartę, TWINT i portfele bez wiązania się wyłącznie z PostFinance. Stripe w Szwajcarii obsługuje karty i Apple Pay, ale nie zastąpi TWINT w oczach lokalnego kupującego. PayPal nadal jest warstwą uniwersalna dla klientów zagranicznych i dla ekspatów pracujących w ekosystemie pharma. Kauf auf Rechnung przez Powerpay albo Klarna wchodzi tam, gdzie koszyk przekracza próg zaufania i gdzie Treuhänder akceptuje ryzyko niewypłacalności.
W Bazylei kolejność metod na checkoucie ustawiamy pod mix B2B i B2C: faktura z góry i eBill wysoko w ścieżce instytucjonalnej z limitem kredytowym, TWINT i PostFinance Pay w B2C, Apple Pay obok, karta niżej, PayPal dla ruchu spoza CH. Domyślny szablon Woo z kartą na górze pracuje wbrew nawykom rynku bazylejskiego. Polski runbook z BLIK, Przelewy24 albo InPost nie przenosi się do Bazylei. W Bazylei obowiązuje TWINT, PostFinance, MWST i QR-Rechnung, nie KSeF ani Allegro.
Dla każdej bramki w runbooku zostaje: obsługiwane flow (jednorazowe, cykliczne, capture, zwrot pełny, zwrot częściowy), adres webhooka, lista zdarzeń które zmieniają status, matryca kont sandbox i historia idempotencji. PostFinance Checkout zgłasza capture i odmowę osobnymi zdarzeniami. TWINT wymaga osobnej ścieżki Express Checkout z konfiguracją ekranów wyświetlania przycisku. Faktura z góry albo eBill to osobny flow: zamówienie nie może iść na processing, zanim księgowość zobaczy wpływ na koncie PostFinance albo w camt.053. W B2B life sciences to standard, nie wyjątek.
Strefy dostaw: Post CH, walidacja adresu i Swiss-Express
Krajowa dostawa z Szwajcarii w 2026 to przede wszystkim Post CH (Schweizerische Post). Oficjalna wtyczka Swiss Post: Barcodes, Address Checker & Auto-Complete (rynek WooCommerce) wymaga kontraktu biznesowego, Client Identifier i Client Secret z Digital Commerce API, oraz licencji frankingu (franking license). Od czerwca 2023 domyślny endpoint to DCAPI zamiast WEDEC. Wtyczka generuje etykiety z kodem kreskowym Post CH, Track & Trace i opcjonalnym mailem statusu (SMS Post CH nie jest już wspierany).
Auto-complete i Address Checker na checkoucie podpowiadają ulicę, kod i miejscowość według bazy Post CH. Klient może nadal wysłać adres niewalidowany, ale walidacja zmniejsza błędy typu „4001 Basel” bez numeru domu albo „Grenzacherstrasse” bez numeru lokalu. Dla sklepu w St. Alban błąd adresu kończy się zwrotem paczki do magazynu w Pratteln i kosztem obsługi, którego marża na odczynnik laboratoryjny nie pokrywa.
Strefy Woo rozdzielamy na produkty PostPac Economy, PostPac Priority, Bulky Goods, Swiss-Express Moon i Saturday Delivery tam, gdzie kontrakt Post CH to przewiduje. Gabaryt nie wchodzi do skrytki pocztowej tak jak mała paczka. Odbiór osobisty w Bazylei (Filiale, nie Packstation w niemieckim sensie) ma osobną metodę z adresem punktu. Jedna stawka „darmowa dostawa CH” na wszystko psuje marżę na sprzęcie laboratoryjnym wysyłanym Bulky Goods albo na materiałach wymagających osobnej obsługi logistycznej.
Etykieta i numer śledzenia wracają do zamówienia Woo i do maila klienta. Generowanie etykiety po payment_complete zdejmujemy do Action Scheduler (as_enqueue_async_action), żeby handler webhooka TWINT oddał 200 zanim API Post CH policzy routing. Ręczne klejenie etykiet w portalu Post CH przy liczbie zamówień po weekendzie zakupowym w Kleinbasel nie skaluje się.
MWST, CHF i QR-Rechnung
Ta strona nie publikuje cen WPPoland. Opisuje, jak podatek szwajcarski ma wyglądać w sklepie, nie w cenniku agencji. MWST (Mehrwertsteuer) to szwajcarski podatek od wartości dodanej, nie niemiecki MwSt. Od 1 stycznia 2024, bez zmiany na 2026, obowiązują trzy stawki ESTV: 8,1% (Normalsatz), 2,6% (redukowana: m.in. żywność, książki, leki) i 3,8% (Beherbergung). Próg rejestracji: obrót 100 000 CHF. Numer na fakturze: CHE-xxx.xxx.xxx MWST. Kwota brutto zaokrąglana do 5 Rappen (0,05 CHF), nie do 10 groszy ani do jednego centa euro.
Koszyk mieszany jest codziennością przy sklepie, który sprzedaje książkę obok sprzętu laboratoryjnego albo zestaw odczynników obok żywności ze stawką obniżoną. Woo musi liczyć podatek per pozycja, a nie „weź najwyższą stawkę koszyka”. Błąd w klasie podatkowej produktu wychodzi dopiero na PDF z QR-Rechnung i w eksporcie do Treuhändera. Sklep, który po aktualizacji wtyczki fakturującej gubi UID albo zaokrąglenie, produkuje dokumenty, których księgowość w Bazylei nie przyjmie.
QR-Rechnung (QR-bill) zastąpiła stare Einzahlungsscheine. W Swiss QR Code od 21 listopada 2025 ma być adres strukturalny (Adresstyp S): ulica, numer, kod, miejscowość, kraj w osobnych polach, nie jedna linia „Aeschenvorstadt 1, 4051 Basel” w polu typu K. Okno przejściowe zamyka się w 2026: banki zapowiadają kategoryczne odrzucanie nieustrukturyzowanych adresów. Checkout, który generuje kod z adresem typu K, kończy się tym, że klient „zapłacił” TWINT-em, a faktura QR nie przechodzi w eBankingu.
Granicę „co liczy podatek i wystawia dokument” zapisujemy w runbooku: wtyczka faktur w Woo, osobny silnik QR-Rechnung, albo ERP jako źródło prawdy. Jedno źródło numeracji. Dwa źródła dają podwójne numery albo dziury, a Treuhänder tego nie wybacza. Waluta sklepu to CHF. Wyświetlanie EUR „dla wygody” bez jawnej stopy i bez zgody klienta to osobna decyzja compliance, nie przełącznik w motywie.
B2B life sciences: katalog, role i zamówienia zakupowe
Sklep dostawcy dla laboratoriów Bazylei to nie ten sam produkt co sklep detaliczny z motywu premium. Dział zakupów firmie pharma oczekuje: ceny netto z UID na fakturze, numeru zamówienia zakupowego (PO) przed wysyłką, ścieżki zatwierdzenia dla zamówień powyżej progu, katalogu z numerem katalogowym (SKU) zgodnym z systemem ERP klienta i historii zamówień widocznej po zalogowaniu.
WooCommerce B2B realizujemy przez role klienta (Customer Role), cenniki według ról, minimalne wielkości zamówień i pole PO na checkoucie. Pole PO zapisujemy w meta zamówienia (_purchase_order_number) i drukujemy na PDF faktury. Zamówienie z PO trafia na status on-hold albo własny status „oczekuje na zatwierdzenie”, dopóki kierownik działu zakupów nie zatwierdzi w panelu albo przez webhook z systemu zatwierdzania. Hook woocommerce_checkout_order_processed uruchamia powiadomienie e-mail do approvera i zapis w logu audytowym.
Ceny netto / brutto na checkoucie B2B (netto plus MWST) i B2C (brutto) to dwa szablony, nie przełącznik CSS. Kupujący z UID w Muttenz oczekuje netto. Konsument z Grossbasel oczekuje brutto w CHF z zaokrągleniem 5 Rappen. Instytucja z Grenzacherstrasse oczekuje faktury z góry z terminem płatności 30 albo 60 dni, nie TWINT Express.
Katalog laboratoryjny wymaga atrybutów, które detal nie ma: numer partii (lot), data ważności, numer katalogowy producenta, klasa temperatury przechowywania, informacja o materiale niebezpiecznym (ADR). Te pola trzymamy w meta produktu albo w ACF na CPT, nie w opisie HTML. Eksport zamówienia do ERP (SAP Business One, Abacus, Bexio) idzie przez REST API albo plik CSV z ustalonym schematem kolumn. Synchronizacja stanu magazynowego z Muttenz albo Pratteln wymaga jednego źródła prawdy: albo ERP, albo Woo z rezerwacją, nigdy dwa niezależne liczniki.
Warianty trzymamy jako prawdziwe variation z własnym SKU, wagą i klasą podatkową MWST, nie jako pole tekstowe „wpisz objętość probówki”. Duża macierz (pojemność × czystość × opakowanie) dostaje własne zapytania i cache fragmentów. Filtrowanie, które na stagingu działa na 40 SKU, na produkcji z 4 000 wariantów potrafi zabić checkout, bo mini-cart liczy te same joiny.
Webhooki, rezerwacja stanu i HPOS
Najczęstsza wada sklepów, które wracają do naprawy w Bazylei, nie leży w wyglądzie checkoutu. Leży w tym, co dzieje się po kliknięciu „Zapłać TWINT-em” albo po złożeniu zamówienia B2B z fakturą z góry. Sklep z magazynem w Pratteln, który sprzedaje równolegle przez własne Woo i przez marketplace, płaci za ten błąd dwa razy: raz zamówieniem w limbo, drugi raz nadsprzedażą SKU, który był już zarezerwowany w drugim kanale.
Status zamówienia ustala serwer, nie powrót klienta
Status zamówienia ustala powiadomienie serwer do serwera. Powrót klienta na stronę podziękowania nie jest źródłem prawdy. Endpoint order-received to zdarzenie przeglądarki. Klient po autoryzacji TWINT zamyka kartę w tramwaju przy Marktplatz, traci sieć w tunelu przy Basel SBB, wraca z cache. Hook woocommerce_thankyou służy do wyświetlenia treści. Nie zmienia statusu płatności.
O pieniądzach decyduje callback bramki. W Woo odbiera go własny adres zwrotny z parametrem wc-api, czyli akcja z rodziny woocommerce_api_ rejestrowana przez wtyczkę bramki. Handler po weryfikacji sygnatury wywołuje payment_complete na obiekcie zamówienia i przenosi je z pending do processing. Sygnaturę sprawdzamy na surowym ciele żądania ze strumienia php://input, zanim cokolwiek zostanie sparsowane. Cięższą pracę po weryfikacji - synchronizację magazynu, wystawienie QR-Rechnung, nadanie Post CH - zdejmujemy do Action Scheduler, żeby odpowiedź 200 wracała szybko i PostFinance albo TWINT nie zaczęły ponawiać webhooka.
Powtórzony sygnał z bramki jest normą, nie awarią. Identyfikator zdarzenia zapisujemy w meta zamówienia i sprawdzamy przed przetworzeniem. Blok obsługi obudowujemy blokadą: wp_cache_add na trwałym cache obiektowym (Redis) albo add_option z wyłączonym autoloadem. Zamówienie już opłacone nie zmienia stanu drugi raz. Dostaje notatkę o zignorowanym duplikacie.
Płatność odrzucona i zwrot częściowy to dwie osobne ścieżki. Odrzucenie ustawia status failed, nie cancelled. Zwrot częściowy idzie przez wc_create_refund z listą pozycji i kwot oraz z flagą zwrotu na bramce TWINT albo PostFinance. Traktowanie każdego zwrotu jak pełnego anulowania psuje raport sprzedaży i stany po sezonie konferencyjnym w Messe Basel.
Rezerwacja magazynu i sprzedaż wielokanałowa
Stan rezerwujemy w momencie rozpoczęcia płatności, nie po jej potwierdzeniu. WooCommerce zapisuje rezerwację w tabeli wp_wc_reserved_stock przez wc_reserve_stock_for_order, zwalnia ją przez wc_release_stock_for_order, a czas trzymania bierze z opcji woocommerce_hold_stock_minutes. Bez tego dwoje laboratoriów wchodzi w TWINT na ostatnią sztukę odczynnika z półki w Muttenz i oboje dostaje potwierdzenie. Faktyczne odjęcie stanu robi wc_maybe_reduce_stock_levels i pilnuje go flaga _order_stock_reduced.
Przy sprzedaży wielokanałowej rezerwacja Woo nie wie nic o Galaxus, Ricardo ani innym kanale. Źródłem prawdy zostaje wspólna pula w ERP albo w warstwie fulfilment, a Woo trzyma stan przez synchronizację. Hold stock przy fakturze z góry ustawia się dłużej niż przy TWINT: przelew QR-Rechnung potrafi iść do następnego dnia roboczego. Zbyt krótki hold zdejmuje rezerwację, zanim księgowość zaksięguje wpływ. W B2B life sciences hold 48-72 godzin przy fakturze z góry to norma, nie błąd konfiguracji.
Tabele wp_wc_orders i tryb zgodności
High-Performance Order Storage jest domyślny dla nowych instalacji od WooCommerce 8.2. Zamówienia żyją wtedy w wp_wc_orders, wp_wc_order_addresses, wp_wc_order_operational_data i wp_wc_orders_meta, a nie jako wpisy shop_order w wp_posts. Sklepy postawione wcześniej przełączają się świadomie: najpierw tryb zgodności, potem HPOS jako magazyn autorytatywny, na końcu wyłączenie dual-write gdy raporty i wtyczki przestaną się rozjeżdżać.
Diagnostyka idzie przez wc_get_orders oraz OrderUtil, nie przez SQL w wp_posts. Wtyczka, która w 2026 nadal szuka zamówień wyłącznie w postmeta, na HPOS pokazuje puste listy, psuje eksport do księgowości i gubi zwroty. Oficjalne PostFinance Checkout, TWINT, Swiss Post i Stripe są na HPOS od dawna. Problemem są stare konektory magazynowe i autorskie crony. Audyt HPOS to lista wtyczek, które czytają zamówienia, plus wp wc hpos status na stagingu, plus zamówienie testowe z webhookiem TWINT, zanim produkcja dostanie przełączenie.
Log ma pozwolić odtworzyć historię zamówienia bez logowania do panelu PostFinance. Do dziennika przez wc_get_logger trafia identyfikator zdarzenia, status przed i po, kwota w CHF, wynik weryfikacji sygnatury i decyzja (przetworzono albo pominięto jako duplikat). Nie trafia pełny payload z danymi płatniczymi. Retencja logów uzgadniana jest z polityką nDSG klienta, nie „kasuj po siedmiu dniach” domyślnie z wtyczki debug. W B2B life sciences log zamówienia z numerem PO i timestampem zatwierdzenia to element ścieżki audytowej, nie luksus.
nDSG, hosting w CH i impressum
Sklep w Bazylei zbiera dane osobowe: adres dostawy, e-mail, telefon, czasem dane kontaktowe działu zakupów. Zrewidowana federalna ustawa o ochronie danych (nDSG, weszła 1 września 2023) wymaga informacji o administratorze, celu, odbiorcach i transferze za granicę w Datenschutzerklärung. EDÖB (FDPIC) nadzoruje compliance. Naruszenie z „likely high risk” zgłasza administrator przez portal DataBreach. Agencja WooCommerce nie składa zgłoszenia za klienta. Dostarcza oś czasu techniczną.
Hosting w CH (Cyon z Bazylei, Infomaniak, Metanet, Hostpoint) to decyzja, która wpada na kick-offie obok TWINT, nie w stopce marketingowej. Origin w Szwajcarii skraca drogę do użytkowników kraju i do SwissIX. Kopia nocą poza CH wymaga ujawnienia w polityce prywatności. CDN kończący TLS w USA bez świadomej zgody klienta odpada na pierwszej rozmowie z IT firmy z Grenzacherstrasse.
Impressum i UID muszą zgadzać się z Zefix i z Handelsregisteramt des Kantons Basel-Stadt. Niemiecki szwajcarski (de-CH): ss zamiast ß (Strasse), MWST zamiast MwSt. Szablon impressum skopiowany z niemieckiej GmbH z USt-IdNr i § 5 TMG na stronie bazylejskiej AG jest błędem, który prawnik klienta zobaczy szybciej niż wynik Lighthouse. Checkout w trzech językach (de-CH, fr, en) przez WPML albo Polylang nie może rozjechać klas podatkowych i metod Post CH między wersjami językowymi. Region Dreiländereck (Szwajcaria, Niemcy, Francja) wymaga spójności etykiet podatkowych także w wersji francuskiej dla klientów z Saint-Louis albo Weil am Rhein.
Katalog i checkout pod rynek bazylejski
BaselArea promuje region jako life sciences cluster z dostępem do trzech krajów. Dla WooCommerce wynika stąd druga oś: katalog, formularze i dokumenty muszą działać po niemiecku, często po francusku i po angielsku, bez rozjechanych hreflang i bez impressum skopiowanego z szablonu dla Zurychu albo Genewy.
To nie znaczy, że każdy sklep musi wyglądać jak portal Roche. Znaczy, że kupujący z laboratorium oczekuje spójności: CHF na etykiecie, faktura z góry w ścieżce B2B, TWINT w B2C, QR-Rechnung który przechodzi, Track & Trace Post CH w mailu transakcyjnym, numer PO na fakturze.
Preorder przed konferencją w Messe Basel albo przed zamknięciem kwartału: SKU jest widoczny, płatność schodzi TWINT-em albo faktura z góry, ale fulfillment stoi aż do daty. Status on-hold albo własny status „warte na magazyn” musi blokować etykietę Post CH. Inaczej wtyczka Swiss Post nada paczkę, której jeszcze nie ma w Pratteln.
Sklepy obsługujące instytucje pharma albo dostawców CRO często wymagają numeru zamówienia publicznego, osobnej ścieżki faktury z góry i archiwum dokumentów zgodnego z wymaganiami działu zakupów. To nie jest moduł z motywu. To warstwa w własnej wtyczce z hookiem na woocommerce_checkout_order_processed i osobnym statusem „oczekuje na PO”. W okresie Messe Basel i Art Basel procedura wdrożeniowa uwzględnia freeze wdrożeń: środowisko testowe dostaje zmiany, produkcja czeka do poniedziałku po wydarzeniu, chyba że to hotfix bezpieczeństwa z pisemną zgodą właściciela produktu.
Wydajność koszyka i checkoutu
Checkout jest dynamiczny. Pełny page cache na cart i checkout serwuje cudzy koszyk albo pusty fragment mini-cart. Warstwa cache (Redis, Cloudflare) omija te ścieżki albo stosuje segmentację. Skrypty TWINT, PostFinance i Swiss Post Address Checker ładujemy wtedy, gdy checkout jest na ekranie, z preconnect do ich domen, nie w stopce każdej strony kategorii.
Obrazy katalogu idą w AVIF / WebP z srcset. Bez przetwarzania LCP na karcie produktu spada, zanim kupujący zobaczy przycisk TWINT Express. Query Monitor na stagingu pokazuje, czy wtyczka faktur, Swiss Post i bramka nie dokładają po N zapytań na każdy request koszyka. HPOS zmniejsza ból list zamówień w panelu. Nie naprawia ciężkiego motywu na storefrontcie.
Pomiar: Lighthouse i dane terenowe na URL produktu, kategorii i checkoutu, przed i po. Origin w CH plus sensowny motyw daje przewagę na Core Web Vitals w kraju, gdzie lokalne CDN są normą, nie luksusem. Sklep z magazynem w Muttenz i klientami w całej Szwajcarii nie musi być w Zurychu, żeby checkout był szybki. Musi być poprawnie skonfigurowany.
Zakres prac, QA i przekazanie
Audyt na wejściu obejmuje: taksonomię i klasy podatkowe MWST, role B2B i cenniki, kolejność metod płatności (i czy TWINT Express w ogóle działa na PHP CLI), strefy Post CH i walidację adresu, HPOS i listę wtyczek czytających zamówienia, webhooki, hold stock, QR-Rechnung Adresstyp S, ścieżkę PO, baseline Lighthouse. Na tym etapie zapada, co jest źródłem stanu, podatku i numeru dokumentu.
Implementacja idzie gałęziami funkcyjnymi. Każda bramka ma scenariusz sandbox: PostFinance Checkout test, TWINT sandbox z certyfikatem, Stripe test tam gdzie karta jest aktywna. Swiss Post wymaga credentials DCAPI; etykieta z prawdziwym franking license na stagingu bez flagi testowej nadaje się do kłopotu. QA kończy się zamówieniem, które przechodzi: koszyk mieszany 8,1% / 2,6%, zamówienie B2B z numerem PO i fakturą z góry, płatność TWINT w ścieżce B2C, webhook, notatka w zamówieniu, etykieta PostPac, mail z Track & Trace, PDF z CHE-… MWST i QR typu S, a potem zwrot częściowy na tę samą bramkę.
Przekazanie to runbook bramek, mapa stref Post CH, opis zaokrąglenia 5 Rappen, instrukcja QR-Rechnung, zapis decyzji HPOS i dokumentacja ścieżki PO B2B. Wycena jest indywidualna i na piśmie przed startem. Zmiany zakresu omawiamy z konsekwencją dla terminu. Nie publikujemy cennika SKU na tej stronie.
Kiedy ta strona, a kiedy opieka albo programista WordPress
Ta strona zostaje przy sklepie: katalog, checkout, płatność, dostawa, stan, dokument, zwrot. Motyw bloga, Gutenberg, intranet albo strona korporacyjna bez koszyka nie są tutaj tematem - to programista WordPress oraz programista WordPress w Bazylei. Monitoring, aktualizacje rdzenia i kopie zapasowe bez przebudowy checkoutu to opieka techniczna WordPress w Bazylei i szerszy filar utrzymania stron WordPress. Wspólny filar e-commerce: programista WooCommerce.
WP Basel (wpbasel.ch) jest lokalnym punktem odniesienia dla ekosystemu WordPress, nie zamiennikiem audytu checkoutu. Sesje o nDSG, hostingu w CH i consent w 2025-2026 tłumaczą, skąd biorą się wymagania klientów bazylejskich. Nie tłumaczą, czemu QR-Rechnung z adresem typu K odrzuca bank.
Przypadek: aktualizacja wtyczki przed produkcją zatrzymała QR-Rechnung
Sklep WooCommerce obsługiwany przez polski zespół, sprzedaż B2B do laboratoriów Bazylei, stawki MWST 8,1%, UID na PDF, bramka z TWINT i z QR-Rechnung, pole PO na checkoucie. W kolejce do produkcji leżała aktualizacja wtyczki fakturującej plus patch PostFinance Checkout, tuż przed konferencją w Messe Basel.
Na środowisku testowym generator QR sypał kod z adresem typu K: cała linia „Grenzacherstrasse 124, 4058 Basel” w jednym polu. Po stronie banku taki kod po zamknięciu okna przejściowego w 2026 nie przechodzi. Równolegle TWINT wracał webhookiem, którego nowa wersja bramki mapowała na zły status zamówienia. Zamówienia B2B z numerem PO zostawały w on-hold bez powiadomienia approvera. Na produkcji ten sam zestaw poszedłby w tygodniu przed Messe Basel. Magazyn w Pratteln dostałby zamówienia w pending, księgowość dostałaby dziurę w numeracji QR, a dział zakupów dostałby kolejkę „złożyłem PO i nic”.
środowisko testowe zatrzymał promocję. Checklista checkoutu (koszyk B2B z PO, TWINT sandbox, PostFinance test, PDF z CHE-… MWST, QR z polami S, etykieta Post CH) przeszła, dopiero potem produkcja. Nie ma tu nazwy firmy, bo to kształt zdarzenia, nie case study z logotypem. Jest mechanizm: najpierw kopia, potem produkcja.
Rynek Bazylei: pharma, dostawcy i logistyka
Bazylea łączy klastr life sciences, logistykę w Muttenz i Pratteln oraz trójjęzyczny region graniczny. Sklep B2B dla dostawcy odczynników i sklep B2C na Marktplatz mają inne wymagania checkoutu, ale ten sam stack płatności i podatku. W pierwszym przypadku decyduje faktura z góry, numer PO i ścieżka zatwierdzenia. W drugim - TWINT Express i szybka etykieta PostPac.
BaselArea i DayOne przyciągają startupy i software house’y, które często budują MVP sklepu na motywie i dopiero po pierwszym sezonie sprzedażowym odkrywają, że checkout nie obsługuje MWST per pozycja albo że webhook PostFinance nie dociera przez firewall hostingu poza CH. Naprawa idzie szybciej, gdy audyt na wejściu obejmuje listę wtyczek czytających zamówienia i test webhooka z zewnętrznego IP, nie tylko Lighthouse na stronie głównej.
Dostawcy sprzętu laboratoryjnego i firmy CRO wokół Novartis Campus i Roche Tower mają sezonowość powiązaną z kalendarzem konferencyjnym i zamknięciami kwartalnymi, nie tylko z Art Basel w czerwcu. Sklep, który pokazuje ceny tylko w EUR „dla klientów z Niemiec”, bez jawnej stopy przeliczenia i bez zgody na przetwarzanie, ryzykuje reklamację u EDÖB szybciej niż utratę konwersji. Checkout w CHF z opcjonalnym podglądem EUR w stopce to decyzja produktowa i prawna, nie CSS.
Rozpocznij projekt sklepu WooCommerce w Bazylei
Do kontaktu wystarczy krótki opis: czy sklep już stoi, czy to B2B life sciences czy B2C, jakie bramki są włączone (TWINT, PostFinance, datatrans), czy QR-Rechnung ma Adresstyp S, czy checkout ma pole PO, skąd leci Post CH (DCAPI, PostPac czy Swiss-Express), czy HPOS jest włączony, gdzie stoi hosting (CH czy poza), jaki jest magazyn (Pratteln, Muttenz, 3PL) i czy Treuhänder czeka na poprawne MWST na fakturze. Na tej podstawie widać, czy potrzebna jest przebudowa checkoutu, czy zestawienie webhooków i stanów.
WPPoland pracuje przy WooCommerce od strony zamówienia, nie od strony slajdu. Bazylea dostaje ten sam rygor inżynierski co każdy inny sklep, tylko ze stackiem, którego kupujący w Szwajcarii naprawdę używa: CHF, TWINT, PostFinance, MWST, QR-Rechnung, Post CH i ścieżką B2B, której dział zakupów life sciences oczekuje.
Projekty WooCommerce zrealizowane w Bazylei i Szwajcaria
Zobacz wybrane realizacje, które wspierają biznes naszych klientów.
exco.pl, Usługi outsourcingowe i doradcze dla Twojego biznesu
exco.pl to profesjonalna strona internetowa w moim portfolio programisty WordPress, stworzona jako platforma usług outsourcingowych i doradczych dla firm. Projekt ten wyróżnia się nowoczesnym designem, wielojęzyczną obsługą oraz zaawansowanymi funkcjami zarządzania treścią.
frems.pl - Projekt WordPress | WPPoland
Strona frems.pl to serwis internetowy prezentująca ofertę producenta i dystrybutora sprzętu medycznego, specjalizującego się w technologii FREM...
gdasj.pl - Projekt WordPress | WPPoland
Projekt strony gdasj.pl dla lokalnej inicjatywy z Gdańska, oparty na WordPressie i nastawiony na prostą publikację treści oraz stabilne działanie.
Wsparcie techniczne WordPress w Bazylei
Przewodniki metodyczne (SEO, GEO, compliance)
Te materiały opisują, jak pracujemy nad cytowaniami w modelach językowych, modernizacją WooCommerce B2B oraz odpornością operacyjną pod NIS2 i przetargi - niezależnie od miasta realizacji.
Co wyróżnia w Bazylei
Lokalna ekspertyza: - Checkout WooCommerce w Bazylei pod TWINT, PostFinance Pay, kartę i Apple Pay przez datatrans albo PostFinance Checkout - B2B life sciences: ceny według ról, numer PO, faktura z góry, UID CHE-xxx.xxx.xxx MWST, QR-Rechnung Adresstyp S - Strefy dostaw Post CH z walidacją adresu, PostPac i Swiss-Express; zaokrąglenie brutto do 5 Rappen Nasz zespół rozumie specyfikę rynku w Bazylei i dostosowuje rozwiązania do lokalnych potrzeb biznesowych. Kluczowe decyzje projektowe podejmujemy na podstawie realnych danych z rynku w Bazylei, a nie szablonowych założeń.
Potrzebujesz usługi: Programista WooCommerce w Bazylei?
Porozmawiajmy o tym, jak możemy wprowadzić Twoją stronę na wyższy poziom wydajności.
Umów bezpłatną konsultację w BazyleiFAQ - Programista WooCommerce w Bazylei
Jakie projekty WooCommerce podejmujecie?
Dedykowane flow checkoutu B2B i B2C, integracje bramek (TWINT, PostFinance Checkout, datatrans, Stripe, PayPal), strefy i reguły dostaw Post CH z walidacją adresu, logika MWST i QR-Rechnung, ceny według ról, numery zamówień zakupowych, obsługa wielojęzyczności de-CH / fr-CH / en, HPOS oraz refaktoryzacje sklepów dostawców life sciences, które rosły organicznie. Brief trzyma się WooCommerce; jeśli inna platforma byłaby lepsza, zapisujemy to na piśmie.
Czy modyfikujecie rdzeń WooCommerce?
Nie. Sklep musi przetrwać aktualizacje Woo, więc customizacje idą przez udokumentowane hooki action i filter, plus podział na własną wtyczkę i motyw tam gdzie powinno. Modyfikacje plików rdzenia nie są wykonywane. Granica między rdzeniem Woo, kodem wtyczki i kodem motywu zapada na etapie architektury i jest zapisana w runbooku.
Jak realizujecie integrację bramek płatniczych?
Dla każdej bramki dokumentujemy obsługiwane flow (jednorazowe, cykliczne, zwroty, zwroty częściowe, 3DS), matrycę kont sandbox, webhooki które bramka wysyła oraz lokalną historię idempotencji. QA end-to-end na środowisku testowym pokrywa koszyk, płatność TWINT albo PostFinance, zamówienie, mail, etykietę Post CH, edycję w panelu i zwrot na każdej aktywnej bramce, włącznie ze ścieżkami błędów. Wtyczka TWINT wymaga PHP CLI 8.1+ i certyfikatu .p12.
Czy optymalizujecie istniejące wolne sklepy WooCommerce?
Tak. Praca zwykle zaczyna się od przejścia Lighthouse, profilu WP-CLI i Query Monitor na najczęściej odwiedzanych stronach produktu, kategorii i checkoutu, identyfikuje rzeczywisty bottleneck (ciężki motyw, autoload optionów, wolne zapytania wtyczek, waga obrazów, fragmenty koszyka) i rozwiązuje je pojedynczo zamiast instalować kolejną wtyczkę optymalizacyjną.
Jak wygląda długoterminowe utrzymanie i przekazanie?
Żyjąca dokumentacja dla managerów sklepu, redaktorów i programistów; runbook dla każdej bramki i każdej nietrywialnej integracji; pisemny zapis decyzji architektonicznych dla nieoczywistych wyborów; sesja przekazania na koniec zlecenia. Sklep może następnie trafić do zespołu klienta lub na opcjonalny abonament opieki z tą samą dokumentacją.
Technologie i Specjalizacje - w Bazylei
Specjalizujemy się w:
Wspominamy o:
Sprawdź inne usługi WordPress i bazę wiedzy
Wzmocnij swój biznes dzięki profesjonalnemu wsparciu technicznemu w kluczowych obszarach ekosystemu WordPress.
Sklepy, checkout i logika sprzedażowa.
Awaria sklepu, wolny checkout, chaos po aktualizacji.
Opieka, monitoring i przewidywalna dostępność WooCommerce.
Checklisty UE dla sklepu: VAT, dostępność, dowody zgodności.
White-label development WordPress dla agencji.
Synchronizacja WooCommerce z ERP i hurtownią.
Powiązane kategorie
Artykuły wspierające temat

Architektura sklepu WooCommerce na Astro 7. Co zostaje w wp-admin, które wtyczki umierają z motywem, Store API kontra GraphQL i dlaczego kasy nie odpinasz od WooCommerce.

Decyzja Shopify Plus vs WooCommerce headless w 2026 nie jest już binarnym wyborem "platforma vs custom". Obie platformy działają w trybie headless, obie integrują AI, obie renderują na edge. Realne osie to kontrola, koszt całkowity przez pięć lat oraz strategia wyjścia. Ten artykuł przechodzi przez macierz decyzyjną z potwierdzonymi faktami platformowymi.

Kiedy migrować z Magento Adobe Commerce do WooCommerce headless w 2026: kryteria, ścieżka techniczna i typowe błędy polskiego handlu.