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öntem | Yol | İş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;
}
});
})();