SparkGlim للمطوّرين
بيانات الاعتماد المناسبة لكل نطاق.
تخدم القراءات العامة وتوقيعات المنظمات وجلسات الموزعين نماذج وصول مختلفة.
المفاتيح والإمكانات
انسخ قيمة keyId:secret الواحدة من إعدادات المنشئ؛ تُرسل العامة في x-white-label-key وتبقى الخاصة في خادمك.
النطاقات ومصدر الطلب
اربط التوقيع بالنطاق الموثق والطريقة والمسار الكامل والاستعلام الموحّد وبايتات الجسم الدقيقة، واستخدم nonce جديدًا لكل محاولة.
إعادة المحاولة ومنع التكرار
سماحية التوقيت خمس دقائق. تتكون nonce ومفاتيح عدم التكرار من 16–128 حرفًا أو رقمًا أو شرطة أو شرطة سفلية؛ ولا يغني المفتاح الثابت عن nonce جديد.
وصول إعادة البيع
تستخدم بوابة إعادة البيع جلسة SparkGlim الحالية وعلاقة العضو المصرّح بها. تتبع المسارات العامة قواعدها الموثّقة لا ترويسات المفتاح الخاص للمؤسسات.
طلب توضيحي بقيم بديلة
typescript
import { createHash, createHmac, randomBytes } from 'node:crypto'
// Server-side only; this example signs but does not send a request.
const [keyId, secret] = process.env.SPARKGLIM_PRIVATE_KEY.split(':')
const domain = process.env.SPARKGLIM_VERIFIED_DOMAIN
const url = new URL('https://api.sparkglim.net/api/white-label/v1/context')
const timestamp = String(Date.now())
const nonce = randomBytes(16).toString('hex')
const method = 'GET'
const body = ''
const idempotencyKey = '' // Stable operation key for routes that require it.
const campaignKey = '' // Complete optional scoped campaign credential.
const pairs = [...url.searchParams.entries()].sort((a, b) =>
a[0] === b[0] ? a[1].localeCompare(b[1]) : a[0].localeCompare(b[0]))
const query = pairs.map(([key, value]) =>
encodeURIComponent(key) + '=' + encodeURIComponent(value)).join('&')
const pathname = url.pathname.replace(/\/$/, '') || '/'
const bodyHash = createHash('sha256').update(body).digest('hex')
const canonical = ['v2', domain, idempotencyKey, campaignKey,
timestamp, nonce, method, pathname, query, bodyHash].join('.')
const signature = createHmac('sha256', secret).update(canonical).digest('hex')
const headers = {
'x-white-label-domain': domain,
'x-white-label-key-id': keyId,
'x-white-label-signature-version': '2',
'x-white-label-timestamp': timestamp,
'x-white-label-nonce': nonce,
'x-white-label-signature': signature,
}
// For signed POST requests, hash the exact JSON string sent as the body.
// Add X-Idempotency-Key when required and include it in canonical.
// Never expose this private key or generated headers to a public client.