Pāriet uz saturu
ShopentlyLearn

Iegūt · Piekļuves tokens — Autentifikācija

Saņemiet 900 sekundes derīgu Shopently API pilnvaru. Apskatiet ApiKey galveni, atbildi un Bearer lietošanu nākamajos pieprasījumos.

POST/api/v1/auth/token

Autentifikācija
ApiKey
Pieejams no
BASIC
Nepieciešamās atļaujas
Nav attiecināms

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 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))

Atbildes piemērs 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"
  }
}

Autentifikācija

  • API atslēgu sūta tikai POST /api/v1/auth/token pieprasījuma Authorization galvenē.
  • Neievietojiet to JSON, URL vai vaicājuma parametros.
  • Resursu pieprasījumos izmantojiet saņemto marķieri un atjaunojiet to atbilstoši expires_at; expires_in ir izteikts sekundēs.
  • Piekļuves marķieris neapiet atslēgas pašreizējās atļaujas, veikala lietošanas tiesības, atsaukšanu vai IP ierobežojumus.

Cik ilgi pilnvara ir derīga?

  • expires_in: 900 sekundes jeb 15 minūtes no izdošanas. Pieprasījumi nepagarina derīgumu.
  • expires_at: Derīguma beigu laiks UTC. Pašreizējie piekļuves ierobežojumi var bloķēt pilnvaru agrāk.

Izmantojiet vienu pilnvaru vairākiem pieprasījumiem un saņemiet jaunu pirms expires_at. Neprasiet jaunu pilnvaru pirms katras darbības. Jaunas pilnvaras saņemšanai izmantojiet API atslēgu.

Pieprasījumu biežuma ierobežojumi

Engine ≥ 4.143.0. Katra tokena atbilde ietver data.rate_limits no veikala politikas izdošanas brīdī. Visas atslēgas koplieto šos limitus; jauns tokens tos neatiestata. Plāna maiņa var stāties spēkā pirms tokena derīguma beigām.

Parametri

Nav ceļa, vaicājuma vai papildu galveņu parametru.

Pieprasījuma saturs

application/json · Neobligāts

TokenRequest null

Atbildes

Atbilde 200

dataTokenData Obligāts

Veiksmīgas atbildes dati.

Lauki · data
access_tokenVirkneObligāts

Īslaicīgs Bearer piekļuves marķieris.

expires_atVirkneObligāts

Piekļuves datu derīguma beigu datums un laiks.

format: "date-time"
expires_inVesels skaitlisNeobligāts

Piekļuves datu derīguma ilgums sekundēs.

Noklusējums: 900

rate_limitsTokenRateLimitsData Obligāts

Katra tokena atbilde ietver data.rate_limits no veikala politikas izdošanas brīdī. Visas atslēgas koplieto šos limitus; jauns tokens tos neatiestata. Plāna maiņa var stāties spēkā pirms tokena derīguma beigām.

Lauki · rate_limits
auth_per_minuteVesels skaitlisObligāts

Tokena pieprasījumi minūtē, ieskaitot neveiksmīgus autentifikācijas mēģinājumus.

minimum: 0maximum: 1000000
read_per_minuteVesels skaitlisObligāts

Lasīšanas pieprasījumi minūtē.

minimum: 0maximum: 1000000
write_per_minuteVesels skaitlisObligāts

Rakstīšanas pieprasījumi minūtē; šī vērtība nepiešķir rakstīšanas tiesības.

minimum: 0maximum: 1000000
token_typeVirkneNeobligāts

Atgrieztā marķiera autentifikācijas shēma.

const: "Bearer"

Noklusējums: "Bearer"

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.0