İçeriğe atla
ShopentlyLearn

Getir — İadeler, şikâyetler ve değişimler

“İadeler, şikâyetler ve değişimler” verilerini okuyun. Sonuç, bu işlemin parametrelerine bağlıdır.

GET/api/v1/requests/{request_id}

Kimlik doğrulama
Bearer
En düşük plan
BASIC
Gerekli izinler
returns.request:read

Kod örnekleri

İstek örneği

cURL

: "${SHOPENTLY_SHOP_URL:?}"

curl --disable --globoff --fail-with-body --silent --show-error \
  --proto '=https' --connect-timeout 5 --max-time 30 \
  --request GET \
  --header "Authorization: Bearer ${SHOPENTLY_ACCESS_TOKEN:?}" \
  --url "${SHOPENTLY_SHOP_URL%/}"/api/v1/requests/example

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 = [];
$headers[] = 'Authorization: Bearer ' . $credential;
$responseHeaders = [];
$handle = curl_init($baseUrl . '/api/v1/requests/example');
curl_setopt_array($handle, [
    CURLOPT_CUSTOMREQUEST => 'GET',
    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);
    },
]);
$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 = {}
headers["Authorization"] = 'Bearer' + " " + credential
body = None
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(
        'GET', base_url + '/api/v1/requests/example', 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))

Yanıt örneği 200

JSON
{
  "data": {
    "created_at": "2026-01-01T12:00:00Z",
    "customer": {
      "email": "customer@example.invalid",
      "name": "Example"
    },
    "id": "example",
    "items": [
      {
        "id": "example",
        "name": "Example",
        "order_line_id": "example",
        "product_id": "example",
        "quantity": 1,
        "returned_quantity": 1,
        "sku": "example",
        "total": {
          "amount": "0.00",
          "currency": "PLN",
          "minor_units": 2
        },
        "unit_price": {
          "amount": "0.00",
          "currency": "PLN",
          "minor_units": 2
        },
        "variant_id": "example",
        "variant_options": [
          {
            "name": "Example",
            "value": "example"
          }
        ]
      }
    ],
    "number": "example",
    "order_id": "example",
    "order_number": "example",
    "products_value": {
      "amount": "0.00",
      "currency": "PLN",
      "minor_units": 2
    },
    "refund": {
      "amount": {
        "amount": "0.00",
        "currency": "PLN",
        "minor_units": 2
      },
      "completed_at": null,
      "status": "pending",
      "updated_at": "2026-01-01T12:00:00Z",
      "version": 1
    },
    "resolution_state": "unknown",
    "status": {
      "id": "example",
      "locale": "en",
      "name": "Example"
    },
    "type": "return",
    "updated_at": "2026-01-01T12:00:00Z",
    "version": 1
  },
  "meta": {
    "request_id": "example"
  }
}

Nasıl çalışır

  • Talep numarası ve türü, ilgili sipariş, bildirilen ürünler, müşteri ayrıntıları ve iade verileri için koleksiyon ve ayrıntı uç noktalarını kullanın.
  • Geçerli talep türleri return, exchange ve complaint değerleridir.
  • Durum tanımlayıcılarını /api/v1/request-statuses üzerinden alın.
  • Durum ve iade tutarı, sürüm denetimi kullanan ayrı yazma işlemleridir.
  • Kayıtlı iade tutarını değiştirmek talep kaydını günceller; para transferi gerçekleştirmez.

Parametreler

Yol parametreleri

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

Kısıtlamalar
pattern
"^[a-z0-9][a-z0-9_-]{0,62}$"
Örnek: "example"

Bu işlem JSON gövdesi kabul etmez.

Yanıtlar

Yanıt 200

dataRequestDetailData Zorunlu

Başarılı yanıtın verileri.

Alanlar · data
created_atDizeZorunlu

Oluşturulma zamanı.

format: "date-time"
customerRequestCustomerData Zorunlu

Bu kaynak için kaydedilen müşteri bilgileri.

Alanlar · customer
emailDizeZorunlu

E-posta adresi.

nameDizeZorunlu

İlgili bağlamdaki kaynak adı.

idDizeZorunlu

Kaynak tanımlayıcısı; döndürüldüğü biçimi koruyun.

itemsDizi <RequestItemData > Zorunlu

Kaynakta bulunan öğeler.

Alanlar · items
numberDizeZorunlu

Kullanıcıya gösterilen sipariş veya talep numarası.

order_idDizeZorunlu

İlgili siparişin tanımlayıcısı.

order_numberDizeZorunlu

İlgili siparişin numarası.

products_valueMoneyData Zorunlu

Siparişteki ürünlerin değeri.

Alanlar · products_value
amountDizeZorunlu

JSON dizesi olarak kodlanan ondalık tutar; yalnızca izin verilen yerlerde null olabilir.

currencyDizeZorunlu

Tutarın para birimi kodu.

Kısıtlamalar
pattern
"^[A-Z]{3}$"
minor_unitsTam sayıZorunlu

Para biriminin kullandığı ondalık basamak sayısı.

minimum: 0maximum: 4
refundRefundData Zorunlu

Kaydedilen geri ödeme bilgileri.

Alanlar · refund
amountMoneyData nullZorunlu

JSON dizesi olarak kodlanan ondalık tutar; yalnızca izin verilen yerlerde null olabilir.

completed_atDize nullZorunlu

Tamamlanma zamanı.

Dize:format: "date-time"
statusDizeZorunlu

Bu işlemin kabul ettiği durum.

Kısıtlamalar
enum
["pending", "completed"]
updated_atDize nullZorunlu

Son güncelleme zamanı.

Dize:format: "date-time"
versionTam sayıZorunlu

Eşzamanlılık denetiminde kullanılan kaynak sürümü.

resolution_stateDizeZorunlu

Müşteri talebinin çözüm durumu.

Kısıtlamalar
enum
["unknown", "open", "completed", "rejected", "cancelled"]
statusRequestStatusData Zorunlu

Bu işlemin kabul ettiği durum.

Alanlar · status
idDizeZorunlu

Kaynak tanımlayıcısı; döndürüldüğü biçimi koruyun.

localeDizeZorunlu

Bu istek için seçilen dil.

nameDize nullZorunlu

İlgili bağlamdaki kaynak adı.

typeRequestType Zorunlu

Kaynak türü.

updated_atDizeZorunlu

Son güncelleme zamanı.

format: "date-time"
versionTam sayıZorunlu

Eşzamanlılık denetiminde kullanılan kaynak sürümü.

metaContextPageMeta ContextMeta PageMeta RequestMeta Zorunlu

Yanıt üst verileri.

Alanlar · meta

ContextPageMeta

localeDizeZorunlu

Bu istek için seçilen dil.

market_codeDizeZorunlu

Bağlam uç noktasının döndürdüğü pazar kodu.

market_idDizeZorunlu

Bağlam uç noktasının döndürdüğü pazar tanımlayıcısı.

paginationPagination Zorunlu

İmleç tabanlı sayfalamanın üst verileri.

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100

ContextMeta

localeDizeZorunlu

Bu istek için seçilen dil.

market_codeDizeZorunlu

Bağlam uç noktasının döndürdüğü pazar kodu.

market_idDizeZorunlu

Bağlam uç noktasının döndürdüğü pazar tanımlayıcısı.

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100

PageMeta

paginationPagination Zorunlu

İmleç tabanlı sayfalamanın üst verileri.

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100

RequestMeta

request_idDizeZorunlu

Talep tanımlayıcısı; yanıt üst verilerinde HTTP isteğini tanımlar.

minLength: 1maxLength: 100
Yanıt örneği

HTTP durumu

200
Başarılı yanıt Şema
400
Geçersiz istek
401
Kimlik doğrulaması gerekli
403
İzin reddedildi
404
Kaynak bulunamadı
409
Sürüm çakışması
422
Doğrulama başarısız
429
İstek sınırı aşıldı
Diğer HTTP durumları (7)
405
Yönteme izin verilmiyor
413
İstek çok büyük
415
Desteklenmeyen biçim
500
Sunucu hatası
502
API ağ geçidi hatası
503
Hizmet kullanılamıyor
504
Zaman aşımı

Hata kataloğu: ErrorResponse

Başlıklar

401

WWW-AuthenticateDizeİsteğe bağlı

Sunucunun gerektirdiği kimlik doğrulama şeması.

405

AllowDizeİsteğe bağlı

Bu kaynağın desteklediği HTTP yöntemleri.

429, 503

Retry-AfterTam sayıİsteğe bağlı

Yeniden denemeden önce saniye cinsinden en kısa bekleme süresi.

minimum: 0