Logika
- WordPress co 3h buduje tabelę mapy:
sku + _global_unique_id (EAN)->kind(product|variation) + id + parent_id. - Connector z Comarch wysyła paczki do
POST /wp-json/wc-map/v1/lookup-batchi dostaje listę dopasowań (ID w Woo). - Dla
found:truerobi batch update do Woo:- produkty:
POST /wp-json/wc/v3/products/batch - warianty:
POST /wp-json/wc/v3/products/{parent_id}/variations/batch - osobno ceny i osobno stany.
- produkty:
- Jeśli
found:false– pomija i loguje.
Moja notka: lepiej robić pełną aktualizację bazy o 00:00, a w ciągu dnia aktualizować tylko zmienione wiersze real-time na podstawie webhooków.
Uwaga: Barcode/EAN w Woo zapisany jest jako _global_unique_id.
Zalety: mniej ciężkich zapytań do Woo/DB oraz przewidywalne paczkowanie.
REST API Woo (klucze testowe)
Klucz konsumenta
ck_... (TEST)
Tajny konsumenta
cs_... (TEST)
Custom API – Mapowanie + odświeżanie co 3 godziny
MAP KEY (sekret do nagłówka X-WC-MAP-KEY)
MAP_KEY_... (TEST)
Limity paczek: lookup-batch do 500 rekordów na request; update-batch w Woo do 50 rekordów na request.
Pojedynczy lookup
curl.exe -i -H "X-WC-MAP-KEY: MAP_KEY_... (TEST)" "https://skinevidence.19stopni.pl/wp-json/wc-map/v1/lookup?sku=11122&barcode=111222"
Batch lookup (PowerShell – zalecane)
$body='[{"sku":"11122","barcode":"111222"},{"sku":"5566","barcode":"555666"}]'
$body | curl.exe -i -X POST "https://skinevidence.19stopni.pl/wp-json/wc-map/v1/lookup-batch" -H "Content-Type: application/json" -H "X-WC-MAP-KEY: MAP_KEY_... (TEST)" --data-binary '@-'
Format wejścia (JSON)
Dla cen:
[
{ "sku": "11122", "barcode": "111222", "regular_price": 55, "sale_price": 45 },
{ "sku": "5566", "barcode": "555666", "regular_price": "99.00" }
]
Dla stanów:
[
{ "sku": "11122", "barcode": "111222", "stock_quantity": 12 },
{ "sku": "5566", "barcode": "555666", "stock_quantity": 0 }
]
Aktualizacja cen
Produkt prosty
POST /wp-json/wc/v3/products/batch
{
"update": [
{ "id": 12, "regular_price": "55", "sale_price": "45" }
]
}
Wariant
POST /wp-json/wc/v3/products/{parent_id}/variations/batch
{
"update": [
{ "id": 13, "regular_price": "55", "sale_price": "45" }
]
}
Aktualizacja stanów magazynowych
Reguła: ustawiaj stock_status na instock gdy stock_quantity > 0, w przeciwnym razie outofstock.
Produkt prosty
POST /wp-json/wc/v3/products/batch
{
"update": [
{ "id": 12, "manage_stock": true, "stock_quantity": 12, "stock_status": "instock" }
]
}
Wariant
POST /wp-json/wc/v3/products/{parent_id}/variations/batch
{
"update": [
{ "id": 13, "manage_stock": true, "stock_quantity": 12, "stock_status": "instock" }
]
}
Zamówienia
Custom wtyczka po mojej stronie wysyła pinga (webhook) do connectora z informacją o nowym zamówieniu tylko gdy: opłacone (paid) lub za pobraniem (cod).
Partner musi dostarczyć URL webhooka oraz sekret do podpisu.
PING (przykład payload)
{
"event": "order_ping",
"type": "paid",
"order_id": 1234,
"status": "processing",
"payment_method": "cod"
}
Pobieranie zamówienia (Woo REST API)
Po otrzymaniu pinga partner pobiera pełne dane zamówienia przez endpoint:
GET https://skinevidence.19stopni.pl/wp-json/wc/v3/orders/{order_id}
Autoryzacja: Basic Auth (ck/cs) lub consumer_key/consumer_secret w query (mniej bezpieczne).