Mine sisu juurde
ShopentlyLearn

Hangi · Pääsutõend — Autentimine

Hangi 900 sekundit kehtiv Shopently API token. Vaata ApiKey päist, vastust ja Beareri kasutamist järgmistes päringutes.

POST/api/v1/auth/token

Autentimine
ApiKey
Saadaval alates
BASIC
Nõutavad õigused
Ei kohaldu

Koodinäited

Päringu näide

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: ApiKey ${SHOPENTLY_API_KEY:?}" \
  --header 'Content-Type: application/json' \
  --data-raw '{}' \
  --url "${SHOPENTLY_SHOP_URL%/}"/api/v1/auth/token

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_API_KEY') ?: '';
if ($credential === '' || strpbrk($credential, "\r\n") !== false) {
    throw new RuntimeException('Invalid credential');
}
$headers = ['Content-Type: application/json'];
$headers[] = 'Authorization: ApiKey ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/auth/token');
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, '{}');
$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_API_KEY']
if not credential or "\r" in credential or "\n" in credential:
    raise ValueError("Invalid credential")
headers = {}
headers["Authorization"] = 'ApiKey' + " " + credential
body = '{}'
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/auth/token', 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))

Vastuse näide 200

JSON
{
  "data": {
    "access_token": "EXAMPLE_ACCESS_TOKEN",
    "expires_at": "2026-01-01T12:00:00Z",
    "expires_in": 900,
    "rate_limits": {
      "auth_per_minute": 10,
      "read_per_minute": 60,
      "write_per_minute": 10
    },
    "token_type": "Bearer"
  },
  "meta": {
    "request_id": "example"
  }
}

Autentimine

  • API-võti saadetakse ainult POST /api/v1/auth/token päringu Authorization-päises.
  • Ära lisa seda JSON-i, URL-i ega päringuparameetritesse.
  • Kasuta ressursipäringutes saadud tokenit ja uuenda seda expires_at järgi; expires_in on sekundites.
  • Pääsutoken ei tühista võtme kehtivaid õigusi, poe kasutusõigusi, võtme tühistamist ega IP-piiranguid.

Kui kaua token kehtib?

  • expires_in: 900 sekundit ehk 15 minutit väljastamisest. Päringute tegemine ei pikenda kehtivust.
  • expires_at: Aegumisaeg UTC-s. Kehtivad juurdepääsupiirangud võivad tokeni varem blokeerida.

Kasuta sama tokenit mitme päringu jaoks ja hangi uus enne expires_at aega. Ära hangi tokenit enne iga toimingut. Uue tokeni hankimiseks kasuta API-võtit.

Päringusageduse piirangud

Engine ≥ 4.143.0. Iga tokenivastus sisaldab väljastamise hetkel kehtiva poepoliitika data.rate_limits väärtusi. Kõik võtmed jagavad neid limiite; uus token ei lähtesta neid. Paketimuutus võib jõustuda enne tokeni aegumist.

Parameetrid

Tee-, päringu- ega täiendavaid päiseparameetreid pole.

Päringu sisu

application/json · Valikuline

TokenRequest null

Vastused

Vastus 200

dataTokenData Kohustuslik

Eduka vastuse andmed.

Väljad · data
access_tokenStringKohustuslik

Lühiajaline Bearer-pääsutoken.

expires_atStringKohustuslik

Pääsuandmete aegumise kuupäev ja kellaaeg.

format: "date-time"
expires_inTäisarvValikuline

Pääsuandmete kehtivusaeg sekundites.

Vaikeväärtus: 900

rate_limitsTokenRateLimitsData Kohustuslik

Iga tokenivastus sisaldab väljastamise hetkel kehtiva poepoliitika data.rate_limits väärtusi. Kõik võtmed jagavad neid limiite; uus token ei lähtesta neid. Paketimuutus võib jõustuda enne tokeni aegumist.

Väljad · rate_limits
auth_per_minuteTäisarvKohustuslik

Tokenipäringuid minutis, sealhulgas ebaõnnestunud autentimiskatsed.

minimum: 0maximum: 1000000
read_per_minuteTäisarvKohustuslik

Lugemispäringuid minutis.

minimum: 0maximum: 1000000
write_per_minuteTäisarvKohustuslik

Kirjutamispäringuid minutis; see väärtus ei anna kirjutamisõigusi.

minimum: 0maximum: 1000000
token_typeStringValikuline

Tagastatud tokeni autentimisskeem.

const: "Bearer"

Vaikeväärtus: "Bearer"

metaContextPageMeta ContextMeta PageMeta RequestMeta Kohustuslik

Vastuse metaandmed.

Väljad · meta

ContextPageMeta

localeStringKohustuslik

Selle päringu jaoks valitud keel.

market_codeStringKohustuslik

Konteksti lõpp-punkti tagastatud turukood.

market_idStringKohustuslik

Konteksti lõpp-punkti tagastatud turuidentifikaator.

paginationPagination Kohustuslik

Kursoripõhise lehekülgjaotuse metaandmed.

request_idStringKohustuslik

Pöördumise identifikaator; vastuse metaandmetes tähistab see HTTP-päringut.

minLength: 1maxLength: 100

ContextMeta

localeStringKohustuslik

Selle päringu jaoks valitud keel.

market_codeStringKohustuslik

Konteksti lõpp-punkti tagastatud turukood.

market_idStringKohustuslik

Konteksti lõpp-punkti tagastatud turuidentifikaator.

request_idStringKohustuslik

Pöördumise identifikaator; vastuse metaandmetes tähistab see HTTP-päringut.

minLength: 1maxLength: 100

PageMeta

paginationPagination Kohustuslik

Kursoripõhise lehekülgjaotuse metaandmed.

request_idStringKohustuslik

Pöördumise identifikaator; vastuse metaandmetes tähistab see HTTP-päringut.

minLength: 1maxLength: 100

RequestMeta

request_idStringKohustuslik

Pöördumise identifikaator; vastuse metaandmetes tähistab see HTTP-päringut.

minLength: 1maxLength: 100
Vastuse näide

HTTP-olek

200
Edukas vastus Skeem
400
Vigane päring
401
Autentimine on nõutav
403
Juurdepääs keelatud
404
Ressurssi ei leitud
409
Versioonikonflikt
422
Valideerimine nurjus
429
Päringupiirang ületatud
Muud HTTP olekud (7)
405
Meetod pole lubatud
413
Päring on liiga suur
415
Vormingut ei toetata
500
Serveri viga
502
API lüüsi viga
503
Teenus pole saadaval
504
Ajalimiit ületatud

Veakataloog: ErrorResponse

Päised

401

WWW-AuthenticateStringValikuline

Serveri nõutav autentimisskeem.

405

AllowStringValikuline

Selle ressursi toetatud HTTP-meetodid.

429, 503

Retry-AfterTäisarvValikuline

Minimaalne viivitus enne korduskatset, sekundites.

minimum: 0.0