2 · Token Exchange (/plugin-api/oauth/token)

Connect'ten gelen tek-kullanımlık code'u, sunucu-sunucu bir istekle kalıcı credential'lara çevirirsin: apiKey, webhookSecret, tenantId ve gerçekten verilen scopes. Bu credential'ları tenant başına saklarsın.

İstek

POST https://<runtime>/plugin-api/oauth/token
Content-Type: application/json

{
  "grant_type": "authorization_code",
  "code": "<connect ile gelen tek-kullanımlık code>",
  "client_id": "<pluginId>",
  "client_secret": "<portalda üretilen cs_...>"
}

Yanıt

200 OK
{
  "tokenType": "...",       // token tipi
  "tenantId": "...",        // tenant kimliği (kurulumu bununla eşle)
  "pluginId": "...",        // eklenti (client) id
  "version": "...",         // kurulum manifest sürümü
  "scopes": ["orders:read", "events:subscribe", "..."],  // gerçekten verilen yetkiler
  "apiKey": "...",          // bu tenant için Callback API çağrılarında kullan
  "webhookSecret": "..."    // bu tenant'ın webhook + session token imzası
}
  • apiKey — bu tenant için Callback API çağrılarında kullanılır.
  • webhookSecretwebhook + hook imza doğrulaması ve session token doğrulaması.
  • tenantId — tenant kimliği; kurulumu ve gelen event'leri bununla eşle.
  • scopes — kurulumda fiilen verilen yetkiler (manifest'te istediğinin alt kümesi olabilir).

Adımlar

  1. /connect'te aldığın code + client_id + client_secret ile POST et.
  2. Kalıcı dört değeri (tenantId, apiKey, webhookSecret, scopes) tenantId başına güvenli sakla.
  3. scopes'a göre özelliklerini koşullu çalıştır (verilmeyen yetkiyi varsayma).
code tek kullanımlıktır; exchange başarısız olursa kullanıcıyı yeniden Connect'e yönlendir.client_secret yalnız bu sunucu çağrısında kullanılır.