Dlaczego Twój sklep e-commerce zawodzi w SAP Ariba i jak PunchOut Rocket naprawia to dyskretnie

Doskonale skonfigurowałeś swój sklep e-commerce WooCommerce, Magento, nopCommerce lub niestandardowy. Produkty, ceny, proces realizacji zamówienia — wszystko działa. Następnie duży klient korporacyjny prosi Cię o połączenie Twojego sklepu z SAP Ariba w celu integracji PunchOut, a nagle wszystko się psuje: puste iFrame’y, wylogowane sesje, niewidoczne koszyki. Żaden komunikat o błędzie nie wyjaśnia tego jasno. Ten artykuł szczegółowo opisuje, co dzieje się na poziomie przeglądarki, dlaczego standardowe witryny e-commerce są strukturalnie niekompatybilne ze sposobem ładowania sklepów dostawców przez platformy e-zamówień oraz jak technika odwrotnego proxy PunchOut Rocket automatycznie eliminuje każdy z tych problemów — bez dotykania konfiguracji serwera.

Jak platformy e-zamówień ładują sklepy dostawców

Gdy kupujący pracujący w SAP Ariba, Coupa, Jaggaer, Oracle iProcurement lub podobnym korporacyjnym systemie zamówień klika przycisk „Kup teraz” dostawcy, nie opuszcza swojego portalu. Platforma zamówień otwiera sklep e-commerce dostawcy w iFrame HTML osadzonym bezpośrednio w swoim własnym interfejsie.

Ten projekt ma sens z perspektywy przepływu pracy: kupujący nigdy nie traci kontekstu w swoim wewnętrznym narzędziu, zatwierdzenia i kontrole budżetu pozostają w jurysdykcji systemu zamówień, a cała sesja — od przeglądania do przeniesienia koszyka — jest zawarta w jednym, możliwym do audytu interfejsie.

Czego zespoły ds. zamówień nie zawsze reklamują, to fakt, że ten projekt iFrame nakłada surowe wymagania bezpieczeństwa na poziomie przeglądarki na witrynę dostawcy. Wymagania, których większość standardowych sklepów e-commerce nie jest w stanie spełnić — ponieważ nigdy nie zostały zaprojektowane do ładowania jako osadzone sub-dokumenty w aplikacji strony trzeciej.

Co to jest iFrame? <iFrame> to element HTML, który osadza jedną stronę internetową w drugiej. Strona nadrzędna (portal zamówień) i osadzona strona (Twój sklep e-commerce) są traktowane przez przeglądarkę jako całkowicie oddzielne źródła, co wyzwala szereg zasad bezpieczeństwa cross-origin, które mogą po cichu blokować działanie Twojego sklepu.

Dwa główne tryby awarii wynikające z tej architektury to naruszenie dyrektywy frame-ancestors w Content Security Policy oraz odrzucenie pliku cookie SameSite. Zrozumienie obu jest kluczowe do zrozumienia, dlaczego proste oprogramowanie pośredniczące, które kieruje żądania przez odwrotne proxy, rozwiązuje wszystko za jednym zamachem.

Wyjaśnienie błędu frame-ancestors

Nowoczesne serwery internetowe mogą instruować przeglądarki, które zewnętrzne źródła mają prawo osadzać ich strony w iFrame. Ta instrukcja jest dostarczana za pośrednictwem nagłówka odpowiedzi HTTP o nazwie Content Security Policy, a konkretnie jego dyrektywy frame-ancestors.

Gdy przeglądarka ładuje stronę w iFrame, sprawdza nagłówek Content-Security-Policy: frame-ancestors zwrócony przez serwer osadzonej strony. Jeśli źródło witryny osadzającej nie jest wymienione w tej dyrektywie, przeglądarka odmawia renderowania strony. Widzisz pusty iFrame. W witrynie sklepu nie pojawia się żaden komunikat o błędzie. Kupujący po prostu nic nie widzi.

Co faktycznie wysyła serwer: Większość dostawców hostingu i przewodników po zabezpieczaniu serwerów zaleca ustawienie restrykcyjnej polityki frame-ancestors jako środka bezpieczeństwa przeciwko atakom clickjacking. Typowa zablokowana konfiguracja wygląda następująco: Content-Security-Policy: frame-ancestors 'self’. Informuje to każdą przeglądarkę, że tylko sama strona może osadzać tę witrynę w iFrame. Każdy portal e-zamówień, który próbuje załadować Twój sklep, otrzymuje pustą ramkę.

Starszym odpowiednikiem jest nagłówek X-Frame-Options: SAMEORIGIN lub X-Frame-Options: DENY, który zachowuje się identycznie, ale z mniejszą szczegółowością. Jeśli Twój serwer wysyła którykolwiek z nich bez wyraźnego umieszczenia domeny platformy zamówień na białej liście, Twoja sesja PunchOut pokaże pusty iFrame.

Aby naprawić to ręcznie bez odwrotnego proxy, musisz zidentyfikować każdą domenę platformy zamówień, której używają Twoi klienci — co może się różnić w zależności od klienta — i dodać każdą z nich do dyrektywy frame-ancestors. Dla dostawcy obsługującego pięciu różnych klientów w Ariba, Coupa i Jaggaer oznacza to utrzymywanie konfiguracji serwera, która zawiera potencjalnie dziesiątki domen, aktualizując ją za każdym razem, gdy klient migruje platformy lub zmienia swój subdomenę portalu.

Wpływ w świecie rzeczywistym: Pusty iFrame podczas sesji PunchOut nie generuje zgłoszenia do pomocy technicznej w taki sposób, jak błąd 500. Kupujący po prostu zgłaszają, że „sklep dostawcy nie działa”, a zespoły ds. zamówień często spędzają godziny na rozwiązywaniu problemów, które w rzeczywistości są pojedynczym brakującym nagłówkiem HTTP na serwerze internetowym dostawcy.

Wyjaśnienie problemu z plikami cookie SameSite

Nawet jeśli pomyślnie skonfigurujesz frame-ancestors, aby umożliwić portalowi zamówień osadzenie Twojego sklepu, istnieje drugi, bardziej podstępny problem: pliki cookie cross-origin są domyślnie blokowane we wszystkich nowoczesnych przeglądarkach.

Twoja platforma e-commerce w dużym stopniu polega na plikach cookie w celu utrzymania stanu sesji — wiedząc, kto jest zalogowany, co znajduje się w koszyku, którą listę cen zastosować i czy użytkownik jest uwierzytelniony. Te pliki cookie są ustawiane przez Twój serwer i wysyłane z powrotem do przeglądarki z każdym żądaniem.

W 2020 roku Google Chrome (szybko za nim Firefox i Edge) zmienił domyślne zachowanie plików cookie w kontekstach cross-origin. Zmiana, regulowana przez atrybut pliku cookie SameSite, działa następująco:

  • SameSite=Lax (domyślnie) – Pliki cookie blokowane w iFrame’ach: Każdy plik cookie bez jawnego atrybutu SameSite jest traktowany jako Lax przez nowoczesne przeglądarki. Pliki cookie Lax nie są wysyłane w żądaniach sub-zasobów cross-origin, co obejmuje iFrame’y. Twój sklep otwiera się w Ariba, ale plik cookie sesji jest po cichu usuwany.
  • SameSite=None; Secure – Co musisz ustawić: Aby umożliwić wysyłanie plików cookie w iFrame cross-origin, każdy plik cookie sesji i uwierzytelniania musi wyraźnie zawierać zarówno SameSite=None, jak i flagę Secure. Pominięcie któregokolwiek z atrybutów powoduje, że przeglądarka odrzuca plik cookie.

Praktyczna konsekwencja jest poważna: nawet gdy iFrame renderuje się wizualnie, kupujący może pojawić się jako anonimowy, wylogowany gość. Dedykowana lista cen sklonowana dla niego jest niedostępna. Koszyk nie może być powiązany z jego sesją. Proces realizacji zamówienia całkowicie się psuje. Sesja PunchOut nie zwraca żadnych pozycji do systemu zamówień.

Dlaczego jest to szczególnie trudne do naprawienia w WooCommerce i Magento: Zarówno WooCommerce, jak i Magento ustawiają liczne pliki cookie sesji i uwierzytelniania. Wiele z nich jest ustawianych przez obsługę sesji PHP, niektóre przez własną warstwę uwierzytelniania platformy, a inne przez wtyczki stron trzecich. Nie ma jednego przełącznika, który zastosowałby SameSite=None; Secure do wszystkich z nich jednocześnie. Naprawa wymaga albo zmian konfiguracji PHP na poziomie serwera, niestandardowego kodu, albo kombinacji obu — i musi być zweryfikowana we wszystkich przeglądarkach używanych przez Twoich kupujących.

HTTPS jest bezwzględnie wymagane: Atrybut SameSite=None jest respektowany przez przeglądarki tylko wtedy, gdy plik cookie jest również oznaczony jako Secure, co oznacza, że może być wysyłany tylko przez połączenia HTTPS. Jeśli jakakolwiek część Twojego sklepu lub konfiguracji serwera obsługuje treści przez HTTP, plik cookie zostanie odrzucony niezależnie od tego. Upewnij się, że cała Twoja witryna działa z ważnym certyfikatem TLS.

Dlaczego te błędy są tak trudne do debugowania

Zarówno naruszenie frame-ancestors, jak i odrzucenie pliku cookie SameSite są niewidoczne z perspektywy użytkownika. Kupujący nie widzi opisowej strony błędu. Sklep dostawcy może renderować się częściowo. Konsola deweloperska przeglądarki pokazuje rzeczywisty błąd, ale kupujący i administratorzy zamówień nie otwierają narzędzi deweloperskich.

„PunchOut dostawcy nie działa” to prawie zawsze błąd polityki bezpieczeństwa przeglądarki — niewidoczny dla użytkowników, trywialny do zdiagnozowania za pomocą odpowiednich narzędzi, ale zaskakująco trudny do naprawienia bez dostępu na poziomie serwera.

Z perspektywy wsparcia technicznego, te problemy są szczególnie kosztowne, ponieważ:

  • Nie można ich odtworzyć w izolacji — Twój sklep działa dobrze, gdy jest odwiedzany bezpośrednio; psuje się tylko wtedy, gdy jest osadzony w domenie konkretnego portalu zamówień.
  • Zależą od wersji przeglądarki — starsze wersje Chrome lub Firefox mogły być bardziej liberalne, co prowadziło do sporadycznych zgłoszeń.
  • Wymagają dostępu do serwera w celu naprawy — dostawca korzystający z hostingu współdzielonego lub zarządzanej platformy może nawet nie mieć uprawnień do ustawiania niestandardowych nagłówków odpowiedzi HTTP.
  • Mnożą się z każdym nowym klientem — każda platforma zamówień ma inną domenę portalu, co wymaga ciągłej konserwacji białej listy serwera.

Prawidłowym rozwiązaniem nie jest łatanie każdego objawu indywidualnie w każdym sklepie. Prawidłowym rozwiązaniem jest całkowite wyeliminowanie ładowania iFrame cross-origin — co dokładnie robi odwrotne proxy PunchOut Rocket.

Odwrotne proxy PunchOut Rocket: Jak to działa

Domyślny i zalecany tryb działania PunchOut Rocket wykorzystuje architekturę odwrotnego proxy do obsługi Twojego sklepu e-commerce podczas sesji PunchOut. Zrozumienie, co to oznacza w praktyce, wyjaśnia, dlaczego eliminuje ono zarówno problemy z frame-ancestors, jak i SameSite za pomocą jednej decyzji architektonicznej.

Zasada: Odwrotne proxy znajduje się między klientem (przeglądarką kupującego) a serwerem źródłowym (Twoim sklepem e-commerce). Zamiast przeglądarki ładującej Twój sklep bezpośrednio, wysyła ona żądania do infrastruktury PunchOut Rocket, która następnie pobiera zawartość z Twojego sklepu w imieniu przeglądarki i zwraca ją tak, jakby była to własna zawartość PunchOut Rocket.

Z perspektywy przeglądarki, cała sesja PunchOut — katalog produktów, koszyk, proces realizacji zamówienia — pochodzi z jednego, spójnego źródła: domeny PunchOut Rocket. Nie ma iFrame cross-origin. Nie ma plików cookie stron trzecich. Nagłówek frame-ancestors jest kontrolowany przez infrastrukturę PunchOut Rocket, która już zezwala na portale e-zamówień. Wszystkie pliki cookie są ustawiane i odczytywane w ramach źródła PunchOut Rocket i są traktowane jako pliki cookie pierwszej strony.

Przepływ sesji z włączonym odwrotnym proxy:

  • 1. Kupujący klika „PunchOut” w Ariba lub Coupa: System e-zamówień wysyła żądanie konfiguracji cXML lub OCI do punktu końcowego PunchOut Rocket.
  • 2. PunchOut Rocket uwierzytelnia sesję: Poświadczenia są weryfikowane, prawidłowa tożsamość kupującego jest rozwiązywana, a bezpieczny token sesji jest generowany. PunchOut Rocket loguje się do Twojego sklepu e-commerce przy użyciu sklonowanego konta użytkownika skonfigurowanego dla tego klienta końcowego.
  • 3. Odwrotne proxy zaczyna obsługiwać Twój sklep: Przeglądarka kupującego jest kierowana do adresu URL PunchOut Rocket. Wszystkie kolejne żądania stron, zasobów i wywołań API są przekazywane przez infrastrukturę PunchOut Rocket. Adres URL Twojego sklepu nigdy nie pojawia się w pasku adresu przeglądarki podczas sesji.
  • 4. Pliki cookie, nagłówki i zasoby są przepisywane: PunchOut Rocket przepisuje nagłówki odpowiedzi i domeny plików cookie, tak aby wszystko było obsługiwane w ramach jednego spójnego źródła. Żadna polityka SameSite nie ma zastosowania w różnych źródłach, ponieważ istnieje tylko jedno źródło. Na Twoim serwerze nie jest potrzebna biała lista frame-ancestors, ponieważ infrastruktura PunchOut Rocket obsługuje to.
  • 5. Kupujący robi zakupy i przesyła koszyk: Zawartość koszyka jest przechwytywana przez PunchOut Rocket, konwertowana do prawidłowego formatu cXML lub OCI i przesyłana z powrotem do systemu zamówień jako prawidłowo ustrukturyzowane żądanie zakupu.

Zero wymaganej konfiguracji serwera: Po włączeniu odwrotnego proxy nie musisz modyfikować żadnych nagłówków HTTP, polityk plików cookie ani plików konfiguracyjnych serwera na swoim hoście e-commerce. Infrastruktura PunchOut Rocket obsługuje całą kompatybilność cross-origin w Twoim imieniu. Dotyczy to niezależnie od tego, czy Twoi klienci korzystają z Ariba, Coupa, Jaggaer, czy jakiegokolwiek innego portalu.

Zakłócenia wtyczek: Co może zepsuć proxy

Odwrotne proxy działa poprzez pobieranie HTML Twojego sklepu w czasie rzeczywistym i przekazywanie go do przeglądarki kupującego. Oznacza to, że HTML generowany przez Twój serwer musi być czysty i możliwy do rozwiązania URL — każdy tag skryptu, odwołanie do arkusza stylów i źródło obrazu musi używać standardowych ścieżek URL bezwzględnych lub względnych, które PunchOut Rocket może poprawnie przepisać.

Pewna klasa wtyczek WordPress i WooCommerce łamie to założenie: wtyczki do minifikacji HTML i optymalizacji zasobów.

Problem z kodowaniem Base64: Wtyczki takie jak Autoptimize poprawiają wydajność strony poprzez łączenie i minifikację plików CSS i JavaScript. Przy najbardziej agresywnych ustawieniach osadzają również połączoną zawartość jako URI danych zakodowanych w Base64 bezpośrednio w HTML. Zamiast linku do arkusza stylów, takiego jak: <link rel=”stylesheet” href=”/wp-content/cache/autoptimize/css/autoptimize_abc123.css”>, wynik staje się czymś w rodzaju: <style>@import url(„data:text/css;base64,Ym9keXt……”)</style>.

Gdy odwrotne proxy przekazuje ten HTML, te URI danych zakodowane w Base64 nie mają adresu URL do przepisania — są to nieprzejrzyste bloki zakodowanej zawartości. Wszelkie zasoby, do których się odwołują (obrazy tła, czcionki internetowe, dalsze importy), rozwiązują się względem niewłaściwego źródła lub w ogóle się nie ładują. Rezultatem jest witryna sklepu z uszkodzonymi stylami, brakującymi czcionkami, niewidocznymi przyciskami i niefunkcjonalnym układem w iFrame zamówień.

Wtyczki, które mogą zakłócać działanie:

  • Autoptimize: Zwłaszcza gdy włączone jest „Inline and Defer CSS” lub „Inline all CSS”. Cała wtyczka powinna być wyłączona podczas sesji PunchOut.
  • WP Rocket: Opcje „Combine CSS Files” i „Combine JavaScript Files” mogą powodować problemy. Wyłącz tylko opcje łączenia/osadzania zasobów.
  • LiteSpeed Cache: Minifikacja HTML i ustawienia łączenia CSS/JS powinny być wyłączone. Podstawowe buforowanie stron nie wpływa na zachowanie proxy.
  • W3 Total Cache: Tryb „Minify” dla CSS i JS może generować osadzone zasoby. Wyłącz minifikację, ale zachowaj buforowanie obiektów/stron, jeśli jest to potrzebne.
  • Standardowe wtyczki do buforowania stron: Wtyczki, które buforują pełne strony HTML bez zmiany struktury URL zasobów, są zazwyczaj bezpieczne.

Jak zdiagnozować konflikt wtyczek:

  1. Otwórz sesję PunchOut w przeglądarce i użyj opcji Wyświetl źródło strony (nie inspektora elementów DevTools, który pokazuje aktywny DOM).
  2. Wyszukaj w surowym kodzie HTML ciąg data:text/css;base64, lub data:application/javascript;base64,.
  3. Jeśli znaleziono, wtyczka minifikująca koduje zasoby w linii. Zidentyfikuj, która wtyczka jest za to odpowiedzialna, na podstawie jej komentarzy wyjściowych w źródle.
  4. Wyłącz tę wtyczkę (lub jej funkcję kodowania w linii) i ponownie przetestuj sesję PunchOut.

Uwaga dotycząca wydajności: Wyłączenie Autoptimize lub podobnych wtyczek nie oznacza poświęcania wydajności witryny dla zwykłych odwiedzających. Większość nowoczesnych hostów i sieci CDN zapewnia multipleksowanie HTTP/2, które sprawia, że łączenie plików jest w dużej mierze niepotrzebne.

Wyłączanie odwrotnego proxy: Co musisz skonfigurować ręcznie

Odwrotne proxy jest domyślnie włączone dla wszystkich witryn PunchOut Rocket i jest zdecydowanie zalecaną konfiguracją. Jeśli jednak odwrotne proxy zostanie wyłączone w Ustawieniach zaawansowanych, kompatybilność cross-origin staje się Twoją odpowiedzialnością. Każde ograniczenie bezpieczeństwa przeglądarki opisane w tym artykule będzie miało zastosowanie. Musisz skonfigurować następujące elementy na własnym serwerze lub w panelu sterowania hostingu:

1. Content-Security-Policy: frame-ancestors: Musisz wyraźnie wymienić każdą domenę platformy zamówień, której używa którykolwiek z Twoich klientów. Składnia konfiguracji w pliku serwera lub .htaccess powinna być zgodna z tym wzorcem:

Content-Security-Policy: frame-ancestors 'self’ https://*.ariba.com https://*.coupahost.com https://*.jaggaer.com;

# Dodaj również X-Frame-Options dla kompatybilności ze starszymi przeglądarkami: X-Frame-Options: ALLOW-FROM https://your-client-portal.ariba.com

Zauważ, że X-Frame-Options nie obsługuje poddomen z symbolami wieloznacznymi i zezwala tylko na jedną wartość domeny na instancję nagłówka. Dla klientów na różnych subdomenach będziesz potrzebować logiki na poziomie serwera, aby dynamicznie ustawiać nagłówek na podstawie nagłówka żądania Referer lub Origin.

2. Atrybuty plików cookie SameSite: Wszystkie pliki cookie sesji i uwierzytelniania muszą zostać zaktualizowane, aby zawierały SameSite=None; Secure. W przypadku stosu WordPress/WooCommerce działającego na PHP, najbardziej niezawodnym podejściem jest ustawienie tego globalnie na poziomie PHP:

session.cookie_samesite = „None”

session.cookie_secure = 1

Sprawdź, czy wszystkie wtyczki stron trzecich (bramki płatności, analityka, menedżery sesji) również używają SameSite=None; Secure dla swoich plików cookie. Pojedynczy niezgodny plik cookie z wtyczki może przerwać sesję, nawet jeśli Twoje podstawowe pliki cookie platformy są poprawnie skonfigurowane.

Ciągłe obciążenie konserwacyjne: Każdy nowy klient na nowej platformie zamówień dodaje kolejną domenę do Twojej białej listy frame-ancestors. Migracje platform zamówień, nowe wzorce subdomen i aktualizacje zabezpieczeń przeglądarek mogą po cichu przerywać istniejące sesje bez ostrzeżenia. To obciążenie konserwacyjne jest głównym powodem, dla którego PunchOut Rocket domyślnie włącza odwrotne proxy.

W skrócie: Odwrotne proxy włączone vs. wyłączone

  • frame-ancestors / X-Frame-Options: Obsługiwane przez PunchOut Rocket (Proxy włączone) vs. Konfiguruj na swoim serwerze (Proxy wyłączone).
  • Pliki cookie SameSite=None; Secure: Brak plików cookie cross-origin (Proxy włączone) vs. Muszą być ustawione dla wszystkich plików cookie (Proxy wyłączone).
  • Nowy klient na nowej platformie: Zero zmian w konfiguracji (Proxy włączone) vs. Dodaj nową domenę do białej listy (Proxy wyłączone).
  • Autoptimize / wtyczki do osadzania zasobów: Muszą być wyłączone (Proxy włączone) vs. Brak proxy do zakłócania (Proxy wyłączone).
  • Wymaganie HTTPS: Wymuszane przez PunchOut Rocket (Proxy włączone) vs. Wymagane przez SameSite=None (Proxy wyłączone).
  • Wymagany dostęp do serwera: Brak (Proxy włączone) vs. Wymagany do konfiguracji nagłówków (Proxy wyłączone).
  • Konserwacja w czasie: Zero (Proxy włączone) vs. Ciągła dla każdego nowego klienta (Proxy wyłączone).

Podsumowanie

Niewidzialna ściana między Twoim sklepem e-commerce a portalem zamówień kupującego nie jest błędem w Twoim kodzie ani w systemie Twojego klienta. Jest to przewidywalna konsekwencja sposobu, w jaki modele bezpieczeństwa przeglądarek obsługują osadzanie iFrame cross-origin — i dotyczy każdego dostawcy, który próbuje połączyć się z Ariba, Coupa lub Jaggaer za pomocą gotowej witryny e-commerce.

Polityka bezpieczeństwa treści frame-ancestors i ograniczenie plików cookie SameSite istnieją z dobrych powodów: chronią użytkowników przed clickjackingiem i śledzeniem między witrynami. Ale tworzą one prawdziwą niekompatybilność z modelem PunchOut, która wymaga rozwiązania strukturalnego, a nie poprawki konfiguracyjnej.

Odwrotne proxy PunchOut Rocket zapewnia to rozwiązanie strukturalne. Kierując całą sesję kupującego przez infrastrukturę PunchOut Rocket, przeglądarka widzi jedno, spójne źródło przez całą sesję. Ograniczenia iFrame cross-origin po prostu nie mają zastosowania. Pliki cookie są plikami pierwszej strony. Nie są wymagane żadne zmiany konfiguracji serwera w Twoim sklepie i nie jest wymagana ciągła konserwacja, gdy wdrażasz nowych klientów na nowych platformach zamówień.

Jedynym kompromisem jest kompatybilność wtyczek: jeśli Twój stos WordPress lub WooCommerce używa agresywnych narzędzi do minifikacji HTML, takich jak Autoptimize z włączonym kodowaniem inline Base64, muszą one zostać wyłączone. W praktyce ma to znikomy wpływ na regularną wydajność witryny i jest jednorazową zmianą konfiguracji.

Dla dostawców, którzy potrzebują pełnej kontroli nad środowiskiem serwerowym i wolą samodzielnie obsługiwać konfigurację cross-origin, proxy można wyłączyć — ale wymagania ręczne są znaczne i rosną z każdą nową relacją z klientem. Dla zdecydowanej większości dostawców odwrotne proxy jest właściwym domyślnym rozwiązaniem: bezproblemowa, bezobsługowa kompatybilność z każdym portalem e-zamówień, z którego korzystają Twoi klienci.

Gotowy, aby połączyć swój sklep z dowolną platformą e-zamówień?

PunchOut Rocket zajmuje się kompatybilnością z iFrame, politykami plików cookie oraz tłumaczeniem cXML/OCI — dzięki czemu możesz skupić się na pozyskiwaniu i obsłudze klientów korporacyjnych, a nie na debugowaniu nagłówków bezpieczeństwa przeglądarki.

Logo di PunchOut Rocket con servizi di integrazione OCI e cXML.

Kontakt

Via Manin 30,
21100 Varese
Tel. 0332/239546
info@weblink.it
weblinksrl@pec.weblink.it

Firma

Weblink srl
NIP IT02285720120
SDI: M5UXCR1
www.weblink.it
Polityka prywatności

©Copyright PunchOut Rocket – Stworzone przez Weblink