SelSup platformu · Rehberler
Genişlemeler ve özel entegrasyonlar
SelSup, iframe'e yerleştirir; React kodunu kabin içinde çalıştırmaz.
SelSup, iframe'e yerleştirir; React kodunu kabin içinde çalıştırmaz.
Uygulama geliştiricileri ve teknoloji ortakları1
Entegreci türü seçin
- 1
Dış arka uç hizmeti
ERP, web mağazası, WMS, BI ve benzer senkronizasyon için en iyisi. Token sunucunuzda kalır ve veriler API ve webhooks üzerinden hareket eder.
- 2
Kabineti iframe panelini
SelSup, iframe'e yerleştirir; React kodunu kabin içinde çalıştırmaz.
- 3
SelSup arka uç modülü
Ortak SelSup arka plan süreçlerine katılan derin bir pazar veya teslimat entegrasyonu için gereklidir.
Bir bütünlü iş akışı ve gözlemlenebilirliğini uygulamak önce.
2
Dış uygulama mimarisi
Tokeni bir sır yöneticisi içinde tutun ve SelSup'i sadece arka uçtan arayın. Tarayıcı uygulamanız API ile konuşmalı ve SelSup tokenini asla almamalıdır.
SelSup adaptörünü, iş kuyrukunu ve alan modelini ayırın. API sözleşme değişiklikleri, daha sonra uygulama geri kalanından izole edilir.
Giren etkinlikler için bir gelen kutusu ve giden değişiklikler için bir çıkış kutusu kullanın.
SelSup webhook → inbox → domain worker → ERP/WMS
ERP/WMS change → outbox → SelSup API → reconciliation
İlişkili API uç noktaları
GET/api/product/findSözlük okuması örneğiGET/api/order/findGelişmiş senkronizasyon örneği
3
Kabineti iframe panelini
SelSup, iframe'e yerleştirir; React kodunu kabin içinde çalıştırmaz.
Panel, kabineyle bir çerez alanı paylaşmayan ayrı bir HTTPS sitesinde barındırın. Açık Entegreler → Benim uzantılar → Ekstensiyon ekleyin ve bir isim, simge, URL, menü bölümü ve konum seçin. İzinsiz özel bir panel kaydet, sonra sadece gerekli izinleri etkinleştirin. Store yayın SelSup incelemesini gerektirir.
4
Sunucu taraflı entegrasyon modülü
Bir pazar entegrasyonu genellikle jetonları, kartları, fiyatları, stokları, siparişleri ve arka plan durum güncellemelerini kapsar.
Bu modül SelSup'in ana arka planını değiştirir ve onun inceleme, test, yerleştirme ve serbest bırakma sürecini takip eder. Uygulama öncesi arayüzler ve veri sınırları konusunda anlaşın.
Dış API hatalarını sabit ApplicationError değerlerine ve iptal edilmiş veya geçersiz dış jetonları AccessException'e dönüştürmek için arka uç proje kurallarına göre.
Ortak kurumlara pazar-özel alanlar eklemeyin.
5
Serbest bırakma ve çalıştırma
- 1
Test hesabı oluştur
Müşterilerin üretim verilerinden test tokenlerini, depolarını, ürünlerini ve siparişlerini ayırmak.
- 2
Gözlemselliği ekle
Sırada gecikme, kod hataları, tekrar deneme sayıları ve uzlaşma çelişkileri izleyin.
- 3
Planlı sözleşme göçü
Geçirken eski alanları destekleyin ve eski biçimi devre dışı bırakmadan önce tüketicileri dağıtın.
- 4
Belge bağlantısını kes
Kullanıcılar bir token'ı nasıl iptal edeceğini, bir webhauk'u nasıl kaldırılacağını ve verileri kaybetmeden senkronizasyonu nasıl durdurulacağını bilmeliler.
6
Ürün ve sipariş sekmeleri
Bir menü sayfasını (MENU_PAGE), bir ürün kartı sekmesi (PRODUCT_TAB) veya bir sipariş sekmesi seçin. Menü bölümü ve pozisyonu yalnızca MENU_PAGE için geçerlidir. Sekmeler bir kimliği olan kaydedilmiş bir varlık gerektirir.
7
Bağlantı ve izinler
Sadece verilen bağlam alanları paylaşılan. USER user.id ve user.locale sağlar; CLIENT client.id sağlar; ORGANIZATION erişilebilir kuruluş kimliği ve adını sağlar. PRODUCT ayrı bir ürün kartında product.modelId verir; ORDER bir sipariş üzerine order.id verir. Tam kayıtlar, iletişim, şifre ve jetonlar hariç. Bunlar zaten açılmış sayfanın tanımlayıcıları, arka uç için erişim kanıtı değil.
{
"type": "selsup.extension.context",
"version": 1,
"context": {
"version": 1,
"extensionId": "example-extension-id",
"placement": "MENU_PAGE",
"user": {"id": 101, "locale": "ru"},
"client": {"id": 202},
"organizations": [{"id": 303, "name": "Demo"}]
}
}
[
{
"version": 1,
"extensionId": "example",
"placement": "PRODUCT_TAB",
"apiMethods": [],
"product": {
"modelId": 404
}
},
{
"version": 1,
"extensionId": "example",
"placement": "ORDER_TAB",
"apiMethods": [],
"order": {
"id": 505
}
}
]
8
mesaj gönderme v1 mesajları
Event.origin, event.source === window.parent, mesaj türü, versiyonu ve yapısını kontrol edin. Yenilenmek için bağlantı ve talep bağlamını hazır gönderin. SelSup erişimini yeniden kontrol eder ve sık istekleri birleştirir. URL'lerde, panel localStorage veya mesajlarda asla jetonlar geçirmeyin.
const allowedOrigins = new Set(['https://your-cabinet.example.com']);
window.addEventListener('message', (event) => {
if (event.source !== window.parent || !allowedOrigins.has(event.origin)) return;
const message = event.data;
if (!message || message.type !== 'selsup.extension.context' || message.version !== 1) return;
const context = message.context;
if (!context || context.version !== 1 || !['MENU_PAGE', 'PRODUCT_TAB', 'ORDER_TAB'].includes(context.placement)) return;
// The complete sample also validates fields and strips unknown properties.
document.querySelector('#context').textContent = JSON.stringify(context, null, 2);
});
for (const origin of allowedOrigins) {
window.parent.postMessage({type: 'selsup.extension.ready', version: 1}, origin);
}
// Refresh after connecting: use the validated origin, never "*".
window.parent.postMessage({type: 'selsup.extension.request-context', version: 1},
'https://your-cabinet.example.com');
9
API iframe köprüsü üzerinden
Bu yazılımlar, eklenti ayarlarında gerekli yöntemleri açıklar. Her kuruluşu yapan istemci açıkça bu açıklamadan gelen yöntemleri verir. API erişim varolan kurulumlar dahil hiçbirine varsayılmaz. İstediği listeyi değiştirmek bir başka inceleme gerektirir; kuruluşmuş kopyalar asla otomatik olarak yeni izinler almaz.
Host, mevcut çalışan izinleri ile sadece aşağıdaki yöntemleri SelSupFront hizmetleri aracılığıyla çağırır. Var olan sunucu erişim kontrolleri hala geçerlidir. ClientService ve authService tamamen yasaklıdır; bu listeden dışındaki tüm yöntemler de reddedilmektedir. Uygulamalar URL'leri, başlıkları, jetonları veya keyfi bir Axios yapılandırmasını sağlayamaz. Sunucu mevcut kuruluşu ve yardımı gerçek API talebi üzerinde kontrol eder.
API yardımları bağlam izinlerinden bağımsızdır. context.apiMethods verilen yöntemleri listeler. Bir yardım, mevcut sekmede sadece var olan varlık yerine çalışanın erişimindeki kabin boyunca yöntem için geçerlidir. Sonuçlar yalnızca belgelemiş alanları içerir, asla Axios nesneleri veya tanıtım bilgileri içermez.
Uçuşta bir istek ve en fazla bir başlangıç saniyede. Son 256 istek kimliği kopyalamalardan korunur. Host hataları: ACCESS_DENIED, INVALID_REQUEST, ERATE_LIMITED, DUPLICATE_REQUEST, REQUEST_FAILED. SDK hataları da NOT_CONNECTED, DISCONNECTED ve TIMEOUT (20 saniye) içerir. Mutasyonları otomatik olarak tekrar denemeyin: error, zaman çıkışı veya iframe kapanması işlemin geri döndüğünü göstermez.
tagService.findTags {query?, page?, limit?} => {rows: [{id, name}]}
tagService.createTag {name} => {id, name}
tagService.updateTag {id, name} => {id, name}
tagService.deleteTag {id} => null
productService.updateFavourite {id, favourite} => null
id: positive safe integer; updateFavourite.id = product.modelId
favourite: boolean
name: 1..100 characters (trimmed); query: 0..100 characters
page: 1..10000, default 1; limit: 1..100, default 30
{
"type": "selsup.extension.api-request",
"version": 1,
"requestId": "request-1",
"method": "tagService.createTag",
"params": {
"name": "Demo"
}
}
{
"type": "selsup.extension.api-response",
"version": 1,
"requestId": "request-1",
"ok": true,
"result": {
"id": 1,
"name": "Demo"
}
}
// connection = connectExtension(...) from selsup-extension.js
// Run from a button click after receiving context.apiMethods.
const tag = await connection.callApi('tagService.createTag', {name: 'Demo'});
console.log(tag.id, tag.name);
10
Örnek uygulama ve barındırma
Örnek, bağımsız bir GitHub deposu'na kopyalayabilir. Node.js 22+, npm test ve npm start run testleri ile API anahtarları veya gerçek veriler olmadan yerel bir simge kabineti ile. config.js'i yapılandırın ve beş statik dosyayı HTTPS barındırma için dağıtın. Aşağıda bağlantılı arşivini indir ve içeriğini GitHub depoya kopyalayın.
cd selsup-extension-example
npm test
npm start
# Mock host: http://localhost:4174/
# Panel: http://127.0.0.1:4173/
Content-Security-Policy: default-src 'none'; script-src 'self'; style-src 'self'; connect-src 'none'; form-action 'none'; base-uri 'none'; frame-ancestors https://your-cabinet.example.com
Referrer-Policy: no-referrer
X-Content-Type-Options: nosniff
https://api.selsup.ru/assets/examples/selsup-extension-example.zip
11
Güvenlik sınırları
Sandbox, formları, pop-upları, indirmeleri, üst navigasyon ve hassas tarayıcı API'lerini engeller. Panel kökeni iframe'nin üzerinde gösterilmiştir. Bir uzantı asla SelSup şifreyi istemelidir. Sitesi hala ziyaretçi IP'sini görebilir ve ona verilen verileri saklayabilir veya özetleyebilir. Review dış bir URL'de hizmet verilir. Sadece gerekli izinler ver.
SelSup'in kendisi iframe köprü çağrılarını yetkilendirir; çerezler ve jetonlar asla uygulamaya ulaşmaz. Kendi arka uçunuz hala kendi kimliğini kanıtlamasına ihtiyaç duyar: bağlam kimliğini ispatlamaz. Yalnızca sunucunuzda uzun ömürlü SelSup jetonlarını tutun. Tam sipariş/product kayıtları ve iç hat kart blokları desteklenmez.