Pāriet uz saturu
ShopentlyLearn

Akcijas · Atjaunināt

Akcijas · Atjaunināt. Katram kodam jāatļauj apvienošana. Atlaides piemēro secīgi.

PATCH/api/v1/discounts/promotions/{identity}

Autentifikācija
Bearer
Pieejams no
STANDARD
Nepieciešamās atļaujas
discounts.promotions:update

Koda piemēri

Pieprasījuma piemērs

cURL

: "${SHOPENTLY_SHOP_URL:?}"

curl --disable --globoff --fail-with-body --silent --show-error \
  --proto '=https' --connect-timeout 5 --max-time 30 \
  --request PATCH \
  --header "Authorization: Bearer ${SHOPENTLY_ACCESS_TOKEN:?}" \
  --header 'Idempotency-Key: learn-update_campaign_api_v1_discounts_promotions__identity__patch' \
  --header 'Content-Type: application/json' \
  --data-raw '{
  "expected_version": 1,
  "markets": [
    {
      "currency": "PLN",
      "market_id": "poland",
      "minor_units": 2
    }
  ],
  "name": "Autumn guide offer"
}' \
  --url "${SHOPENTLY_SHOP_URL%/}"/api/v1/discounts/promotions/example-campaign

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: learn-update_campaign_api_v1_discounts_promotions__identity__patch', 'Content-Type: application/json'];
$headers[] = 'Authorization: Bearer ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/discounts/promotions/example-campaign');
curl_setopt_array($handle, [
    CURLOPT_CUSTOMREQUEST => 'PATCH',
    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": 1,
  "markets": [
    {
      "currency": "PLN",
      "market_id": "poland",
      "minor_units": 2
    }
  ],
  "name": "Autumn guide offer"
}');
$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': 'learn-update_campaign_api_v1_discounts_promotions__identity__patch'}
headers["Authorization"] = 'Bearer' + " " + credential
body = '{\n  "expected_version": 1,\n  "markets": [\n    {\n      "currency": "PLN",\n      "market_id": "poland",\n      "minor_units": 2\n    }\n  ],\n  "name": "Autumn guide offer"\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(
        'PATCH', base_url + '/api/v1/discounts/promotions/example-campaign', 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))

Atbildes piemērs 200

JSON
{
  "data": {
    "deleted": false,
    "id": "example-campaign",
    "version": null
  },
  "meta": {
    "locale": "example",
    "market_code": "example",
    "market_id": "poland",
    "pagination": {
      "has_more": false,
      "limit": 1,
      "next_cursor": null
    },
    "request_id": "learn-example-request"
  }
}

Pārskats

Izvēlētās preces un kategorijas tiek apvienotas. Kategorijas ietver tieši piešķirtās preces.

Parametri

Ceļa parametri

identityVirkneObligāts

Šī resursa ceļā izmantotais identifikators.

Ierobežojumi
pattern
"^[a-z0-9][a-z0-9_-]{0,62}$"
Piemērs: "example-campaign"

Pieprasījuma galvenes

Idempotency-KeyVirkneObligāts

Vienas loģiskas rakstīšanas darbības unikāls identifikators.

minLength: 1maxLength: 128
Ierobežojumi
pattern
"^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$"
Piemērs: "learn-update_campaign_api_v1_discounts_promotions__identity__patch"

Pieprasījuma saturs

application/json · Obligāts

CampaignUpdate
audienceVirkneNeobligāts

Klienti

Ierobežojumi
enum
["all", "guest", "customer", "selected"]
Noklusējums: "all"
benefit_typeVirkneNeobligāts

Datu struktūras variants, kuru apraksta atļautās vērtības.

Ierobežojumi
enum
["percentage", "fixed", "none"]
Noklusējums: "percentage"
category_idsMasīvs <Virkne> Neobligāts

Saistīto kategoriju identifikatori.

maxItems: 1000
Ierobežojumi · Masīvs 1
pattern
"^[a-z0-9][a-z0-9_-]{0,62}$"
codeVirkne nullNeobligāts

Stabils mašīnlasāms kods.

Ierobežojumi · Virkne 1
pattern
"^[A-Za-z0-9]{6,16}$"
Piemērs: "LEARN10"
combine_couponsLoģiska vērtībaNeobligāts

Apvienot ar citiem kodiem

Noklusējums: false
combine_promotionsLoģiska vērtībaNeobligāts

Atļaut šo kodu produktiem ar automātiskām akcijām

Noklusējums: false
customer_idsMasīvs <Virkne> Neobligāts

Šim resursam saglabātā klienta informācija.

maxItems: 1000
Ierobežojumi · Masīvs 1
pattern
"^[a-z0-9][a-z0-9_-]{0,62}$"
ends_atVirkne nullNeobligāts

Aktīvs līdz

Virkne:format: "date-time"
expected_versionVesels skaitlisObligāts

Pirms rakstīšanas nolasītā versija; neatbilstības gadījumā izmaiņa tiek noraidīta.

minimum: 1maximum: 9223372036854775807
Piemērs: 1
free_shippingLoģiska vērtībaNeobligāts

Bezmaksas piegāde

Noklusējums: false
marketsMasīvs <MarketData-Input > Obligāts

Veikala kontekstā pieejamie tirgi.

minItems: 1maxItems: 1000
Piemērs: [{"currency":"PLN","market_id":"poland","minor_units":2}]
minimum_quantityVesels skaitlisNeobligāts

Minimālais preču skaits grozā

minimum: 1maximum: 2147483647
Noklusējums: 1
nameVirkneObligāts

Resursa nosaukums attiecīgajā kontekstā.

minLength: 1maxLength: 160
Piemērs: "Autumn guide offer"
per_customer_limitVesels skaitlisNeobligāts

Izmantošanas reižu limits vienam klientam

minimum: -1maximum: 2147483647
Noklusējums: -1
percentageVirkneNeobligāts

Procentuāla

maxLength: 19
Ierobežojumi
pattern
"^(0|[1-9][0-9]{0,13})(\\.[0-9]{1,4})?$"
Noklusējums: "10"
product_idsMasīvs <Virkne> Neobligāts

Saistīto produktu identifikatori.

maxItems: 1000
Ierobežojumi · Masīvs 1
pattern
"^[a-z0-9][a-z0-9_-]{0,62}$"
product_scopeVirkneNeobligāts

Produkti

Ierobežojumi
enum
["all", "selected"]
Noklusējums: "all"
show_accountLoģiska vērtībaNeobligāts

Klienta kontā

Noklusējums: false
show_cartLoģiska vērtībaNeobligāts

Grozā

Noklusējums: false
show_productLoģiska vērtībaNeobligāts

Produktu lapās

Noklusējums: false
starts_atVirkne nullNeobligāts

Aktīvs no

Virkne:format: "date-time"
usage_limitVesels skaitlisNeobligāts

Izmantošanas reižu limits

minimum: -1maximum: 2147483647
Noklusējums: -1

Atbildes

Atbilde 200

dataMutationData Obligāts

Veiksmīgas atbildes dati.

Lauki · data
deletedLoģiska vērtībaObligāts

Vai dzēšana ir piemērota.

idVirkneObligāts

Resursa identifikators; saglabājiet to atgrieztajā formā.

versionVesels skaitlis nullObligāts

Resursa versija vienlaicīgu izmaiņu kontrolei.

metaContextPageMeta ContextMeta PageMeta RequestMeta Obligāts

Atbildes metadati.

Lauki · meta

ContextPageMeta

localeVirkneObligāts

Šim pieprasījumam izvēlētā valoda.

market_codeVirkneObligāts

Konteksta galapunkta atgrieztais tirgus kods.

market_idVirkneObligāts

Konteksta galapunkta atgrieztais tirgus identifikators.

paginationPagination Obligāts

Kursora lapošanas metadati.

request_idVirkneObligāts

Pieteikuma identifikators; atbildes metadatos tas identificē HTTP pieprasījumu.

minLength: 1maxLength: 100

ContextMeta

localeVirkneObligāts

Šim pieprasījumam izvēlētā valoda.

market_codeVirkneObligāts

Konteksta galapunkta atgrieztais tirgus kods.

market_idVirkneObligāts

Konteksta galapunkta atgrieztais tirgus identifikators.

request_idVirkneObligāts

Pieteikuma identifikators; atbildes metadatos tas identificē HTTP pieprasījumu.

minLength: 1maxLength: 100

PageMeta

paginationPagination Obligāts

Kursora lapošanas metadati.

request_idVirkneObligāts

Pieteikuma identifikators; atbildes metadatos tas identificē HTTP pieprasījumu.

minLength: 1maxLength: 100

RequestMeta

request_idVirkneObligāts

Pieteikuma identifikators; atbildes metadatos tas identificē HTTP pieprasījumu.

minLength: 1maxLength: 100
Atbildes piemērs

HTTP statuss

200
Veiksmīga atbilde Shēma
400
Nederīgs pieprasījums
401
Nepieciešama autentifikācija
403
Piekļuve liegta
404
Resurss nav atrasts
409
Versiju konflikts
422
Validācijas kļūda
429
Pārsniegts pieprasījumu limits
Citi HTTP statusi (7)
405
Metode nav atļauta
413
Pieprasījums ir pārāk liels
415
Neatbalstīts formāts
500
Servera kļūda
502
API vārtejas kļūda
503
Pakalpojums nav pieejams
504
Noildze

Kļūdu katalogs: ErrorResponse

Galvenes

401

WWW-AuthenticateVirkneNeobligāts

Servera pieprasītā autentifikācijas shēma.

405

AllowVirkneNeobligāts

Šī resursa atbalstītās HTTP metodes.

429, 503

Retry-AfterVesels skaitlisNeobligāts

Minimālā aizkave pirms atkārtošanas sekundēs.

minimum: 0