Czym jest WooCommerce REST API?
WooCommerce to najpopularniejsza platforma e-commerce dla WordPressa, napędzająca miliony sklepów na całym świecie. REST API wbudowane w WooCommerce od wersji 2.6 daje pełny programowy dostęp do zamówień, produktów, klientów, kuponów i raportów.
Zamówienia
Pobieranie, filtrowanie, zmiana statusów, notatki do zamówień.
Produkty i warianty
CRUD produktów, zarządzanie wariantami, galerie, atrybuty.
Klienci
Dane klientów, historia zamówień, zarządzanie segmentami.
Kupony i raporty
Zarządzanie kodami promocyjnymi, raporty sprzedażowe.
1. Konfiguracja klienta API
WooCommerce API używa HTTP Basic Auth. Consumer Key i Consumer Secret generujesz w panelu WordPress: WooCommerce → Ustawienia → Zaawansowane → REST API.
import requests
from requests.auth import HTTPBasicAuth
# Klucze z: WooCommerce → Ustawienia → Zaawansowane → REST API
SITE_URL = "https://twojsklep.pl"
CONSUMER_KEY = "ck_TWOJ_CONSUMER_KEY"
CONSUMER_SECRET = "cs_TWOJ_CONSUMER_SECRET"
BASE_URL = f"{SITE_URL}/wp-json/wc/v3"
auth = HTTPBasicAuth(CONSUMER_KEY, CONSUMER_SECRET)
def wc_get(endpoint: str, params: dict = None) -> dict:
resp = requests.get(f"{BASE_URL}{endpoint}", auth=auth, params=params or {})
resp.raise_for_status()
return resp.json()
def wc_post(endpoint: str, data: dict) -> dict:
resp = requests.post(f"{BASE_URL}{endpoint}", auth=auth, json=data)
resp.raise_for_status()
return resp.json()
def wc_put(endpoint: str, data: dict) -> dict:
resp = requests.put(f"{BASE_URL}{endpoint}", auth=auth, json=data)
resp.raise_for_status()
return resp.json()
print("WooCommerce API gotowe")2. Pobieranie zamówień z paginacją
WooCommerce API zwraca domyślnie 10 wyników na stronę. Ustaw per_page=100 i iteruj po stronach za pomocą parametru page.
# Pobierz zamówienia z ostatnich 7 dni
from datetime import datetime, timedelta
date_from = (datetime.utcnow() - timedelta(days=7)).strftime("%Y-%m-%dT%H:%M:%S")
# Pobierz wszystkie zamówienia z paginacją
wszystkie = []
strona = 1
per_page = 100
while True:
zamowienia = wc_get("/orders", {
"after": date_from,
"status": "any", # all, pending, processing, completed, etc.
"per_page": per_page,
"page": strona,
})
if not zamowienia:
break
wszystkie.extend(zamowienia)
print(f"Strona {strona}: {len(zamowienia)} zamówień")
if len(zamowienia) < per_page:
break
strona += 1
print(f"Łącznie: {len(wszystkie)} zamówień")
for zam in wszystkie[:3]:
print(
"#" + str(zam["id"]) + " | " +
zam.get("billing", {}).get("first_name", "") + " " +
zam.get("billing", {}).get("last_name", "") + " | " +
str(zam["total"]) + " " + zam["currency"] + " | " + zam["status"]
)3. Produkty – batch update
Endpoint /products/batch pozwala zaktualizować, stworzyć lub usunąć do 100 produktów w jednym zapytaniu – kluczowa funkcja przy synchronizacji z hurtownią.
# Aktualizacja stanu i ceny produktu (wariant)
def aktualizuj_stan_i_cene(product_id: int, stock: int, cena: str) -> dict:
return wc_put(f"/products/{product_id}", {
"stock_quantity": stock,
"manage_stock": True,
"regular_price": cena,
})
# Masowa aktualizacja przez batch endpoint (do 100 produktów naraz)
def batch_aktualizacja(produkty: list) -> dict:
"""
produkty = [{"id": 123, "regular_price": "49.99", "stock_quantity": 15}, ...]
"""
return wc_post("/products/batch", {"update": produkty})
# Przykład: aktualizuj 3 produkty
wynik = batch_aktualizacja([
{"id": 101, "regular_price": "29.99", "stock_quantity": 50},
{"id": 102, "regular_price": "49.99", "stock_quantity": 0},
{"id": 103, "sale_price": "19.99", "stock_quantity": 30},
])
print(f"Zaktualizowano: {len(wynik['update'])} produktów")Potrzebujesz integracji WooCommerce na zamówienie?
Budujemy integracje WooCommerce z ERP, BaseLinker, hurtowniami i systemami BI. Automatyzujemy import produktów, synchronizację stanów i przetwarzanie zamówień.