Ugrás a tartalomhoz
ShopentlyLearn

Létrehozás · Készletkorrekció — Készlet

Végezze el a(z) „Létrehozás · Készletkorrekció” műveletet a(z) „Készlet” erőforráson az alább leírt adatokkal.

POST/api/v1/inventory/stock-adjustments

Hitelesítés
Bearer
Elérhető ettől a csomagtól
STANDARD
Szükséges jogosultságok
inventory.stock:update

Kódpéldák

Példakérés

cURL

: "${SHOPENTLY_SHOP_URL:?}"

curl --disable --globoff --fail-with-body --silent --show-error \
  --proto '=https' --connect-timeout 5 --max-time 30 \
  --request POST \
  --header "Authorization: Bearer ${SHOPENTLY_ACCESS_TOKEN:?}" \
  --header 'Idempotency-Key: example-create_adjustment_api_v1_inventory_stock_adjustments_post' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "expected_version": 0,
  "locations": [
    {
      "location_id": "example",
      "on_hand": 1
    }
  ],
  "reason": "Example",
  "target_id": "example",
  "target_type": "product",
  "warehouse_id": "example"
}' \
  --url "${SHOPENTLY_SHOP_URL%/}"/api/v1/inventory/stock-adjustments

PHP

<?php
declare(strict_types=1);

$baseUrl = rtrim(getenv('SHOPENTLY_SHOP_URL') ?: '', '/');
$origin = parse_url($baseUrl);
if (!$origin || ($origin['scheme'] ?? '') !== 'https' || empty($origin['host']) ||
    isset($origin['user'], $origin['pass']) || isset($origin['user']) || isset($origin['path']) ||
    isset($origin['query']) || isset($origin['fragment'])) {
    throw new RuntimeException('SHOPENTLY_SHOP_URL must be an HTTPS origin');
}
$credential = getenv('SHOPENTLY_ACCESS_TOKEN') ?: '';
if ($credential === '' || strpbrk($credential, "\r\n") !== false) {
    throw new RuntimeException('Invalid credential');
}
$headers = ['Idempotency-Key: example-create_adjustment_api_v1_inventory_stock_adjustments_post', 'Content-Type: application/json'];
$headers[] = 'Authorization: Bearer ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/inventory/stock-adjustments');
curl_setopt_array($handle, [
    CURLOPT_CUSTOMREQUEST => 'POST',
    CURLOPT_HTTPHEADER => $headers,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_FOLLOWLOCATION => false,
    CURLOPT_PROTOCOLS => CURLPROTO_HTTPS,
    CURLOPT_SSL_VERIFYPEER => true,
    CURLOPT_SSL_VERIFYHOST => 2,
    CURLOPT_CONNECTTIMEOUT => 5,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HEADERFUNCTION => static function ($handle, string $line) use (&$responseHeaders): int {
        if (str_contains($line, ':')) {
            [$name, $value] = explode(':', $line, 2);
            $responseHeaders[strtolower(trim($name))] = trim($value);
        }
        return strlen($line);
    },
]);
curl_setopt($handle, CURLOPT_POSTFIELDS, '{
  "expected_version": 0,
  "locations": [
    {
      "location_id": "example",
      "on_hand": 1
    }
  ],
  "reason": "Example",
  "target_id": "example",
  "target_type": "product",
  "warehouse_id": "example"
}');
$raw = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
$error = curl_error($handle);
curl_close($handle);
if ($raw === false) {
    throw new RuntimeException('Transport error: ' . $error);
}
if ($status < 200 || $status >= 300) {
    throw new RuntimeException('HTTP ' . $status . '; request_id=' .
        ($responseHeaders['x-request-id'] ?? '') . '; retry_after=' . ($responseHeaders['retry-after'] ?? ''));
}
$result = $raw === '' ? null : json_decode($raw, true, 512, JSON_THROW_ON_ERROR | JSON_BIGINT_AS_STRING);
echo json_encode($result, JSON_THROW_ON_ERROR | JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE), PHP_EOL;

Python

from contextlib import ExitStack
import json
import os
from urllib.parse import urlsplit

import requests  # python -m pip install requests

base_url = os.environ["SHOPENTLY_SHOP_URL"].rstrip("/")
origin = urlsplit(base_url)
if origin.scheme != "https" or not origin.hostname or origin.username or origin.password or origin.path or origin.query or origin.fragment:
    raise ValueError("SHOPENTLY_SHOP_URL must be an HTTPS origin")
credential = os.environ['SHOPENTLY_ACCESS_TOKEN']
if not credential or "\r" in credential or "\n" in credential:
    raise ValueError("Invalid credential")
headers = {'Idempotency-Key': 'example-create_adjustment_api_v1_inventory_stock_adjustments_post'}
headers["Authorization"] = 'Bearer' + " " + credential
body = '{\n  "expected_version": 0,\n  "locations": [\n    {\n      "location_id": "example",\n      "on_hand": 1\n    }\n  ],\n  "reason": "Example",\n  "target_id": "example",\n  "target_type": "product",\n  "warehouse_id": "example"\n}'
if body is not None:
    headers["Content-Type"] = "application/json"

with ExitStack() as stack:
    session = stack.enter_context(requests.Session())
    files = None
    if False:
        image = stack.enter_context(open(os.environ["SHOPENTLY_IMAGE_FILE"], "rb"))
        if os.fstat(image.fileno()).st_size > 5242880:
            raise ValueError("Image exceeds 5 MiB")
        files = {"file": ("article.png", image, "image/png")}
    response = session.request(
        'POST', base_url + '/api/v1/inventory/stock-adjustments', headers=headers,
        data=body.encode("utf-8") if body is not None else None, files=files,
        timeout=(5, 30), allow_redirects=False,
    )
    if not 200 <= response.status_code < 300:
        raise RuntimeError(f"HTTP {response.status_code}; request_id={response.headers.get('X-Request-ID', '')}; retry_after={response.headers.get('Retry-After', '')}")
    if False:
        if response.headers.get("Content-Type") != "image/webp" or len(response.content) > 5242880:
            raise ValueError("Unexpected image response")
        with open(os.environ["SHOPENTLY_OUTPUT_FILE"], "xb") as output:
            output.write(response.content)
    else:
        result = response.json() if response.content else None
        print(json.dumps(result, ensure_ascii=False, indent=2))

Példaválasz 201

JSON
{
  "data": {
    "deleted": false,
    "id": "stock_v1_WyJleGFtcGxlIiwicHJvZHVjdCIsImV4YW1wbGUiXQ",
    "version": 1
  },
  "meta": {
    "request_id": "example"
  }
}

Működés

  • A készletadatok elkülönítik a fizikai on_hand mennyiséget, a rendelések foglalásait, a kézi foglalásokat és az értékesíthető mennyiséget.
  • A visszaadott készletazonosítót és verziót használja; a termék és a variáns készlete külön célpont.
  • A sellable_limit -1 értéke korlátlan értékesítést, a 0 értéke pedig értékesíthető készlet hiányát jelenti.
  • A korlátlan elérhetőséget az available mező null értéke jelzi.
  • A null nem nulla.
  • A készletkorrekciók, értékesítési korlátok és kézi foglalások külön műveleteket és jogosultságokat használnak.

Paraméterek

Kérésfejlécek

Idempotency-KeyKarakterláncKötelező

Egy logikai írási művelet egyedi azonosítója.

minLength: 1maxLength: 128
Korlátozások
pattern
"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
Példa: "example-create_adjustment_api_v1_inventory_stock_adjustments_post"

Kérés törzse

application/json · Kötelező

StockAdjustmentCreate
expected_versionEgész számKötelező

Az írás előtt kiolvasott verzió; eltérés esetén a módosítás elutasításra kerül.

minimum: 0maximum: 9223372036854775807
Példa: 0
locationsTömb <LocationQuantity > Kötelező

Raktárhelyek.

minItems: 1maxItems: 100
Példa: [{"location_id":"example","on_hand":1}]
reasonKarakterláncKötelező

A módosításhoz rögzített indok.

minLength: 1maxLength: 500
Példa: "Example"
target_idKarakterláncKötelező

A művelettel érintett termék vagy variáns azonosítója.

Korlátozások
pattern
"^[a-z0-9][a-z0-9_-]{0,62}$"
Példa: "example"
target_typeKarakterláncKötelező

Jelzi, hogy a művelet termékre vagy variánsra vonatkozik-e.

Korlátozások
enum
["product", "variant"]
Példa: "product"
warehouse_idKarakterláncKötelező

Raktárazonosító.

Korlátozások
pattern
"^[a-z0-9][a-z0-9_-]{0,62}$"
Példa: "example"

Válaszok

Válasz 200

dataMutationData Kötelező

A sikeres válasz adatai.

Mezők · data
deletedLogikai értékKötelező

Jelzi, hogy a törlés megtörtént-e.

idKarakterláncKötelező

Erőforrás-azonosító; a visszaadott alakban őrizze meg.

versionEgész szám nullKötelező

Az erőforrás verziója az egyidejű módosítások ellenőrzéséhez.

metaContextPageMeta ContextMeta PageMeta RequestMeta Kötelező

A válasz metaadatai.

Mezők · meta

ContextPageMeta

localeKarakterláncKötelező

A kéréshez kiválasztott nyelv.

market_codeKarakterláncKötelező

A környezetvégpont által visszaadott piackód.

market_idKarakterláncKötelező

A környezetvégpont által visszaadott piacazonosító.

paginationPagination Kötelező

A kurzoros lapozás metaadatai.

request_idKarakterláncKötelező

Kérésazonosító; a válasz metaadataiban a HTTP-kérést azonosítja.

minLength: 1maxLength: 100

ContextMeta

localeKarakterláncKötelező

A kéréshez kiválasztott nyelv.

market_codeKarakterláncKötelező

A környezetvégpont által visszaadott piackód.

market_idKarakterláncKötelező

A környezetvégpont által visszaadott piacazonosító.

request_idKarakterláncKötelező

Kérésazonosító; a válasz metaadataiban a HTTP-kérést azonosítja.

minLength: 1maxLength: 100

PageMeta

paginationPagination Kötelező

A kurzoros lapozás metaadatai.

request_idKarakterláncKötelező

Kérésazonosító; a válasz metaadataiban a HTTP-kérést azonosítja.

minLength: 1maxLength: 100

RequestMeta

request_idKarakterláncKötelező

Kérésazonosító; a válasz metaadataiban a HTTP-kérést azonosítja.

minLength: 1maxLength: 100

Válasz 201

dataMutationData Kötelező

A sikeres válasz adatai.

Mezők · data
deletedLogikai értékKötelező

Jelzi, hogy a törlés megtörtént-e.

idKarakterláncKötelező

Erőforrás-azonosító; a visszaadott alakban őrizze meg.

versionEgész szám nullKötelező

Az erőforrás verziója az egyidejű módosítások ellenőrzéséhez.

metaContextPageMeta ContextMeta PageMeta RequestMeta Kötelező

A válasz metaadatai.

Mezők · meta

ContextPageMeta

localeKarakterláncKötelező

A kéréshez kiválasztott nyelv.

market_codeKarakterláncKötelező

A környezetvégpont által visszaadott piackód.

market_idKarakterláncKötelező

A környezetvégpont által visszaadott piacazonosító.

paginationPagination Kötelező

A kurzoros lapozás metaadatai.

request_idKarakterláncKötelező

Kérésazonosító; a válasz metaadataiban a HTTP-kérést azonosítja.

minLength: 1maxLength: 100

ContextMeta

localeKarakterláncKötelező

A kéréshez kiválasztott nyelv.

market_codeKarakterláncKötelező

A környezetvégpont által visszaadott piackód.

market_idKarakterláncKötelező

A környezetvégpont által visszaadott piacazonosító.

request_idKarakterláncKötelező

Kérésazonosító; a válasz metaadataiban a HTTP-kérést azonosítja.

minLength: 1maxLength: 100

PageMeta

paginationPagination Kötelező

A kurzoros lapozás metaadatai.

request_idKarakterláncKötelező

Kérésazonosító; a válasz metaadataiban a HTTP-kérést azonosítja.

minLength: 1maxLength: 100

RequestMeta

request_idKarakterláncKötelező

Kérésazonosító; a válasz metaadataiban a HTTP-kérést azonosítja.

minLength: 1maxLength: 100
Példaválasz

HTTP-állapot

200
Sikeres válasz Séma
201
Erőforrás létrehozva Séma
400
Érvénytelen kérés
401
Hitelesítés szükséges
403
Hozzáférés megtagadva
404
Az erőforrás nem található
409
Verzióütközés
422
Sikertelen ellenőrzés
429
Kérésszámkorlát túllépve
További HTTP-állapotok (7)
405
Nem engedélyezett metódus
413
Túl nagy kérés
415
Nem támogatott formátum
500
Szerverhiba
502
API-átjáróhiba
503
A szolgáltatás nem érhető el
504
Időtúllépés

Hibakatalógus: ErrorResponse

Fejlécek

201

LocationKarakterláncNem kötelező

A létrehozott erőforrás relatív URL-je.

401

WWW-AuthenticateKarakterláncNem kötelező

A szerver által megkövetelt hitelesítési séma.

405

AllowKarakterláncNem kötelező

Az erőforrás által támogatott HTTP-metódusok.

429, 503

Retry-AfterEgész számNem kötelező

Az újrapróbálás előtti minimális várakozás másodpercben.

minimum: 0