Today Automate logo
Dokumentacja z przykładami kodu

PrestaShop WebService API – Przewodnik

Gotowe przykłady w Python, PHP i JavaScript. Klucz API, zamówienia, produkty, stany magazynowe.

API Key AuthXML + JSONRESTSelf-hosted

Base URL

{shop}/api/

Autoryzacja

HTTP Basic: API_KEY:

Format odpowiedzi

XML (domyślnie) / JSON

PrestaShop WebService API

PrestaShop WebService to wbudowane API dostępne od wersji 1.4. Daje pełny dostęp do zasobów sklepu przez HTTP. Autoryzacja przez klucz API w Basic Auth (klucz jako login, puste hasło).

1. Konfiguracja klienta

Uwaga: Zapis (PUT/POST) w PrestaShop API wymaga XML – nie JSON. Odczyt możesz robić przez ?output_format=JSON.

import requests
from requests.auth import HTTPBasicAuth
import xml.etree.ElementTree as ET

SHOP_URL = "https://twojsklep.pl"
API_KEY  = "TWOJ_KLUCZ_WEBSERVICE"  # z panelu PrestaShop

# PrestaShop API obsługuje zarówno XML jak i JSON
# JSON przez dodanie parametru ?output_format=JSON
BASE_URL = f"{SHOP_URL}/api"

def ps_get(resource: str, params: dict = None) -> dict:
    """Pobierz zasoby PrestaShop API jako JSON."""
    all_params = {"output_format": "JSON", **(params or {})}
    resp = requests.get(
        f"{BASE_URL}/{resource}",
        auth=HTTPBasicAuth(API_KEY, ""),  # hasło puste
        params=all_params,
    )
    resp.raise_for_status()
    return resp.json()

def ps_put(resource: str, resource_id: int, xml_payload: str) -> None:
    """Aktualizuj zasób przez PUT z payloadem XML."""
    resp = requests.put(
        f"{BASE_URL}/{resource}/{resource_id}",
        auth=HTTPBasicAuth(API_KEY, ""),
        data=xml_payload,
        headers={"Content-Type": "application/xml"},
    )
    resp.raise_for_status()
    print(f"Zaktualizowano {resource}/{resource_id}")

print("PrestaShop API gotowe")

2. Pobieranie zamówień

Paginacja przez parametr limit w formacie offset,count. Parametr display=full zwraca wszystkie pola.

# Pobierz zamówienia PrestaShop z paginacją
def pobierz_zamowienia(limit_per_page: int = 50) -> list:
    wszystkie = []
    offset    = 0

    while True:
        wynik = ps_get("orders", {
            "limit":   f"{offset},{limit_per_page}",
            "display": "full",
            "sort":    "[id_order]_DESC",
        })

        zamowienia = wynik.get("orders", [])
        wszystkie.extend(zamowienia)
        print(f"Pobrano {len(wszystkie)} zamówień...")

        if len(zamowienia) < limit_per_page:
            break
        offset += limit_per_page

    return wszystkie

zamowienia = pobierz_zamowienia()
print(f"Łącznie: {len(zamowienia)} zamówień")

for zam in zamowienia[:3]:
    print(
        "ID: " + str(zam["id"]) +
        " | klient: " + str(zam.get("id_customer", "?")) +
        " | kwota: " + str(zam.get("total_paid_tax_incl", "?")) + " PLN" +
        " | status: " + str(zam.get("current_state", "?"))
    )

Potrzebujesz integracji PrestaShop?

Budujemy integracje PrestaShop z hurtowniami, ERP i systemami logistycznymi. Pierwsza konsultacja bezpłatna.

FAQ

Gdzie włączyć i skonfigurować PrestaShop WebService API?
Panel PrestaShop → Zaawansowane → Webservice → Włącz. Następnie kliknij Dodaj nowy klucz. Ustaw uprawnienia (GET/POST/PUT/DELETE) dla wybranych zasobów i skopiuj wygenerowany klucz.
XML czy JSON – co wybrać w PrestaShop API?
PrestaShop API natywnie zwraca XML. JSON uzyskasz przez parametr ?output_format=JSON. Przy odczycie JSON jest wygodniejszy. Przy zapisie (PUT/POST) wymagany jest XML – PrestaShop nie akceptuje JSON dla zapisu.
Jak działa limit i paginacja w PrestaShop API?
Parametr limit przyjmuje dwa formaty: samo N (pierwsze N rekordów) lub offset,N (rekordy od offsetu). Np. limit=50,50 zwraca rekordy 51–100. Brak wbudowanego cursor-based paginacji.
Jak zaktualizować stan magazynowy produktu przez API?
Stany magazynowe to zasób stock_availables. Pobierz listę przez GET /api/stock_availables, znajdź rekordy dla Twojego produktu i aktualizuj pole quantity przez PUT z payloadem XML.
Dotted

Skontaktuj się z nami

Wyrażam zgodę na przetwarzanie danych oraz akceptuję Politykę Prywatności

Kontakt

Numer telefonu

+48 697 322 226