Vitrin AJAX API

Bu uç noktalar iş ortağı Web API değildir. Tema JavaScript'inin müşteri oturumu ve CSRF ile sepet, hesap, favori ve arama gibi vitrin işlemlerini yürütmesi içindir.

Karıştırmayın: Partner entegrasyonu /api/v1/* ve X-API-Key kullanır. Aşağıdaki /api/*.php yolları tarayıcı oturumuna bağlıdır; Web API anahtarı ile çağrılmazlar.

Uç noktalar

YöntemYolİşlemler / not
POST /api/auth.php login, register, logout, me
POST /api/cart.php add, update, remove, clear, get
POST /api/coupon.php apply, remove, set_cargo, set_payment, summary
POST /api/account.php profil, şifre, adresler, bildirimler
POST /api/favorite.php toggle, remove
GET /api/product.php?id= Hızlı bakış / ürün özeti
GET /api/search-suggest.php?q= Arama otomatik tamamlama
GET / POST /api/module.php?m={module}&action={action} Modül API yönlendiricisi

CSRF

Durum değiştiren isteklerde jeton zorunludur. Kaynaklar:

  • Oturum: $_SESSION['csrf_token']
  • Başlık: X-CSRF-Token
  • Form / AJAX alanı: token
Tema ipucu: header.tpl içinde tanımlı global csrfToken değişkenini kullanın; jetonu şablona sabit yazmayın. Yönetim veya cron jetonunu vitrin AJAX'ında CSRF olarak kullanmayın.

Modül API'leri

Modül uç noktaları her zaman /api/module.php üzerinden gider; /modules/{name}/api/*.php dosyalarına doğrudan erişim engellenir. Ayrıntılar: Yeni Modül Oluştur, Kanca Listesi, Şablonlar.

İlgili sayfalar

PHP
// Cart AJAX — CSRF from global csrfToken (header.tpl) or meta[name="csrf-token"]
(function () {
  function getCsrfToken() {
    if (typeof window.csrfToken === 'string' && window.csrfToken !== '') {
      return window.csrfToken;
    }
    var meta = document.querySelector('meta[name="csrf-token"]');
    return meta ? meta.getAttribute('content') : '';
  }

  function cartRequest(action, body) {
    var data = Object.assign({ action: action, token: getCsrfToken() }, body || {});
    return fetch('/api/cart.php', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
        'X-CSRF-Token': getCsrfToken(),
        'Accept': 'application/json'
      },
      credentials: 'same-origin',
      body: new URLSearchParams(data).toString()
    }).then(function (res) {
      return res.json();
    });
  }

  // Add product id 12 (optional variation)
  cartRequest('add', {
    id_product: '12',
    id_variation: '0',
    qty: '1'
  }).then(function (json) {
    console.log(json);
  });
})();
Giriş (auth.php) — CSRF ile
// Login via storefront auth API (session + CSRF, not X-API-Key)
(function () {
  function getCsrfToken() {
    if (typeof window.csrfToken === 'string' && window.csrfToken !== '') {
      return window.csrfToken;
    }
    var meta = document.querySelector('meta[name="csrf-token"]');
    return meta ? meta.getAttribute('content') : '';
  }

  fetch('/api/auth.php', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
      'X-CSRF-Token': getCsrfToken(),
      'Accept': 'application/json'
    },
    credentials: 'same-origin',
    body: new URLSearchParams({
      action: 'login',
      token: getCsrfToken(),
      login: 'customer@example.com',
      password: 'secret',
      remember: '1'
    }).toString()
  })
    .then(function (res) { return res.json(); })
    .then(function (json) {
      console.log(json);
      if (json.success && json.redirect) {
        window.location.href = json.redirect;
      }
    });
})();