Un meniu combo poate avea o mărime, o băutură inclusă și un extra contra cost. Meniul publicat diferențiază aceste opțiuni, astfel încât să calculezi prețul și să trimiți exact combinația configurată.
Trei tipuri de opțiuni
| Tipul grupului | Semnificație | Calculul prețului |
|---|---|---|
variant | Definește configurația produsului, de exemplu mărimea sau blatul. | Potrivește toate opțiunile definitorii cu o variantă publicată. Prețul, reducerea publicată și garanția acesteia înlocuiesc valorile de bază. |
bundle | O componentă inclusă, de exemplu băutura meniului combo. | Este inclusă în prețul meniului combo. Adaugă garanția, dacă există. |
extra | Un adaos opțional, de exemplu un sos suplimentar. | Adaugă prețul și garanția. Acesta este tipul implicit când nu este specificat. |
Identifică exact o variantă publicată
- Colectează perechile
group_id/option_idselectate din fiecare grupkind: "variant". - Compară acest set, indiferent de ordine, cu fiecare set
variants[].selections. - Trebuie să existe exact o variantă disponibilă care corespunde. Prețul minus reducerea publicată, plus garanția ei, sunt baza acestei configurații.
- Respectă limitele și disponibilitatea fiecărui grup, inclusiv pentru componentele incluse și extra.
Pentru un produs fără variante, folosește prețul de bază minus reducerea publicată, plus garanția. Un pachet fix poate avea o variantă cu selecții goale; acea variantă furnizează valorile de bază. Componentele fixe implicite sunt deja reprezentate în meniul publicat, inclusiv garanțiile lor. Nu inventa linii suplimentare de comandă pentru ele.
Exemplu calculat: două meniuri burger mari
Meniul demonstrativ oferă meniuri normale și mari. Clientul alege varianta mare, apă și sos suplimentar pentru fiecare dintre cele două meniuri, cu livrare.
{
"external_order_id": "shop-1002",
"menu_revision": "example-menu-1",
"currency": "RON",
"fulfillment": "delivery",
"customer": {
"name": "Example Customer",
"phone": "0700000000"
},
"address": {
"city": "Iași",
"street": "Example Street 10",
"details": "Apartment 2, ring the bell"
},
"payment": {
"method": "cash_on_fulfillment"
},
"items": [
{
"product_id": "burger-meal",
"quantity": 2,
"modifiers": [
{
"group_id": "size",
"option_id": "large"
},
{
"group_id": "drink",
"option_id": "water"
},
{
"group_id": "meal-extras",
"option_id": "sauce"
}
]
}
],
"total": 7400
}Descarcă order-delivery.json ↓
Trimite opțiunile, fără identități calculate
Trimite toate opțiunile selectate în items[].modifiers, inclusiv variantele, componentele incluse și extra. Fiecare pereche poate apărea o singură dată pe linie și se aplică o dată fiecărei unități de pe acea linie. Pentru două meniuri cu opțiuni diferite, folosește două linii cu cantitatea unu.
Nu trimite variant_id sau prețuri pe linia de comandă. Gateway-ul identifică singur varianta exactă și verifică totalul; câmpurile necunoscute sunt respinse. Ghidul coșului include o funcție testată care aplică toate aceste reguli.
Când o combinație nu mai este disponibilă
variant_unavailable, modifier_unavailable și modifier_selection_invalid necesită revizuirea meniului/coșului. Citește din nou meniul, elimină opțiunile indisponibile și cere confirmarea clientului. Dacă trimiterea inițială a expirat, recupereaz-o mai întâi folosind corpul salvat; nu înlocui opțiunile fără confirmare.