SelSup Developers

SelSup platformu · Rehberler

Genişlemeler ve özel entegrasyonlar

SelSup, iframe'e yerleştirir; React kodunu kabin içinde çalıştırmaz.

Bölümler: 11Geliştiriciler rehberi
→

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

    Kabineti iframe panelini

    SelSup, iframe'e yerleştirir; React kodunu kabin içinde çalıştırmaz.

  3. 3

    SelSup arka uç modülü

    Ortak SelSup arka plan süreçlerine katılan derin bir pazar veya teslimat entegrasyonu için gereklidir.

i
Uçuk bir dikey parça ile başla

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.

Veriler akışı · Text
SelSup webhook → inbox → domain worker → ERP/WMS
ERP/WMS change → outbox → SelSup API → reconciliation

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.

i
Paylaşılan veri uyumluluğu

Ortak kurumlara pazar-özel alanlar eklemeyin.

5

Serbest bırakma ve çalıştırma

  1. 1

    Test hesabı oluştur

    Müşterilerin üretim verilerinden test tokenlerini, depolarını, ürünlerini ve siparişlerini ayırmak.

  2. 2

    Gözlemselliği ekle

    Sırada gecikme, kod hataları, tekrar deneme sayıları ve uzlaşma çelişkileri izleyin.

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

Kontext v1 · JSON
{
  "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"}]
  }
}
Sekme bağlamı v1 · JSON
[
  {
    "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.

Ev sahibi / uzatma köprü · JavaScript
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.

İzin verilen yöntemler v1 · Text
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
İstek · JSON
{
  "type": "selsup.extension.api-request",
  "version": 1,
  "requestId": "request-1",
  "method": "tagService.createTag",
  "params": {
    "name": "Demo"
  }
}
Yanıt · JSON
{
  "type": "selsup.extension.api-response",
  "version": 1,
  "requestId": "request-1",
  "ok": true,
  "result": {
    "id": 1,
    "name": "Demo"
  }
}
Örnek SDK: context.apiMethods'tan sonra alınır · JavaScript
// 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.

Yerel demo · Shell
cd selsup-extension-example
npm test
npm start
# Mock host: http://localhost:4174/
# Panel: http://127.0.0.1:4173/
HTTPS yanıt başlıkları · HTTP
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
ZIP / GitHub hazır örnek · URL
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.