Shopify Admin API
Shopify Admin API to REST i GraphQL API dające pełen dostęp do danych sklepu. Zarządzaj zamówieniami, produktami, klientami, wysyłką i płatnościami programowo.
1. Konfiguracja klienta
Access Token generujesz w panelu Shopify: Ustawienia → Aplikacje → Opracuj aplikacje. Token ma prefix shpat_.
import requests
SHOP_DOMAIN = "twojsklep.myshopify.com"
ACCESS_TOKEN = "shpat_TWOJ_ACCESS_TOKEN" # z panelu Custom App lub Partner App
API_VERSION = "2024-01"
BASE_URL = f"https://{SHOP_DOMAIN}/admin/api/{API_VERSION}"
HEADERS = {
"X-Shopify-Access-Token": ACCESS_TOKEN,
"Content-Type": "application/json",
}
def shopify_get(endpoint: str, params: dict = None) -> dict:
resp = requests.get(f"{BASE_URL}{endpoint}", headers=HEADERS, params=params or {})
resp.raise_for_status()
return resp.json()
def shopify_post(endpoint: str, data: dict) -> dict:
resp = requests.post(f"{BASE_URL}{endpoint}", headers=HEADERS, json=data)
resp.raise_for_status()
return resp.json()
def shopify_put(endpoint: str, data: dict) -> dict:
resp = requests.put(f"{BASE_URL}{endpoint}", headers=HEADERS, json=data)
resp.raise_for_status()
return resp.json()
print("Shopify API gotowe")2. Pobieranie zamówień
Shopify zwraca max 250 zamówień na stronę. Paginacja jest cursor-based przez nagłówek Link.
from datetime import datetime, timedelta
def pobierz_zamowienia(days_back: int = 7) -> list:
date_from = (datetime.utcnow() - timedelta(days=days_back)).strftime(
"%Y-%m-%dT%H:%M:%SZ"
)
wszystkie = []
endpoint = "/orders.json"
params = {
"created_at_min": date_from,
"status": "any",
"limit": 250, # Shopify max per page
}
while endpoint:
data = shopify_get(endpoint, params)
zamowienia = data.get("orders", [])
wszystkie.extend(zamowienia)
print(f"Pobrano łącznie: {len(wszystkie)} zamówień")
# Paginacja przez Link header (cursor-based)
# W requests: resp.links.get('next', {}).get('url')
endpoint = None # Dla uproszczenia – dodaj obsługę Link headers
params = {}
if len(zamowienia) < 250:
break
return wszystkie
zamowienia = pobierz_zamowienia(days_back=7)
for zam in zamowienia[:3]:
print(
"#" + str(zam["order_number"]) +
" | " + zam["email"] +
" | " + str(zam["total_price"]) + " " + zam["currency"] +
" | " + zam["financial_status"]
)3. Tworzenie fulfillmentu
Fulfillment to potwierdzenie realizacji zamówienia z opcjonalnym numerem śledzenia. Shopify powiadamia klienta e-mailem automatycznie.
def zrealizuj_zamowienie(order_id: int, location_id: int, tracking_number: str = None) -> dict:
"""Tworzy fulfillment dla zamówienia Shopify."""
payload = {
"fulfillment": {
"location_id": location_id,
"notify_customer": True,
}
}
if tracking_number:
payload["fulfillment"]["tracking_info"] = {
"number": tracking_number,
}
result = shopify_post(
f"/orders/{order_id}/fulfillments.json",
payload,
)
print(f"Fulfillment #{result['fulfillment']['id']} utworzony dla zamówienia #{order_id}")
return result
# Pobierz ID lokalizacji
locations = shopify_get("/locations.json")
location_id = locations["locations"][0]["id"]
# Zrealizuj zamówienie
zrealizuj_zamowienie(order_id=1234567890, location_id=location_id, tracking_number="PL123456789PL")Potrzebujesz integracji Shopify na zamówienie?
Budujemy custom apps Shopify, integracje z ERP i systemami logistycznymi. Wdrożenia dla polskich i zagranicznych sklepów.