API

Logika

  1. WordPress co 3h buduje tabelę mapy: sku + _global_unique_id (EAN) -> kind(product|variation) + id + parent_id.
  2. Connector z Comarch wysyła paczki do POST /wp-json/wc-map/v1/lookup-batch i dostaje listę dopasowań (ID w Woo).
  3. Dla found:true robi 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.
  4. 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).