{"id":841323,"date":"2026-09-09T12:21:13","date_gmt":"2026-09-09T12:21:13","guid":{"rendered":"https:\/\/www.knowband.com\/blog\/?p=841317\/"},"modified":"2026-09-15T06:33:16","modified_gmt":"2026-09-15T06:33:16","slug":"prestashop-payment-gateway-integration","status":"publish","type":"post","link":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/","title":{"rendered":"Integracja niestandardowej bramki p\u0142atno\u015bci w PrestaShop: wymagania techniczne, przep\u0142yw API i wyzwania OPC w \u015bwiecie rzeczywistym"},"content":{"rendered":"<p><span style=\"font-weight: 400;\">Integracja bramki p\u0142atno\u015bci z PrestaShop mo\u017ce wydawa\u0107 si\u0119 prosta na papierze.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Bramka udost\u0119pnia dokumentacj\u0119 API, dane uwierzytelniaj\u0105ce do \u015brodowiska testowego, klucze uwierzytelniania, adresy URL wywo\u0142ania zwrotnego oraz kilka punkt\u00f3w ko\u0144cowych. Nast\u0119pnie modu\u0142 PrestaShop wysy\u0142a \u017c\u0105danie p\u0142atno\u015bci, odbiera odpowied\u017a, tworzy zam\u00f3wienie i przekierowuje klienta na stron\u0119 potwierdzenia.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">W prawdziwym sklepie PrestaShop bramka p\u0142atno\u015bci rzadko dzia\u0142a jednak sama.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">W momencie, gdy sklep korzysta z modu\u0142u One Page Checkout (OPC), takiego jak SuperCheckout, wiele modu\u0142\u00f3w p\u0142atno\u015bci, niestandardowe przep\u0142ywy p\u0142atno\u015bci, ramki iframe, metody p\u0142atno\u015bci oparte na JavaScript i dodatkowe dostosowania procesu realizacji transakcji mog\u0105 ze sob\u0105 wsp\u00f3\u0142dzia\u0142a\u0107.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">W tym miejscu integracja wielu p\u0142atno\u015bci staje si\u0119 trudna.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Podczas prac nad kompatybilno\u015bci\u0105 bramki p\u0142atniczej napotkali\u015bmy przypadki, w kt\u00f3rych metoda p\u0142atno\u015bci dzia\u0142a\u0142a idealnie w domy\u015blnym koszyku PrestaShop, ale zachowywa\u0142a si\u0119 inaczej w OPC. Na przyk\u0142ad, dostawca p\u0142atno\u015bci m\u00f3g\u0142 wy\u015bwietla\u0107 si\u0119 poprawnie w standardowym koszyku, podczas gdy opcje takie jak BLIK, wyb\u00f3r banku czy BNPL znika\u0142y w SuperCheckout.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Wa\u017cn\u0105 lekcj\u0105 by\u0142o to, \u017ce integracja bramki p\u0142atno\u015bci to nie tylko sprawne wywo\u0142anie API. Chodzi o to, aby ca\u0142y cykl p\u0142atno\u015bci dzia\u0142a\u0142 poprawnie w kasie PrestaShop.<\/span><\/p>\n<h2><strong>1.0 Czego w\u0142a\u015bciwie potrzebuje niestandardowa bramka p\u0142atno\u015bci?<\/strong><\/h2>\n<p><a href=\"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-2-1.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-841339\" src=\"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-2-1-300x300.jpg\" alt=\"Czego tak naprawd\u0119 wymaga niestandardowa bramka p\u0142atno\u015bci? \" width=\"300\" height=\"300\" srcset=\"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-2-1-300x300.jpg 300w, https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-2-1-150x150.jpg 150w, https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-2-1-60x60.jpg 60w, https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-2-1.jpg 700w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p><span style=\"font-weight: 400;\">Og\u00f3lnie rzecz bior\u0105c, integracja p\u0142atno\u015bci PrestaShop musi obs\u0142ugiwa\u0107 pi\u0119\u0107 rzeczy:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Wy\u015bwietl metod\u0119 p\u0142atno\u015bci przy kasie.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Wy\u015blij dane klienta lub p\u0142atno\u015bci do bramki p\u0142atniczej.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Odbierz i zatwierd\u017a odpowied\u017a bramy.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Utw\u00f3rz lub zaktualizuj poprawnie zam\u00f3wienie PrestaShop.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Przekieruj klienta do odpowiedniej strony potwierdzenia lub b\u0142\u0119du.<\/span><\/li>\n<\/ol>\n<p dir=\"ltr\">Typowy modu\u0142 p\u0142atno\u015bci rozszerza klas\u0119 nie tylko bazow\u0105.<\/p>\n<p dir=\"ltr\">Modu\u0142 p\u0142atno\u015bci zazwyczaj wsp\u00f3\u0142pracuje z takimi haczykami jak:<\/p>\n<p dir=\"ltr\">Haczyk odpowiada za udost\u0119pnienie metody p\u0142atno\u015bci przy kasie.<\/p>\n<p dir=\"ltr\">Haczyk obs\u0142uguje to, co widzi klient po zako\u0144czeniu procesu p\u0142atno\u015bci.<\/p>\n<p><span style=\"font-weight: 400;\">Na przyk\u0142ad:<\/span><\/p>\n<pre>publiczna funkcja hookPaymentOptions($params) { if (!$this-&gt;active || !$this-&gt;checkCurrency($params['cart'])) { return []; } $paymentOption = new PaymentOption(); $paymentOption -&gt;setCallToActionText($this-&gt;l('P\u0142a\u0107 kart\u0105')) -&gt;setAction( $this-&gt;context-&gt;link-&gt;getModuleLink( $this-&gt;name, 'redirect', [], true ) ); return [$paymentOption]; }<\/pre>\n<p><span style=\"font-weight: 400;\">Wa\u017cne jest, aby ten haczyk nie zak\u0142ada\u0142 po prostu, \u017ce metoda p\u0142atno\u015bci zawsze b\u0119dzie widoczna.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Na decyzj\u0119 o wy\u015bwietleniu metody p\u0142atno\u015bci wp\u0142ywaj\u0105 waluta, kraj, operator, stan klienta, warto\u015b\u0107 koszyka, konfiguracja modu\u0142u i dost\u0119pno\u015b\u0107 bramki p\u0142atniczej.<\/span><\/p>\n<h2><strong>2.0 Cz\u0119\u015b\u0107, kt\u00f3ra zmienia wszystko: OPC<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Domy\u015blna platforma PrestaShop i modu\u0142 OPC niekoniecznie przetwarzaj\u0105 metody p\u0142atno\u015bci w dok\u0142adnie ten sam spos\u00f3b.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">By\u0142a to jedna z najwa\u017cniejszych lekcji, jakie wynios\u0142em z pracy z wieloma modu\u0142ami p\u0142atno\u015bci.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">W przypadku domy\u015blnego procesu p\u0142atno\u015bci modu\u0142 p\u0142atno\u015bci zazwyczaj sam kontroluje renderowanie opcji p\u0142atno\u015bci i przebieg p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dzi\u0119ki OPC modu\u0142 p\u0142atno\u015bci staje si\u0119 kolejn\u0105 warstw\u0105 pomi\u0119dzy modu\u0142em p\u0142atno\u015bci a klientem. Oznacza to, \u017ce mog\u0105 na siebie oddzia\u0142ywa\u0107 nast\u0119puj\u0105ce elementy:<\/span><\/p>\n<pre><b>Klient<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>OPC \/ SuperCheckout<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Opcje p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Modu\u0142 p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Interfejs API bramy<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Odpowied\u017a bramy<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Modu\u0142 p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>OPC \/ PrestaShop<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Potwierdzenie zam\u00f3wienia<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Modu\u0142 p\u0142atno\u015bci mo\u017ce zatem by\u0107 ca\u0142kowicie poprawny z punktu widzenia interfejsu API, a mimo to zachowywa\u0107 si\u0119 nieprawid\u0142owo w ramach OPC.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dlatego testy zgodno\u015bci p\u0142atno\u015bci powinny zawsze obejmowa\u0107:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Domy\u015blna kasa PrestaShop<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Rzeczywisty OPC u\u017cywany przez sklep<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Testowanie wy\u0142\u0105cznie domy\u015blnego sposobu realizacji transakcji mo\u017ce da\u0107 fa\u0142szywe wra\u017cenie, \u017ce integracja zosta\u0142a uko\u0144czona.<\/span><\/p>\n<h2><strong>3.0 Przyk\u0142ad z \u017cycia wzi\u0119ty: brak opcji PayU w OPC<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Jednym z problem\u00f3w praktycznych, na jakie natrafili\u015bmy, by\u0142y opcje p\u0142atno\u015bci PayU.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">W standardowym procesie p\u0142atno\u015bci PrestaShop, PayU poprawnie wy\u015bwietla\u0142o dost\u0119pne metody p\u0142atno\u015bci. Jednak w SuperCheckout brakowa\u0142o niekt\u00f3rych opcji p\u0142atno\u015bci.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Na przyk\u0142ad, w zale\u017cno\u015bci od konfiguracji i koszyka:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">BLIK nie by\u0142 stale widoczny.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Lista wyboru bank\u00f3w nie rozwin\u0119\u0142a si\u0119 prawid\u0142owo.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Brakowa\u0142o niekt\u00f3rych wierszy BNPL\/p\u0142atno\u015bci.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">W niekt\u00f3rych przypadkach BLIK pojawia\u0142 si\u0119, a potem znika\u0142.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Na pierwszy rzut oka wygl\u0105da\u0142o to na problem z API PayU. Ale nim nie by\u0142o.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Wa\u017cnym krokiem diagnostycznym by\u0142o por\u00f3wnanie przep\u0142ywu p\u0142atno\u015bci mi\u0119dzy domy\u015bln\u0105 kas\u0105 i SuperCheckout.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Je\u015bli ten sam modu\u0142 p\u0142atno\u015bci dzia\u0142a przy domy\u015blnym kasie, ale zawodzi w OPC, dochodzenie powinno obj\u0105\u0107 wi\u0119cej ni\u017c tylko interfejs API bramki p\u0142atniczej.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Musimy sprawdzi\u0107, w jaki spos\u00f3b OPC tworzy metody p\u0142atno\u015bci i jakie informacje przekazuje do modu\u0142\u00f3w p\u0142atno\u015bci.<\/span><\/p>\n<h2><strong>4.0 Kwota p\u0142atno\u015bci mo\u017ce mie\u0107 wp\u0142yw na widoczno\u015b\u0107 metody p\u0142atno\u015bci<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Szczeg\u00f3lnie wa\u017cnym elementem tego badania by\u0142a kwota w koszyku. Bramki p\u0142atnicze cz\u0119sto maj\u0105 minimalne i maksymalne limity transakcji. Na przyk\u0142ad:<\/span><\/p>\n<pre><b>Metoda p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Sprawd\u017a kwot\u0119 w koszyku<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Minimalna kwota? Maksymalna kwota?<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Uprawniony \/ Nieuprawniony<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Podczas badania zgodno\u015bci z PayU prze\u015bledzili\u015bmy logik\u0119 filtrowania metody p\u0142atno\u015bci, aby ustali\u0107, jaka kwota w koszyku jest przekazywana podczas kontroli metody p\u0142atno\u015bci.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Odpowiedni przep\u0142yw obejmowa\u0142 obliczenia koszyka PrestaShop i filtrowanie metody p\u0142atno\u015bci, w tym logik\u0119 obejmuj\u0105c\u0105:<\/span><\/p>\n<pre>Koszyk::OBA<\/pre>\n<p><span style=\"font-weight: 400;\">i:<\/span><\/p>\n<pre><b>PayMethodsCache::checkMinMax<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Ma to znaczenie, poniewa\u017c opcja p\u0142atno\u015bci mo\u017ce znikn\u0105\u0107 z procesu p\u0142atno\u015bci, a interfejs API nie zwr\u00f3ci b\u0142\u0119du.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Bramka mo\u017ce po prostu zosta\u0107 uznana za niekwalifikuj\u0105c\u0105 si\u0119 do otrzymania kwoty przez modu\u0142 p\u0142atno\u015bci. To daje nam wa\u017cn\u0105 regu\u0142\u0119 debugowania:<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Je\u015bli opcja p\u0142atno\u015bci zniknie z OPC, nie zak\u0142adaj od razu, \u017ce API p\u0142atno\u015bci jest uszkodzone. Najpierw sprawd\u017a kwot\u0119 koszyka, walut\u0119, minimalne\/maksymalne limity oraz warto\u015bci osi\u0105gaj\u0105ce kwalifikowalno\u015b\u0107 metody p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Staje si\u0119 to jeszcze wa\u017cniejsze, gdy w gr\u0119 wchodz\u0105 zni\u017cki, koszty wysy\u0142ki, podatki, vouchery lub niestandardowe kalkulacje p\u0142atno\u015bci.<\/span><\/p>\n<h2><strong>5.0 Dlaczego metody p\u0142atno\u015bci dzia\u0142aj\u0105 w domy\u015blnej kasie, ale nie dzia\u0142aj\u0105 w SuperCheckout<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Przydatnym sposobem zbadania tych problem\u00f3w jest por\u00f3wnanie dw\u00f3ch \u015brodowisk realizacji transakcji.<\/span><\/p>\n<h3><strong>5.1 Domy\u015blna kasa PrestaShop<\/strong><\/h3>\n<pre><b>Koszyk<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>FinderOpcjiP\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>haki paymentOptions<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Modu\u0142y p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Opcje p\u0142atno\u015bci<\/b><\/pre>\n<h3><strong>5.2 Wymeldowanie OPC<\/strong><\/h3>\n<pre><b>Koszyk<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>SuperKasa<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Metody P\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Modu\u0142y p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Dodatkowe przetwarzanie OPC<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Wyrenderowany interfejs u\u017cytkownika p\u0142atno\u015bci<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Drugi przep\u0142yw ma dodatkowe ruchome cz\u0119\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dlatego podczas debugowania problemu z p\u0142atno\u015bci\u0105 nie sprawdzamy tylko: \u201eCzy modu\u0142 p\u0142atno\u015bci dzia\u0142a?\u201d<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Sprawdzamy: <\/span><span style=\"font-weight: 400;\">\u201eCzy modu\u0142 p\u0142atno\u015bci dzia\u0142a, gdy jego dane wyj\u015bciowe s\u0105 przetwarzane i renderowane przez t\u0119 konkretn\u0105 implementacj\u0119 kasy?\u201d<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dzi\u0119ki temu rozr\u00f3\u017cnieniu zaoszcz\u0119dzono sporo czasu podczas debugowania.<\/span><\/p>\n<h2><strong>6.0 PaymentOption to tylko cz\u0119\u015b\u0107 integracji<\/strong><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/h2>\n<p><span style=\"font-weight: 400;\">Pocz\u0105wszy od PrestaShop 1.7, modu\u0142y p\u0142atno\u015bci zazwyczaj wykorzystuj\u0105 kod HTML do wyprowadzania p\u0142atno\u015bci za pomoc\u0105 starszej metody p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Opcja p\u0142atno\u015bci mo\u017ce zawiera\u0107 informacje takie jak:<\/span><\/p>\n<pre><b>$paymentOption<\/b>\r\n<b>-&gt;setCallToActionText(...)<\/b>\r\n<b>-&gt;ustawAkcj\u0119(...)<\/b>\r\n<b>-&gt;ustawWej\u015bcia(...)<\/b>\r\n<b>-&gt;ustawDodatkoweInformacje(...)<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">obiekt\u00f3w zamiast bezpo\u015brednio<\/span><\/p>\n<p><span style=\"font-weight: 400;\">R\u00f3\u017cne bramki wymagaj\u0105 r\u00f3\u017cnych kombinacji.<\/span><\/p>\n<h3><strong>6.1 Brama oparta na przekierowaniu<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Klient klika metod\u0119 p\u0142atno\u015bci i zostaje przekierowany do bramki p\u0142atniczej.<\/span><\/p>\n<pre><b>Zam\u00f3wienie<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Opcja p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Kontroler modu\u0142u<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Bramka<\/b><\/pre>\n<h3><strong>6.2 Wbudowany formularz p\u0142atno\u015bci<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Pola p\u0142atno\u015bci wy\u015bwietlane s\u0105 bezpo\u015brednio w kasie.<\/span><\/p>\n<pre><b>Zam\u00f3wienie<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Opcja p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Formularz karty\/p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Interfejs API bramy<\/b><\/pre>\n<h3><strong>6.3 P\u0142atno\u015b\u0107 oparta na ramkach iframe<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Interfejs bramki p\u0142atniczej jest osadzony w kasie.<\/span><\/p>\n<pre><b>Zam\u00f3wienie<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Opcja p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Iframe<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Bramka<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Ostatnie dwa podej\u015bcia wymagaj\u0105 szczeg\u00f3lnej uwagi, poniewa\u017c JavaScript, manipulacja DOM, \u0142adowanie ramek iframe i od\u015bwie\u017canie OPC mog\u0105 mie\u0107 wp\u0142yw na interfejs p\u0142atno\u015bci.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<h2><strong>7.0 JavaScript staje si\u0119 krytyczny w przypadku OPC<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">To jest obszar, kt\u00f3ry cz\u0119sto pomijany jest w og\u00f3lnych poradnikach dotycz\u0105cych integracji p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">OPC mo\u017ce dynamicznie od\u015bwie\u017ca\u0107 cz\u0119\u015bci procesu realizacji transakcji w przypadku zmiany klienta:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">adres dostawy<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">kraj<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">no\u015bnik<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">metoda p\u0142atno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">informacje rozliczeniowe<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Spos\u00f3b wysy\u0142ki<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Kiedy tak si\u0119 stanie, kod HTML dotycz\u0105cy p\u0142atno\u015bci mo\u017ce zosta\u0107 zast\u0105piony.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Zdarzenie JavaScript, kt\u00f3re dzia\u0142a\u0142o podczas pocz\u0105tkowego \u0142adowania strony, mo\u017ce przesta\u0107 dzia\u0142a\u0107 po od\u015bwie\u017ceniu AJAX.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Na przyk\u0142ad:<\/span><\/p>\n<pre><b>Pocz\u0105tkowe obci\u0105\u017cenie kasy<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Zainicjowano p\u0142atno\u015b\u0107 JS<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Klient zmienia dane dotycz\u0105ce p\u0142atno\u015bci\/wysy\u0142ki<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>OPC od\u015bwie\u017ca sekcj\u0119 p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Oryginalny DOM zast\u0105piony<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>P\u0142atno\u015b\u0107 JS nie jest ju\u017c do\u0142\u0105czona<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Mo\u017ce to powodowa\u0107 niejasne objawy.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Metoda p\u0142atno\u015bci mo\u017ce pojawi\u0107 si\u0119 pocz\u0105tkowo, ale klikni\u0119cie jej nic nie da. Ramka iframe mo\u017ce znikn\u0105\u0107.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Lista bank\u00f3w mo\u017ce przesta\u0107 si\u0119 rozszerza\u0107.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Opcja p\u0142atno\u015bci mo\u017ce pojawia\u0107 si\u0119 i znika\u0107 po zmianie innego pola p\u0142atno\u015bci.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dlatego te\u017c prace nad zapewnieniem kompatybilno\u015bci cz\u0119sto wymagaj\u0105 zmian nie tylko w PHP, ale tak\u017ce w JavaScript modu\u0142u p\u0142atno\u015bci.<\/span><\/p>\n<h2><strong>8.0 Prawdziwy przyk\u0142ad: SimplyLease + SuperCheckout<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Inny przyk\u0142ad dotyczy\u0142 integracji SimplyLease z SuperCheckout. Problem nie ogranicza\u0142 si\u0119 do API bramki.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Niekt\u00f3re elementy informacji i kalkulatora SimplyLease by\u0142y cz\u0119\u015bci\u0105 prezentacji p\u0142atno\u015bci i musia\u0142y poprawnie dzia\u0142a\u0107 w ramach procesu SuperCheckout.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Zmiany w zakresie kompatybilno\u015bci dotyczy\u0142y zar\u00f3wno szablon\u00f3w modu\u0142\u00f3w, jak i integracji JavaScript po stronie SuperCheckout. W\u015br\u00f3d plik\u00f3w znalaz\u0142y si\u0119:<\/span><\/p>\n<pre><b>modu\u0142y\/simplylease\/widoki\/szablony\/hook\/payment_info.tpl modu\u0142y\/simplylease\/widoki\/szablony\/hook\/product_calculator.tpl<\/b>\r\n\r\n<b>modu\u0142y\/supercheckout\/kontrolery\/front\/SupercheckoutCore.php modu\u0142y\/supercheckout\/widoki\/js\/front\/supercheckout.js\r\n<\/b><b>modu\u0142y\/supercheckout\/widoki\/js\/front\/simplylease_supercheckout.js<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">To dobry przyk\u0142ad, dlaczego zapewnienie kompatybilno\u015bci p\u0142atno\u015bci czasami wymaga wprowadzenia zmian poza samym modu\u0142em bramki p\u0142atniczej.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dostawca p\u0142atno\u015bci mo\u017ce udost\u0119pni\u0107 prawid\u0142owe dane, ale proces realizacji p\u0142atno\u015bci nadal musi:<\/span><\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Wyrenderuj to.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Zachowaj je podczas od\u015bwie\u017cania transakcji.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Zainicjuj wymagany JavaScript.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Zachowaj synchronizacj\u0119 informacji o p\u0142atno\u015bciach z bie\u017c\u0105cym koszykiem.<\/span><\/li>\n<\/ol>\n<h2><strong>9.0 Inny cz\u0119sty problem: brak metody p\u0142atno\u015bci<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Spotkali\u015bmy si\u0119 r\u00f3wnie\u017c z przypadkami, gdy metoda p\u0142atno\u015bci, np. Comfino, nie pojawia\u0142a si\u0119 w SuperCheckout, mimo \u017ce sam modu\u0142 p\u0142atno\u015bci by\u0142 zainstalowany i skonfigurowany.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Tego typu kwestie nale\u017cy bada\u0107 systematycznie.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Czek:<\/span><\/p>\n<h3><strong>9.1 Czy modu\u0142 jest aktywny?<\/strong><\/h3>\n<pre><b>$this-&gt;active<\/b><\/pre>\n<h3><strong>9.2 Czy waluta jest obs\u0142ugiwana?<\/strong><\/h3>\n<pre><b>$this-&gt;checkCurrency($params['koszyk'])<\/b><\/pre>\n<h3><strong>9.3 Czy kraj jest obs\u0142ugiwany?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Niekt\u00f3re bramki p\u0142atnicze ograniczaj\u0105 metody p\u0142atno\u015bci w zale\u017cno\u015bci od kraju klienta.<\/span><\/p>\n<h3><strong>9.4 Czy \u0142\u0105czna warto\u015b\u0107 koszyka mie\u015bci si\u0119 w limitach bramki p\u0142atniczej?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Minimalna i maksymalna warto\u015b\u0107 transakcji mo\u017ce uniemo\u017cliwi\u0107 wy\u015bwietlenie metody.<\/span><\/p>\n<h3><strong>9.5 Czy operator jest obs\u0142ugiwany?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Niekt\u00f3re modu\u0142y p\u0142atno\u015bci ograniczaj\u0105 metody p\u0142atno\u015bci w zale\u017cno\u015bci od przewo\u017anika.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<h3><strong>9.6 Czy filtrowanie OPC jest metod\u0105?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Modu\u0142 p\u0142atno\u015bci mo\u017ce zwraca\u0107 prawid\u0142owe metody, kt\u00f3re s\u0105 gromadzone, filtrowane lub renderowane.<\/span><span style=\"font-weight: 400;\"> Jednak OPC nadal mo\u017ce modyfikowa\u0107 spos\u00f3b p\u0142atno\u015bci<\/span><\/p>\n<h3><strong>9.7 Czy JavaScript ukrywa lub zast\u0119puje element?<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Metoda p\u0142atno\u015bci mo\u017ce teoretycznie zosta\u0107 zwr\u00f3cona przez PHP, ale nadal nie b\u0119dzie widoczna w ko\u0144cowym etapie p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dlatego narz\u0119dzia programistyczne przegl\u0105darek s\u0105 tak samo wa\u017cne jak logi PHP podczas debugowania integracji p\u0142atno\u015bci.<\/span><\/p>\n<h2><strong>10.0 haczyk\u00f3w, na kt\u00f3re naprawd\u0119 musimy zwr\u00f3ci\u0107 uwag\u0119<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Niestandardowej integracji p\u0142atno\u015bci nie nale\u017cy traktowa\u0107 jako implementacji pojedynczego haka.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dok\u0142adne haki zale\u017c\u0105 od architektury bramki i kasy, ale niekt\u00f3re s\u0105 szczeg\u00f3lnie wa\u017cne.<\/span><\/p>\n<h3>10.1 Opcje p\u0142atno\u015bci<\/h3>\n<p><span style=\"font-weight: 400;\">To jest podstawowy spos\u00f3b ujawnienia metody p\u0142atno\u015bci podczas realizacji transakcji.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Jest odpowiedzialny za powr\u00f3t<\/span> opcje p\u0142atno\u015bci <span style=\"font-weight: 400;\">obiekty.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Typowe kontrole obejmuj\u0105:<\/span><\/p>\n<pre><b>je\u015bli (!$this-&gt;active) { return [];<\/b>\r\n<b>}<\/b>\r\n<b>je\u015bli (!$this-&gt;checkCurrency($params['cart'])) { return [];<\/b>\r\n<b>}<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Nast\u0119pnie mo\u017cna zastosowa\u0107 dodatkowe ograniczenia specyficzne dla bramy.<\/span><\/p>\n<h3>10.2 Zwroty p\u0142atno\u015bci<\/h3>\n<p><span style=\"font-weight: 400;\">Jest to u\u017cywane po zako\u0144czeniu lub powrocie klienta z procesu p\u0142atno\u015bci. Mo\u017ce wy\u015bwietla\u0107:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">numer referencyjny zam\u00f3wienia<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">status p\u0142atno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">dodatkowe instrukcje dotycz\u0105ce p\u0142atno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">informacje specyficzne dla bramy<\/span><\/li>\n<\/ul>\n<h3>10.3 actionPresentPaymentOptions<\/h3>\n<p><span style=\"font-weight: 400;\">Ten w\u0105tek staje si\u0119 szczeg\u00f3lnie interesuj\u0105cy, gdy w gr\u0119 wchodzi wiele modu\u0142\u00f3w p\u0142atno\u015bci i OPC.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dzia\u0142a na podstawie zgromadzonych opcji p\u0142atno\u015bci i mo\u017ce okaza\u0107 si\u0119 przydatny, gdy kasjer musi sprawdzi\u0107 lub zmodyfikowa\u0107 ca\u0142\u0105 kolekcj\u0119 opcji p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">R\u00f3\u017cni si\u0119 to od wdra\u017cania opcji p\u0142atno\u015bci pojedynczej bramki<\/span> <span style=\"font-weight: 400;\">hak.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Wa\u017cne jest to rozr\u00f3\u017cnienie:<\/span><\/p>\n<pre><b>opcje p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Ka\u017cdy modu\u0142 p\u0142atno\u015bci wnosi swoj\u0105 opcj\u0119<\/b>\r\n<b>actionPresentPaymentOptions<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Z\u0142o\u017cone opcje p\u0142atno\u015bci mog\u0105 zosta\u0107 przetworzone<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Podczas debugowania zgodno\u015bci OPC zrozumienie, gdzie pobierane s\u0105 opcje p\u0142atno\u015bci, a gdzie s\u0105 one ostatecznie prezentowane, mo\u017ce decydowa\u0107 o tym, czy problem zostanie szybko rozwi\u0105zany, czy trzeba b\u0119dzie sp\u0119dzi\u0107 wiele godzin w module bramki.<\/span><\/p>\n<h2><strong>11.0 Tworzenie zam\u00f3wie\u0144: Nigdy nie ufaj przegl\u0105darce<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Gdy p\u0142atno\u015b\u0107 dotrze do bramki, kolejnym kluczowym krokiem jest utworzenie zam\u00f3wienia. Najwa\u017cniejsz\u0105 metod\u0105 PrestaShop jest tutaj:<\/span><\/p>\n<pre>walidujZam\u00f3wienie()<\/pre>\n<p><span style=\"font-weight: 400;\">Uproszczony przyk\u0142ad:<\/span><\/p>\n<pre><b>$this-&gt;module-&gt;validateOrder(<\/b>\r\n<b>$cart-&gt;id, Konfiguracja::get('PS_OS_PAYMENT'),<\/b>\r\n<b>$amountPaid,<\/b>\r\n<b>Metoda p\u0142atno\u015bci,<\/b>\r\n<b>wiadomo\u015b\u0107, [],<\/b>\r\n<b>null, false,<\/b>\r\n<b>$customer-&gt;secure_key<\/b>\r\n<b>);<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Na szczeg\u00f3ln\u0105 uwag\u0119 zas\u0142uguj\u0105 trzy warto\u015bci:<\/span><\/p>\n<h3><strong>11.1 Identyfikator koszyka<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Koszyk musi nale\u017ce\u0107 do oczekiwanego klienta\/oczekiwanej sesji i musi by\u0107 wa\u017cny.<\/span><\/p>\n<h3><strong>11.2 Kwota p\u0142atno\u015bci<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Nie stosuj bezmy\u015blnie:<\/span><\/p>\n<pre><b>$cart-&gt;getOrderTotal()<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">jako dow\u00f3d, \u017ce bramka otrzyma\u0142a t\u0119 kwot\u0119.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Kwota powinna zosta\u0107 zweryfikowana na podstawie odpowiedzi bramki.<\/span><\/p>\n<h3><strong>11.3 Klucz bezpieczny<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Klient <\/span><span style=\"font-weight: 400;\">musi by\u0107 prawid\u0142owo powi\u0105zany z koszykiem\/przep\u0142ywem zam\u00f3wie\u0144.<\/span><\/p>\n<h2><strong>12.0 Webhooki musz\u0105 by\u0107 idempotentne<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Bramka p\u0142atno\u015bci mo\u017ce wys\u0142a\u0107 ten sam webhook wi\u0119cej ni\u017c raz. Na przyk\u0142ad:<\/span><\/p>\n<pre><b>Bramka<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>webhook<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Tw\u00f3j serwer<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Odpowied\u017a 200<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Je\u017celi odpowied\u017a zostanie utracona:<\/span><\/p>\n<pre><b>Bramka<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>webhook<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Tw\u00f3j serwer<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Odpowied\u017a utracona<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Ponowne pr\u00f3by bramy<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Je\u015bli integracja tworzy zam\u00f3wienie za ka\u017cdym razem, gdy otrzymuje webhook, mo\u017cliwe jest duplikowanie zam\u00f3wie\u0144. Dlatego wywo\u0142anie zwrotne powinno sprawdzi\u0107, czy koszyk zawiera ju\u017c zam\u00f3wienie, przed utworzeniem kolejnego. Koncepcyjnie:<\/span><\/p>\n<pre><b>je\u015bli ($cart-&gt;OrderExists()) {<\/b>\r\n<b>\/\/ Ju\u017c przetworzone<\/b>\r\n<b>\/\/ Zwr\u00f3\u0107 pomy\u015bln\u0105 odpowied\u017a<\/b>\r\n<b>}<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Obs\u0142ug\u0119 webhook\u00f3w nale\u017cy zaplanowa\u0107 w taki spos\u00f3b, aby umo\u017cliwi\u0107 bezpieczne przetwarzanie powtarzaj\u0105cych si\u0119 powiadomie\u0144.<\/span><\/p>\n<h2><strong>13.0 P\u0142atno\u015bci synchroniczne i asynchroniczne<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Nie ka\u017cda bramka p\u0142atnicza potwierdza p\u0142atno\u015b\u0107 od razu.<\/span><\/p>\n<h3><strong>13.1 Synchroniczne<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Bramka natychmiast potwierdza transakcj\u0119.<\/span><\/p>\n<pre><b>Klient<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Bramka<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>P\u0142atno\u015b\u0107 zatwierdzona<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>walidujZam\u00f3wienie()<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>P\u0141ATNO\u015a\u0106 PS_OS<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Potwierdzenie<\/b><\/pre>\n<h3><strong>13.2 Asynchroniczny<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Klient mo\u017ce dokona\u0107 zwrotu przed otrzymaniem ostatecznego potwierdzenia p\u0142atno\u015bci.<\/span><\/p>\n<pre><b>Klient<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Bramka<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Wr\u00f3\u0107 do sklepu<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Oczekuj\u0105ce zam\u00f3wienie<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>webhook<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Zweryfikuj p\u0142atno\u015b\u0107<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Zmie\u0144 stan zam\u00f3wienia<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>P\u0142atno\u015b\u0107 zaakceptowana<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">W przypadku bramek asynchronicznych korzystanie z dedykowanego stanu zam\u00f3wienia oczekuj\u0105cego jest cz\u0119sto bezpieczniejsze ni\u017c natychmiastowe oznaczenie zam\u00f3wienia jako op\u0142acone.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Po potwierdzeniu p\u0142atno\u015bci przez webhook:<\/span><\/p>\n<pre><b>$history = nowa HistoriaZam\u00f3wie\u0144();<\/b>\r\n<b>$history-&gt;id_order = (int) $order-&gt;id;<\/b>\r\n<b>$history-&gt;changeIdOrderState( Konfiguracja::get('PS_OS_PAYMENT'),<\/b>\r\n<b>Zam\u00f3wienie<\/b>\r\n<b>);<\/b>\r\n<b>$history-&gt;addWithemail(true);<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Dzi\u0119ki temu zmiana stanu zam\u00f3wienia odbywa si\u0119 za po\u015brednictwem mechanizmu historii zam\u00f3wie\u0144 PrestaShop, a nie po prostu poprzez zmian\u0119 warto\u015bci w bazie danych.<\/span><\/p>\n<h2><strong>14.0 Jedna z najprzydatniejszych technik debugowania: por\u00f3wnanie przep\u0142yw\u00f3w realizacji transakcji<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Je\u015bli metoda p\u0142atno\u015bci dzia\u0142a w domy\u015blnym punkcie realizacji transakcji, ale nie w OPC, zalecamy por\u00f3wnanie ca\u0142ego procesu.<\/span><\/p>\n<h3><strong>Krok 1: Sprawd\u017a PHP<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Czy hookPaymentOptions() <\/span><span style=\"font-weight: 400;\">wykonany?<\/span><\/p>\n<h3><strong>Krok 2: Sprawd\u017a zwr\u00f3cone opcje<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Czy modu\u0142 p\u0142atno\u015bci faktycznie zwraca<\/span> opcja p\u0142atno\u015bci<span style=\"font-weight: 400;\">?<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<h3><strong>Krok 3: Sprawd\u017a koszyk<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Por\u00f3wna\u0107:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">ca\u0142kowity<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">waluta<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">klient<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">kraj<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">no\u015bnik<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">rabaty<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">podatki<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u017cegluga<\/span><\/li>\n<\/ul>\n<h3><strong>Krok 4: Sprawd\u017a przegl\u0105dark\u0119<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Szuka\u0107:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">B\u0142\u0119dy JavaScript<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">brakuj\u0105ce elementy DOM<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u017b\u0105dania AJAX<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">nieudane \u017c\u0105dania<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">b\u0142\u0119dy iframe<\/span><\/li>\n<\/ul>\n<h3><strong>Krok 5: Sprawd\u017a OPC<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Okre\u015bl, czy SuperCheckout jest:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">filtrowanie opcji p\u0142atno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">zast\u0105pienie jego kodu HTML<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">od\u015bwie\u017canie sekcji p\u0142atno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">zmiana koszyka przed uruchomieniem modu\u0142u p\u0142atno\u015bci<\/span><\/li>\n<\/ul>\n<h3><strong>Krok 6: Sprawd\u017a bram\u0119<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Dopiero po potwierdzeniu lokalnego przep\u0142ywu p\u0142atno\u015bci mo\u017cna rozpocz\u0105\u0107 dochodzenie w celu dok\u0142adniejszego sprawdzenia:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Uwierzytelnianie API<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">\u017c\u0105danie \u0142adunku<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">podpis<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">odpowied\u017a<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">hak sieciowy<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">dzienniki bramy<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">To podej\u015bcie wielowarstwowe jest o wiele szybsze ni\u017c ka\u017cdorazowe zaczynanie od interfejsu API bramy.<\/span><\/p>\n<h2><strong>15.0 Typowe problemy z integracj\u0105 p\u0142atno\u015bci, kt\u00f3re zaobserwowali\u015bmy<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Prace nad zapewnieniem zgodno\u015bci ze standardami rzeczywistymi zwykle ujawniaj\u0105 problemy, kt\u00f3re nie s\u0105 oczywiste w dokumentacji bramy.<\/span><\/p>\n<h3><strong>15.1 Opcja p\u0142atno\u015bci znika<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Mo\u017cliwe przyczyny:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">nieobs\u0142ugiwana waluta<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">ograniczenie kraju<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">kwota w koszyku poza limitami bramki<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">ograniczenie przewo\u017anika<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Filtrowanie OPC<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">konfiguracja modu\u0142u p\u0142atno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">JavaScript ukrywa metod\u0119<\/span><\/li>\n<\/ul>\n<h3><strong>15.2 BLIK lub inna opcja p\u0142atno\u015bci pojawia si\u0119 i znika<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Mo\u017cliwe przyczyny:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">sprawd\u017a od\u015bwie\u017cenie AJAX<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">ponowne renderowanie opcji p\u0142atno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Inicjalizacja JavaScript<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">ca\u0142kowita suma koszyka ulega zmianie<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">kwalifikowalno\u015b\u0107 do bramki jest przeliczana<\/span><\/li>\n<\/ul>\n<h3><strong>15.3 Lista bank\u00f3w nie rozszerza si\u0119<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Cz\u0119sto badaj:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">B\u0142\u0119dy JavaScript<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">dynamicznie zast\u0119powane elementy DOM<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">obs\u0142ugi zdarze\u0144 do\u0142\u0105czone przed od\u015bwie\u017ceniem OPC<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">inicjalizacja JavaScript dostawcy p\u0142atno\u015bci<\/span><\/li>\n<\/ul>\n<h3><strong>15.4 Iframe znika<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Zbada\u0107:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">od\u015bwie\u017cenie kasy<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">inicjalizacja iframe<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Zast\u0105pienie DOM<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Wykonywanie JavaScript po aktualizacjach AJAX<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/li>\n<\/ul>\n<h3><strong>15.5 P\u0142atno\u015b\u0107 powiod\u0142a si\u0119, ale zam\u00f3wienie pozostaje w toku<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Czek:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">adres URL webhooka<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">dostarczanie webhook\u00f3w<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">weryfikacja podpisu<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">wyszukiwanie koszyka\/zam\u00f3wienia<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">przej\u015bcie mi\u0119dzy stanami zam\u00f3wienia<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">uwierzytelnianie zwrotne<\/span><\/li>\n<\/ul>\n<h3><strong>15.6 Metoda p\u0142atno\u015bci dzia\u0142a w domy\u015blnym kasie, ale nie OPC<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Jest to mocny sygna\u0142, \u017ce problem mo\u017ce dotyczy\u0107 interakcji mi\u0119dzy modu\u0142em p\u0142atno\u015bci i OPC, a nie samego interfejsu API bramki p\u0142atniczej.<\/span><\/p>\n<h2><strong>16.0 Wymagania bezpiecze\u0144stwa dla modu\u0142u p\u0142atno\u015bci<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Modu\u0142y p\u0142atno\u015bci obs\u0142uguj\u0105 wra\u017cliwe operacje, wi\u0119c bezpiecze\u0144stwo nie mo\u017ce by\u0107 traktowane jako opcjonalne ulepszenie. Minimum:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Sprawd\u017a poprawno\u015b\u0107 podpis\u00f3w wywo\u0142a\u0144 zwrotnych.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Sprawd\u017a powi\u0105zanie koszyka z klientem.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">U\u017cyj protoko\u0142u HTTPS.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Sprawd\u017a poprawno\u015b\u0107 certyfikat\u00f3w TLS.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Nigdy nie ufaj statusowi p\u0142atno\u015bci podawanemu wy\u0142\u0105cznie przez przegl\u0105dark\u0119.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Nigdy nie przechowuj surowych informacji o kartach, chyba \u017ce architektura i wymagania dotycz\u0105ce zgodno\u015bci wyra\u017anie to uzasadniaj\u0105.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Nie rejestruj poufnych informacji dotycz\u0105cych p\u0142atno\u015bci.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">\n<pre><span style=\"font-weight: 400;\">Unikaj serialize() i unserialize() <\/span>\/ dla niezaufanych danych zewn\u0119trznych.<\/pre>\n<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Sprawd\u017a poprawno\u015b\u0107 i rzutowanie warto\u015bci przychodz\u0105cych.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Chro\u0144 niestandardowe punkty ko\u0144cowe AJAX i wywo\u0142ania zwrotne.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">W razie potrzeby u\u017cywaj bezpiecznych token\u00f3w.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Ustaw przetwarzanie webhook\u00f3w jako idempotentne.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Strona informuj\u0105ca o pomy\u015blnej p\u0142atno\u015bci nie stanowi dowodu dokonania p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">O tym, czy zam\u00f3wienie zostanie uznane za op\u0142acone, powinna decydowa\u0107 zweryfikowana odpowied\u017a serwera bramki p\u0142atniczej.<\/span><\/p>\n<h2><strong>17.0 Jakie zmiany nast\u0105pi\u0105 przy obs\u0142udze wielu modu\u0142\u00f3w p\u0142atno\u015bci?<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Inn\u0105 lekcj\u0105, jak\u0105 mo\u017cna wyci\u0105gn\u0105\u0107 z prac nad zgodno\u015bci\u0105 z OPC, jest to, \u017ce dodanie drugiego lub trzeciego modu\u0142u p\u0142atno\u015bci mo\u017ce ujawni\u0107 problemy, kt\u00f3re nie by\u0142y widoczne, gdy istnia\u0142a tylko jedna metoda p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Na przyk\u0142ad:<\/span><\/p>\n<pre><b>PayPal <\/b><b>PayU<\/b>\r\n<b>Comfino<\/b>\r\n<b>SimplyLease<\/b>\r\n<b>iDeal<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Wszystkie mog\u0105 mie\u0107 przypisane opcje p\u0142atno\u015bci do tej samej p\u0142atno\u015bci. W zwi\u0105zku z tym p\u0142atno\u015b\u0107 musi uwzgl\u0119dnia\u0107 r\u00f3\u017cne:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Struktury HTML<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">JAVASCRIPT<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">wymagania dotycz\u0105ce ramek iframe<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">przekierowania<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">Przep\u0142ywy API<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">zasady kwalifikowalno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">minimalne\/maksymalne kwoty<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">asynchroniczne wywo\u0142ania zwrotne<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Zmiana wprowadzona dla jednej metody p\u0142atno\u015bci mo\u017ce przypadkowo wp\u0142yn\u0105\u0107 na inn\u0105. Dlatego poprawki dotycz\u0105ce kompatybilno\u015bci p\u0142atno\u015bci powinny mie\u0107 w\u0105ski zakres.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Na przyk\u0142ad zamiast zmienia\u0107 globalnie ca\u0142\u0105 logik\u0119 przetwarzania opcji p\u0142atno\u015bci, zidentyfikuj konkretn\u0105 metod\u0119 p\u0142atno\u015bci i zastosuj obs\u0142ug\u0119 zgodno\u015bci tylko tam, gdzie jest to wymagane.<\/span><\/p>\n<h2><strong>18.0 Testowanie powinno obejmowa\u0107 rzeczywiste scenariusze koszyk\u00f3w<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Testowanie bramki p\u0142atniczej z prostym produktem o warto\u015bci 10 \u20ac to za ma\u0142o. Prawid\u0142owa matryca testowa powinna zawiera\u0107:<\/span><\/p>\n<table class=\"table table-hover\">\n<tbody>\n<tr>\n<td><strong>Scenariusz<\/strong><\/td>\n<td><strong>Co zweryfikowa\u0107<\/strong><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Pojedynczy produkt<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Pojawia si\u0119 opcja p\u0142atno\u015bci<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Wiele produkt\u00f3w<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Prawid\u0142owa kwota dociera do bramki<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Zni\u017cka<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Ostateczna kwota do zap\u0142aty jest prawid\u0142owa<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Op\u0142ata transportowa<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Bramka otrzymuje prawid\u0142ow\u0105 sum\u0119<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Podatek<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Kwota bramki pasuje do zam\u00f3wienia<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Minimalna kwota bramki<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Metoda pojawia si\u0119\/znika poprawnie<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Maksymalna kwota bramki<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Metoda pojawia si\u0119\/znika poprawnie<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Nieobs\u0142ugiwana waluta<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Metoda jest ukryta<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Nieobs\u0142ugiwany kraj<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Metoda jest ukryta<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Domy\u015blne zam\u00f3wienie<\/span><\/td>\n<td><span style=\"font-weight: 400;\">P\u0142atno\u015bci dzia\u0142aj\u0105<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">OPC<\/span><\/td>\n<td><span style=\"font-weight: 400;\">P\u0142atno\u015bci dzia\u0142aj\u0105<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Kasa mobilna<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Interfejs u\u017cytkownika dzia\u0142a<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Nieudana p\u0142atno\u015b\u0107<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Prawid\u0142owy stan zam\u00f3wienia\/p\u0142atno\u015bci<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Pomy\u015blna p\u0142atno\u015b\u0107<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Zam\u00f3wienie zosta\u0142o utworzone poprawnie<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Ponowna pr\u00f3ba webhooka<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Brak duplikat\u00f3w zam\u00f3wie\u0144<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Porzucenie klienta<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Brak b\u0142\u0119dnie op\u0142aconego zam\u00f3wienia<\/span><\/td>\n<\/tr>\n<tr>\n<td><span style=\"font-weight: 400;\">Przekroczono limit czasu bramy<\/span><\/td>\n<td><span style=\"font-weight: 400;\">Popraw obs\u0142ug\u0119 oczekuj\u0105cych\/b\u0142\u0119d\u00f3w<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><span style=\"font-weight: 400;\">W przypadku integracji OPC nale\u017cy r\u00f3wnie\u017c przetestowa\u0107 od\u015bwie\u017canie checkoutu. Zmie\u0144:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">adres<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">no\u015bnik<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">kraj<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">metoda p\u0142atno\u015bci<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">ilo\u015b\u0107<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><span style=\"font-weight: 400;\">rabat<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">i sprawd\u017a, czy opcje p\u0142atno\u015bci s\u0105 prawid\u0142owe po ka\u017cdym od\u015bwie\u017ceniu.<\/span><\/p>\n<h2><strong>19.0 Praktyczne podej\u015bcie do rozwoju<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Bior\u0105c pod uwag\u0119 problemy, kt\u00f3re cz\u0119sto pojawiaj\u0105 si\u0119 w rzeczywistych integracjach, najbezpieczniejsza kolejno\u015b\u0107 rozwoju wygl\u0105da nast\u0119puj\u0105co:<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<h3><strong>19.1 Spraw, aby bramka dzia\u0142a\u0142a z domy\u015bln\u0105 p\u0142atno\u015bci\u0105 PrestaShop<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Najpierw ustal, \u017ce:<\/span><\/p>\n<pre><b>Opcja p\u0142atno\u015bci<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>\u017b\u0105danie bramki<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Odpowied\u017a bramy<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>walidujZam\u00f3wienie()<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Potwierdzenie<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">dzia\u0142a prawid\u0142owo.<\/span><\/p>\n<h3><strong>19.2 Dodaj przetwarzanie wywo\u0142ania zwrotnego\/webhooka<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Nie pozostawiaj asynchronicznego potwierdzenia na koniec.<\/span><\/p>\n<h3><strong>19.3 Dodaj odpowiedni\u0105 obs\u0142ug\u0119 stanu zam\u00f3wienia<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Test:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">sukces<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">brak<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">w oczekiwaniu<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Timeout<\/span><\/li>\n<\/ul>\n<h3><strong>19.4 Test z realistycznymi w\u00f3zkami<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">U\u017cyj rabat\u00f3w, koszt\u00f3w wysy\u0142ki, podatk\u00f3w, r\u00f3\u017cnych walut i r\u00f3\u017cnych sum.<\/span><\/p>\n<h3><strong>19.5 Integracja z OPC<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Dopiero gdy podstawowy przep\u0142yw danych b\u0119dzie stabilny, mo\u017cna sprawdzi\u0107 kompatybilno\u015b\u0107 z SuperCheckout.<\/span><\/p>\n<h3><strong>19.6 Testowanie JavaScript i dynamiczne od\u015bwie\u017canie<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Jest to szczeg\u00f3lnie istotne w przypadku osadzonych formularzy p\u0142atno\u015bci, ramek iframe, interfejs\u00f3w BLIK\/wyboru banku i innych interaktywnych komponent\u00f3w p\u0142atno\u015bci.<\/span><\/p>\n<h3><strong>19.7 Przetestuj wszystkie metody p\u0142atno\u015bci razem<\/strong><\/h3>\n<p><span style=\"font-weight: 400;\">Kas\u0119 obs\u0142uguj\u0105c\u0105 pi\u0119\u0107 metod p\u0142atno\u015bci nale\u017cy testowa\u0107 jako system, a nie jako pi\u0119\u0107 oddzielnych modu\u0142\u00f3w.<\/span><\/p>\n<h2><strong>20.0 Czy powiniene\u015b zbudowa\u0107 niestandardow\u0105 bramk\u0119 czy wykorzysta\u0107 istniej\u0105cy modu\u0142?<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Nie ka\u017cda brama sieciowa uzasadnia niestandardow\u0105 integracj\u0119. Niestandardowy modu\u0142 ma sens, gdy:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">brama jest regionalna lub niszowa<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">nie ma utrzymywanego modu\u0142u PrestaShop<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">brama wymaga niestandardowej logiki biznesowej<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">potrzebujesz konkretnego procesu subskrypcji lub rozlicze\u0144<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">potrzebujesz funkcjonalno\u015bci, kt\u00f3rej istniej\u0105ce modu\u0142y nie mog\u0105 zapewni\u0107<\/span><\/li>\n<\/ul>\n<p><span style=\"font-weight: 400;\">Ale zbudowanie integracji p\u0142atno\u015bci oznacza r\u00f3wnie\u017c przyj\u0119cie odpowiedzialno\u015bci za jej utrzymanie. Zmiany w PrestaShop.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Zmiany w PHP. Zmiany w API bramek.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Zmieniaj\u0105 si\u0119 wymagania bezpiecze\u0144stwa. Zmieniaj\u0105 si\u0119 modu\u0142y p\u0142atno\u015bci.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">A ostatecznie dostawca p\u0142atno\u015bci wprowadza zmiany, kt\u00f3re zak\u0142\u00f3caj\u0105 stabiln\u0105 integracj\u0119.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">W przypadku popularnych bramek p\u0142atniczych posiadanie i utrzymywanie odpowiedniego modu\u0142u mo\u017ce okaza\u0107 si\u0119 znacznie ta\u0144sze ni\u017c utrzymywanie przez kilka lat w\u0142asnego kodu p\u0142atno\u015bci.<\/span><\/p>\n<h2><strong>21.0 Wi\u0119ksza lekcja z integracji p\u0142atno\u015bci PrestaShop<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Najwa\u017cniejsz\u0105 lekcj\u0105 p\u0142yn\u0105c\u0105 z pracy z bramkami p\u0142atniczymi jest to, \u017ce API cz\u0119sto nie jest najtrudniejsz\u0105 cz\u0119\u015bci\u0105. Wysy\u0142anie:<\/span><\/p>\n<pre><b>\u017b\u0105danie API <\/b><span style=\"font-weight: 400;\">\u2192 <\/span><b>Odpowied\u017a API<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">jest zazwyczaj proste.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Najtrudniejsz\u0105 cz\u0119\u015bci\u0105 jest wszystko, co j\u0105 otacza:<\/span><\/p>\n<pre><span style=\"font-weight: 400;\">\u250c\u2500\u2500 <\/span><b>Zasady walutowe<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Zasady obowi\u0105zuj\u0105ce w danym kraju<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Kwota koszyka<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Ograniczenia operatora<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>OPC<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>JAVASCRIPT<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>IFrame<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Od\u015bwie\u017canie AJAX<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>webhook<\/b>\r\n<span style=\"font-weight: 400;\">\u251c\u2500\u2500 <\/span><b>Stany zam\u00f3wienia<\/b>\r\n<span style=\"font-weight: 400;\">\u2514\u2500\u2500 <\/span><b>Duplikaty powiadomie\u0144<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Klient <\/b><span style=\"font-weight: 400;\">\u2192 <\/span><b>Zam\u00f3wienie <\/b><span style=\"font-weight: 400;\">\u2192 <\/span><b>Modu\u0142 P\u0142atno\u015bci <\/b><span style=\"font-weight: 400;\">\u2192 <\/span><b>Bramka<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Tworzenie zam\u00f3wienia<\/b>\r\n<span style=\"font-weight: 400;\">\u2193<\/span>\r\n<b>Potwierdzenie zam\u00f3wienia<\/b><\/pre>\n<p><span style=\"font-weight: 400;\">Integracja p\u0142atno\u015bci powiedzie si\u0119 tylko wtedy, gdy ca\u0142y \u0142a\u0144cuch zachowuje si\u0119 sp\u00f3jnie.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Dlatego te\u017c problem\u00f3w takich jak \u201eBrak BLIKA\u201d lub \u201elista bank\u00f3w si\u0119 nie otwiera\u201d nie nale\u017cy od razu traktowa\u0107 jako problemu zwi\u0105zanego z bramk\u0105 API.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Rzeczywist\u0105 przyczyn\u0105 mo\u017ce by\u0107 obliczenie warto\u015bci koszyka, sprawdzenie kwalifikowalno\u015bci metody p\u0142atno\u015bci, renderowanie OPC, inicjalizacja JavaScript lub od\u015bwie\u017cenie AJAX zast\u0119puj\u0105ce interfejs p\u0142atno\u015bci.<\/span><\/p>\n<h2><strong>22.0 Ostateczna lista kontrolna dla niestandardowej bramki p\u0142atno\u015bci PrestaShop<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Przed uznaniem integracji za zako\u0144czon\u0105 nale\u017cy sprawdzi\u0107:<\/span><\/p>\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Modu\u0142 p\u0142atno\u015bci rozszerza si\u0119<\/span> <strong>Modu\u0142 p\u0142atno\u015bci<\/strong>.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><b>opcje p\u0142atno\u015bci <\/b><span style=\"font-weight: 400;\">jest zaimplementowany poprawnie.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><b>Zwrot p\u0142atno\u015bci <\/b><span style=\"font-weight: 400;\">jest wdra\u017cany tam, gdzie jest to wymagane.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Opcje p\u0142atno\u015bci<\/span> Opcje p\u0142atno\u015bci.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Sprawdzane s\u0105 ograniczenia walutowe.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">W stosownych przypadkach sprawdzane s\u0105 ograniczenia dotycz\u0105ce kraju i operatora.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Suma w koszyku zosta\u0142a zweryfikowana.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Odpowiedzi bramki zosta\u0142y zweryfikowane.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Podpisy wywo\u0142ania zwrotnego s\u0105 sprawdzane.<\/span><span style=\"font-weight: 400;\"><br \/>\n<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\"><strong>Sprawd\u017a zam\u00f3wienie ()<\/strong> zostanie wywo\u0142ana dopiero po pomy\u015blnej weryfikacji p\u0142atno\u015bci.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Kwota u\u017cyta do zam\u00f3wienia jest weryfikowana na podstawie odpowiedzi bramki p\u0142atniczej.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Webhooki s\u0105 idempotentne.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Zduplikowane powiadomienia nie powoduj\u0105 duplikowania zam\u00f3wie\u0144.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Zastosowano prawid\u0142ow\u0105 kolejno\u015b\u0107 stan\u00f3w.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Nieudane i oczekuj\u0105ce p\u0142atno\u015bci s\u0105 obs\u0142ugiwane osobno.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Dane dotycz\u0105ce p\u0142atno\u015bci nigdy nie s\u0105 niepotrzebnie rejestrowane ani przechowywane.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Wymuszony jest protok\u00f3\u0142 HTTPS.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Domy\u015blna p\u0142atno\u015b\u0107 PrestaShop zosta\u0142a przetestowana.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">OPC zosta\u0142o przetestowane osobno.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">JavaScript zosta\u0142 przetestowany po od\u015bwie\u017ceniu AJAX.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Przetestowano ramki iframe i interaktywne elementy p\u0142atno\u015bci.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Przetestowano wiele modu\u0142\u00f3w p\u0142atno\u015bci jednocze\u015bnie.<\/span><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"2\"><span style=\"font-weight: 400;\">Przetestowano realistyczne koszyki z rabatami i wysy\u0142k\u0105.<\/span><\/li>\n<\/ul>\n<h2><strong>Wniosek<\/strong><\/h2>\n<p><span style=\"font-weight: 400;\">Spersonalizowana bramka p\u0142atno\u015bci w PrestaShop to co\u015b wi\u0119cej ni\u017c integracja API.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">API to tylko jeden z element\u00f3w implementacji. Prawdziwe wyzwanie in\u017cynieryjne zaczyna si\u0119, gdy modu\u0142 p\u0142atno\u015bci musi wsp\u00f3\u0142istnie\u0107 z finalizacj\u0105 zam\u00f3wienia PrestaShop, OPC, takim jak SuperCheckout, innymi modu\u0142ami p\u0142atno\u015bci, dynamicznym JavaScriptem, przeliczaniem koszyka i asynchronicznymi wywo\u0142aniami zwrotnymi bramki.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Nasze do\u015bwiadczenia z problemami ze zgodno\u015bci\u0105 p\u0142atno\u015bci utwierdzi\u0142y nas w przekonaniu, \u017ce nale\u017cy zawsze najpierw zlokalizowa\u0107 miejsce wyst\u0105pienia b\u0142\u0119du, a dopiero potem wprowadza\u0107 zmiany w kodzie.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Je\u015bli metoda p\u0142atno\u015bci nie jest zwracana przez PHP, sprawd\u017a modu\u0142 p\u0142atno\u015bci i jego zasady kwalifikowalno\u015bci. Je\u015bli PHP zwraca metod\u0119, ale klient jej nie widzi, sprawd\u017a OPC i renderowanie front-endu. Je\u015bli interfejs u\u017cytkownika pojawia si\u0119, ale nie odpowiada, sprawd\u017a JavaScript i od\u015bwie\u017canie AJAX. Je\u015bli p\u0142atno\u015b\u0107 si\u0119 powiedzie, ale zam\u00f3wienie pozostaje oczekuj\u0105ce, sprawd\u017a wywo\u0142anie zwrotne i przep\u0142yw stanu zam\u00f3wienia.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">To podej\u015bcie jest o wiele bardziej niezawodne ni\u017c zak\u0142adanie, \u017ce ka\u017cdy problem z p\u0142atno\u015bciami jest problemem API.<\/span><\/p>\n<p><span style=\"font-weight: 400;\">Deweloperzy pracuj\u0105cy nad integracj\u0105 p\u0142atno\u015bci PrestaShop nie powinni skupia\u0107 si\u0119 wy\u0142\u0105cznie na tym, aby bramka akceptowa\u0142a transakcj\u0119. Chodzi o to, aby ca\u0142y cykl p\u0142atno\u015bci by\u0142 niezawodny \u2013 od pierwszego wy\u015bwietlenie zam\u00f3wienia do finalizacji zam\u00f3wienia \u2013 nawet w przypadku korzystania z wielu metod p\u0142atno\u015bci i niestandardowego OPC.<\/span><\/p>\n<div class=\"thecontent\">\n<div class=\"thecontent\">\n<p>Je\u015bli masz pytania lub potrzebujesz pomocy w zakresie wydajno\u015bci lub migracji witryny, nasi eksperci s\u0105 do Twojej dyspozycji. Skontaktuj si\u0119 z zespo\u0142em Knowband pod adresem\u00a0<a href=\"\/pl\/cdn-cgi\/l\/email-protection#e695939696899492a68d88899184878882c885898b\" target=\"_blank\" rel=\"noopener\"><span class=\"__cf_email__\" data-cfemail=\"f3808683839c8187b3989d9c8491929d97dd909c9e\">[email chroniony]<\/span><\/a> ju\u017c dzi\u015b skorzystaj z niezawodnych wtyczek eCommerce dostosowanych do Twoich potrzeb.<\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Integracja bramki p\u0142atno\u015bci z PrestaShop mo\u017ce wydawa\u0107 si\u0119 prosta na papierze. Bramka udost\u0119pnia dokumentacj\u0119 API, dane uwierzytelniaj\u0105ce do \u015brodowiska testowego, klucze uwierzytelniania, adresy URL wywo\u0142ania zwrotnego oraz kilka punkt\u00f3w ko\u0144cowych. Nast\u0119pnie modu\u0142 PrestaShop wysy\u0142a \u017c\u0105danie p\u0142atno\u015bci, odbiera odpowied\u017a, tworzy zam\u00f3wienie i przekierowuje klienta na stron\u0119 potwierdzenia. W prawdziwym sklepie PrestaShop bramka p\u0142atno\u015bci rzadko dzia\u0142a jednak [&hellip;]<\/p>\n","protected":false},"author":43,"featured_media":841338,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_kbui_enabled":"","footnotes":""},"categories":[53722,4,3257,218],"tags":[53377,53396,53246,53371,53248,53390,39332,53378,39363,53372,53399,53374,53391,53379,53370,53376,53373,53397,53375,53383,53394,53247,53392,53393,53395,39318,12790,53229,53388,53389,53382,53398,53387,53230,53386,53385,53384,53381,53380],"class_list":["post-841323","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-handel-internetowy","category-ecommerce-blog","category-prestashop-pl","category-sin-categorizar","tag-api-patnoci-prestashop","tag-bezpieczestwo-patnoci-prestashop","tag-blik-prestashop","tag-bramka-patnoci-prestashop","tag-comfino-prestashop","tag-dostosowywanie-kasy-prestashop","tag-enviar-clave-de-servicio-web-de-forma-segura","tag-integracja-api-bramki-patniczej","tag-integracja-api-prestashop","tag-integracja-bramki-patniczej-prestashop","tag-integracja-bramki-prestashop","tag-integracja-patnoci-prestashop","tag-kasa-javascript-prestashop","tag-kasa-prestashop","tag-metody-patnoci-prestashop","tag-modu-patnoci-prestashop","tag-niestandardowa-bramka-patnicza-prestashop","tag-niestandardowa-integracja-patnoci","tag-niestandardowy-modu-patnoci-prestashop","tag-opcje-patnoci-prestashop","tag-osadzony-formularz-patnoci","tag-payu-prestashop","tag-patno-ajax-w-prestashop","tag-patno-iframe-prestashop","tag-po-prostu-dzierawa-prestashop","tag-prestashop-api-integration","tag-prestashop-jedna-strona-do-kasy","tag-prestashop-opc","tag-przepyw-patnoci-prestashop","tag-przetwarzanie-patnoci-prestashop","tag-rozwizywanie-problemw-z-patnociami-prestashop","tag-rozwj-patnoci-prestashop","tag-status-zamwienia-prestashop","tag-supercheckout-prestashop","tag-tworzenie-zamwienia-prestashop","tag-webhooki-bramki-patniczej","tag-webhooki-prestashop","tag-zgodno-bramki-patniczej","tag-zgodno-patnoci-prestashop"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Integracja bramki p\u0142atno\u015bci z PrestaShop: Przewodnik po API i OPC<\/title>\n<meta name=\"description\" content=\"Dowiedz si\u0119, jak zintegrowa\u0107 niestandardow\u0105 bramk\u0119 p\u0142atno\u015bci z PrestaShop, obs\u0142ugiwa\u0107 API, webhooki i statusy zam\u00f3wie\u0144 oraz rozwi\u0105zywa\u0107 problemy ze zgodno\u015bci\u0105 z OPC.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Integracja bramki p\u0142atno\u015bci z PrestaShop: Przewodnik po API i OPC\" \/>\n<meta property=\"og:description\" content=\"Dowiedz si\u0119, jak zintegrowa\u0107 niestandardow\u0105 bramk\u0119 p\u0142atno\u015bci z PrestaShop, obs\u0142ugiwa\u0107 API, webhooki i statusy zam\u00f3wie\u0144 oraz rozwi\u0105zywa\u0107 problemy ze zgodno\u015bci\u0105 z OPC.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/\" \/>\n<meta property=\"og:site_name\" content=\"Knowband Blog | Ecommerce Modules\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Knowband\" \/>\n<meta property=\"article:published_time\" content=\"2026-09-09T12:21:13+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-15T06:33:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"760\" \/>\n\t<meta property=\"og:image:height\" content=\"300\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Sophie\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@KnowbandPlugin\" \/>\n<meta name=\"twitter:site\" content=\"@KnowbandPlugin\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Sophie\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"15 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\"},\"author\":{\"name\":\"Sophie\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#\\\/schema\\\/person\\\/ca485d026e41cbf45ae99b67d0c9ac74\"},\"headline\":\"Integracja niestandardowej bramki p\u0142atno\u015bci w PrestaShop: wymagania techniczne, przep\u0142yw API i wyzwania OPC w \u015bwiecie rzeczywistym\",\"datePublished\":\"2026-09-09T12:21:13+00:00\",\"dateModified\":\"2026-09-15T06:33:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\"},\"wordCount\":4103,\"publisher\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/Polish-1.jpg\",\"keywords\":[\"API p\u0142atno\u015bci PrestaShop\",\"Bezpiecze\u0144stwo p\u0142atno\u015bci PrestaShop\",\"BLIK PrestaShop\",\"Bramka p\u0142atno\u015bci PrestaShop\",\"Comfino PrestaShop\",\"Dostosowywanie kasy PrestaShop\",\"Enviar clave de servicio web de forma segura\",\"integracja API bramki p\u0142atniczej\",\"Integracja API PrestaShop\",\"Integracja bramki p\u0142atniczej PrestaShop\",\"Integracja bramki PrestaShop\",\"Integracja p\u0142atno\u015bci PrestaShop\",\"Kasa JavaScript PrestaShop\",\"Kasa PrestaShop\",\"Metody p\u0142atno\u015bci PrestaShop\",\"Modu\u0142 p\u0142atno\u015bci PrestaShop\",\"niestandardowa bramka p\u0142atnicza PrestaShop\",\"niestandardowa integracja p\u0142atno\u015bci\",\"Niestandardowy modu\u0142 p\u0142atno\u015bci PrestaShop\",\"Opcje p\u0142atno\u015bci PrestaShop\",\"osadzony formularz p\u0142atno\u015bci\",\"PayU PrestaShop\",\"P\u0142atno\u015b\u0107 AJAX w PrestaShop\",\"P\u0142atno\u015b\u0107 iframe PrestaShop\",\"Po prostu dzier\u017cawa PrestaShop\",\"PrestaShop API integration\",\"Prestashop Jedna strona do kasy\",\"PrestaShop OPC\",\"Przep\u0142yw p\u0142atno\u015bci PrestaShop\",\"Przetwarzanie p\u0142atno\u015bci PrestaShop\",\"Rozwi\u0105zywanie problem\u00f3w z p\u0142atno\u015bciami PrestaShop\",\"Rozw\u00f3j p\u0142atno\u015bci PrestaShop\",\"Status zam\u00f3wienia PrestaShop\",\"SuperCheckout PrestaShop\",\"Tworzenie zam\u00f3wienia PrestaShop\",\"webhooki bramki p\u0142atniczej\",\"Webhooki PrestaShop\",\"zgodno\u015b\u0107 bramki p\u0142atniczej\",\"Zgodno\u015b\u0107 p\u0142atno\u015bci PrestaShop\"],\"articleSection\":[\"E-commerce\",\"Ecommerce\",\"Prestashop\",\"Sin categorizar\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\",\"name\":\"Integracja bramki p\u0142atno\u015bci z PrestaShop: Przewodnik po API i OPC\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/Polish-1.jpg\",\"datePublished\":\"2026-09-09T12:21:13+00:00\",\"dateModified\":\"2026-09-15T06:33:16+00:00\",\"description\":\"Dowiedz si\u0119, jak zintegrowa\u0107 niestandardow\u0105 bramk\u0119 p\u0142atno\u015bci z PrestaShop, obs\u0142ugiwa\u0107 API, webhooki i statusy zam\u00f3wie\u0144 oraz rozwi\u0105zywa\u0107 problemy ze zgodno\u015bci\u0105 z OPC.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/Polish-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/09\\\/Polish-1.jpg\",\"width\":760,\"height\":300,\"caption\":\"Zrozumienie procesu integracji niestandardowej bramki p\u0142atno\u015bci i kwestii zgodno\u015bci z OPC w PrestaShop\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/ecommerce-blog\\\/prestashop-payment-gateway-integration\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Integracja niestandardowej bramki p\u0142atno\u015bci w PrestaShop: wymagania techniczne, przep\u0142yw API i wyzwania OPC w \u015bwiecie rzeczywistym\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/\",\"name\":\"Knowband Blog | Ecommerce Modules\",\"description\":\"Magento, Prestashop, Opencart, Shopify\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#organization\",\"name\":\"Knowband Blog | Ecommerce Modules\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/09\\\/cropped-knowband_logo-v2.png\",\"contentUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/uploads\\\/2016\\\/09\\\/cropped-knowband_logo-v2.png\",\"width\":153,\"height\":61,\"caption\":\"Knowband Blog | Ecommerce Modules\"},\"image\":{\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Knowband\",\"https:\\\/\\\/x.com\\\/KnowbandPlugin\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/fr\\\/#\\\/schema\\\/person\\\/ca485d026e41cbf45ae99b67d0c9ac74\",\"name\":\"Sophie\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/plugins\\\/wp-user-avatar\\\/deprecated\\\/wp-user-avatar\\\/images\\\/wpua-96x96.png\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/plugins\\\/wp-user-avatar\\\/deprecated\\\/wp-user-avatar\\\/images\\\/wpua-96x96.png\",\"contentUrl\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/wp-content\\\/plugins\\\/wp-user-avatar\\\/deprecated\\\/wp-user-avatar\\\/images\\\/wpua-96x96.png\",\"caption\":\"Sophie\"},\"description\":\"We are experts in the eCommerce industry, specializing in high-quality plugin development. With years of experience, we deliver reliable and feature-rich modules for platforms such as Magento, PrestaShop, OpenCart, and Shopify. In addition to ready-made plugins, we also provide custom module development and tailored modification services to meet unique business needs. Our team stays ahead of industry trends, ensuring every solution we build enhances store performance, user experience, and overall functionality. With a strong customer-centric approach, we have become a trusted partner for businesses seeking powerful and scalable eCommerce plugin solutions.\",\"url\":\"https:\\\/\\\/www.knowband.com\\\/blog\\\/pl\\\/author\\\/titiksha-dwivedi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Integracja bramki p\u0142atno\u015bci z PrestaShop: Przewodnik po API i OPC","description":"Dowiedz si\u0119, jak zintegrowa\u0107 niestandardow\u0105 bramk\u0119 p\u0142atno\u015bci z PrestaShop, obs\u0142ugiwa\u0107 API, webhooki i statusy zam\u00f3wie\u0144 oraz rozwi\u0105zywa\u0107 problemy ze zgodno\u015bci\u0105 z OPC.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/","og_locale":"pl_PL","og_type":"article","og_title":"Integracja bramki p\u0142atno\u015bci z PrestaShop: Przewodnik po API i OPC","og_description":"Dowiedz si\u0119, jak zintegrowa\u0107 niestandardow\u0105 bramk\u0119 p\u0142atno\u015bci z PrestaShop, obs\u0142ugiwa\u0107 API, webhooki i statusy zam\u00f3wie\u0144 oraz rozwi\u0105zywa\u0107 problemy ze zgodno\u015bci\u0105 z OPC.","og_url":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/","og_site_name":"Knowband Blog | Ecommerce Modules","article_publisher":"https:\/\/www.facebook.com\/Knowband","article_published_time":"2026-09-09T12:21:13+00:00","article_modified_time":"2026-09-15T06:33:16+00:00","og_image":[{"width":760,"height":300,"url":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-1.jpg","type":"image\/jpeg"}],"author":"Sophie","twitter_card":"summary_large_image","twitter_creator":"@KnowbandPlugin","twitter_site":"@KnowbandPlugin","twitter_misc":{"Written by":"Sophie","Est. reading time":"15 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/#article","isPartOf":{"@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/"},"author":{"name":"Sophie","@id":"https:\/\/www.knowband.com\/blog\/fr\/#\/schema\/person\/ca485d026e41cbf45ae99b67d0c9ac74"},"headline":"Integracja niestandardowej bramki p\u0142atno\u015bci w PrestaShop: wymagania techniczne, przep\u0142yw API i wyzwania OPC w \u015bwiecie rzeczywistym","datePublished":"2026-09-09T12:21:13+00:00","dateModified":"2026-09-15T06:33:16+00:00","mainEntityOfPage":{"@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/"},"wordCount":4103,"publisher":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/#organization"},"image":{"@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-1.jpg","keywords":["API p\u0142atno\u015bci PrestaShop","Bezpiecze\u0144stwo p\u0142atno\u015bci PrestaShop","BLIK PrestaShop","Bramka p\u0142atno\u015bci PrestaShop","Comfino PrestaShop","Dostosowywanie kasy PrestaShop","Enviar clave de servicio web de forma segura","integracja API bramki p\u0142atniczej","Integracja API PrestaShop","Integracja bramki p\u0142atniczej PrestaShop","Integracja bramki PrestaShop","Integracja p\u0142atno\u015bci PrestaShop","Kasa JavaScript PrestaShop","Kasa PrestaShop","Metody p\u0142atno\u015bci PrestaShop","Modu\u0142 p\u0142atno\u015bci PrestaShop","niestandardowa bramka p\u0142atnicza PrestaShop","niestandardowa integracja p\u0142atno\u015bci","Niestandardowy modu\u0142 p\u0142atno\u015bci PrestaShop","Opcje p\u0142atno\u015bci PrestaShop","osadzony formularz p\u0142atno\u015bci","PayU PrestaShop","P\u0142atno\u015b\u0107 AJAX w PrestaShop","P\u0142atno\u015b\u0107 iframe PrestaShop","Po prostu dzier\u017cawa PrestaShop","PrestaShop API integration","Prestashop Jedna strona do kasy","PrestaShop OPC","Przep\u0142yw p\u0142atno\u015bci PrestaShop","Przetwarzanie p\u0142atno\u015bci PrestaShop","Rozwi\u0105zywanie problem\u00f3w z p\u0142atno\u015bciami PrestaShop","Rozw\u00f3j p\u0142atno\u015bci PrestaShop","Status zam\u00f3wienia PrestaShop","SuperCheckout PrestaShop","Tworzenie zam\u00f3wienia PrestaShop","webhooki bramki p\u0142atniczej","Webhooki PrestaShop","zgodno\u015b\u0107 bramki p\u0142atniczej","Zgodno\u015b\u0107 p\u0142atno\u015bci PrestaShop"],"articleSection":["E-commerce","Ecommerce","Prestashop","Sin categorizar"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/","url":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/","name":"Integracja bramki p\u0142atno\u015bci z PrestaShop: Przewodnik po API i OPC","isPartOf":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/#primaryimage"},"image":{"@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/#primaryimage"},"thumbnailUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-1.jpg","datePublished":"2026-09-09T12:21:13+00:00","dateModified":"2026-09-15T06:33:16+00:00","description":"Dowiedz si\u0119, jak zintegrowa\u0107 niestandardow\u0105 bramk\u0119 p\u0142atno\u015bci z PrestaShop, obs\u0142ugiwa\u0107 API, webhooki i statusy zam\u00f3wie\u0144 oraz rozwi\u0105zywa\u0107 problemy ze zgodno\u015bci\u0105 z OPC.","breadcrumb":{"@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/#primaryimage","url":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-1.jpg","contentUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2026\/09\/Polish-1.jpg","width":760,"height":300,"caption":"Zrozumienie procesu integracji niestandardowej bramki p\u0142atno\u015bci i kwestii zgodno\u015bci z OPC w PrestaShop"},{"@type":"BreadcrumbList","@id":"https:\/\/www.knowband.com\/blog\/pl\/ecommerce-blog\/prestashop-payment-gateway-integration\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.knowband.com\/blog\/fr\/"},{"@type":"ListItem","position":2,"name":"Integracja niestandardowej bramki p\u0142atno\u015bci w PrestaShop: wymagania techniczne, przep\u0142yw API i wyzwania OPC w \u015bwiecie rzeczywistym"}]},{"@type":"WebSite","@id":"https:\/\/www.knowband.com\/blog\/fr\/#website","url":"https:\/\/www.knowband.com\/blog\/fr\/","name":"Knowband Blog | Ecommerce Modules","description":"Magento, Prestashop, Opencart, Shopify","publisher":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.knowband.com\/blog\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/www.knowband.com\/blog\/fr\/#organization","name":"Knowband Blog | Ecommerce Modules","url":"https:\/\/www.knowband.com\/blog\/fr\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.knowband.com\/blog\/fr\/#\/schema\/logo\/image\/","url":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2016\/09\/cropped-knowband_logo-v2.png","contentUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/uploads\/2016\/09\/cropped-knowband_logo-v2.png","width":153,"height":61,"caption":"Knowband Blog | Ecommerce Modules"},"image":{"@id":"https:\/\/www.knowband.com\/blog\/fr\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Knowband","https:\/\/x.com\/KnowbandPlugin"]},{"@type":"Person","@id":"https:\/\/www.knowband.com\/blog\/fr\/#\/schema\/person\/ca485d026e41cbf45ae99b67d0c9ac74","name":"Sophie","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.knowband.com\/blog\/wp-content\/plugins\/wp-user-avatar\/deprecated\/wp-user-avatar\/images\/wpua-96x96.png","url":"https:\/\/www.knowband.com\/blog\/wp-content\/plugins\/wp-user-avatar\/deprecated\/wp-user-avatar\/images\/wpua-96x96.png","contentUrl":"https:\/\/www.knowband.com\/blog\/wp-content\/plugins\/wp-user-avatar\/deprecated\/wp-user-avatar\/images\/wpua-96x96.png","caption":"Sophie"},"description":"We are experts in the eCommerce industry, specializing in high-quality plugin development. With years of experience, we deliver reliable and feature-rich modules for platforms such as Magento, PrestaShop, OpenCart, and Shopify. In addition to ready-made plugins, we also provide custom module development and tailored modification services to meet unique business needs. Our team stays ahead of industry trends, ensuring every solution we build enhances store performance, user experience, and overall functionality. With a strong customer-centric approach, we have become a trusted partner for businesses seeking powerful and scalable eCommerce plugin solutions.","url":"https:\/\/www.knowband.com\/blog\/pl\/author\/titiksha-dwivedi\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/posts\/841323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/users\/43"}],"replies":[{"embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/comments?post=841323"}],"version-history":[{"count":4,"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/posts\/841323\/revisions"}],"predecessor-version":[{"id":841475,"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/posts\/841323\/revisions\/841475"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/media\/841338"}],"wp:attachment":[{"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/media?parent=841323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/categories?post=841323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.knowband.com\/blog\/pl\/wp-json\/wp\/v2\/tags?post=841323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}