Guides d’intégration
Utiliser l’API Organisation Version 1 côté serveur
Commencez par un domaine approuvé et des clés complètes, puis par une lecture avant les opérations privées signées.
Avant de commencer
- Compte Organisation approuvé, domaine HTTPS vérifié et clés complètes copiées dans Créateur.
- Node 20+ pour le SDK local de l’espace de travail, ou Python/PHP HTTPS sur votre serveur.
- Référence Version 1 et capacités requises ; version API 1 et version de signature 2 sont distinctes.
Configurer les clés et lire sans mutation
Gardez SPARKGLIM_APPROVED_DOMAIN et les clés keyId:secret côté serveur. Les lectures utilisent x-white-label-domain et la clé publique ou campagne complète, sans inventer un identifiant configuré séparément.
L’exemple TypeScript suppose @sparkglim/organization-sdk construit et accessible dans votre projet. Sa publication npm n’est pas vérifiée. Python et PHP utilisent directement HTTPS, sans prétendre être des SDK dédiés.
import { SparkGlimOrganization } from '@sparkglim/organization-sdk';
const client = new SparkGlimOrganization({
baseUrl: 'https://api.sparkglim.net',
domain: process.env.SPARKGLIM_APPROVED_DOMAIN!,
publicKey: process.env.SPARKGLIM_PUBLIC_KEY,
privateKey: process.env.SPARKGLIM_PRIVATE_KEY,
campaignKey: process.env.SPARKGLIM_CAMPAIGN_KEY,
});
export async function readOrganizationCampaigns() {
return client.campaigns.list();
}import json
import os
import urllib.request
def read_organization_campaigns():
key = os.environ["SPARKGLIM_PUBLIC_KEY"]
domain = os.environ["SPARKGLIM_APPROVED_DOMAIN"]
request = urllib.request.Request("https://api.sparkglim.net/api/white-label/v1/campaigns", headers={"Accept":"application/json", "x-white-label-domain":domain, "x-white-label-key":key})
with urllib.request.urlopen(request, timeout=15) as response:
payload = json.load(response)
if payload.get("success") is not True:
raise RuntimeError("Organization read failed")
return payload.get("data")<?php
function read_organization_campaigns(): array {
$handle = curl_init('https://api.sparkglim.net/api/white-label/v1/campaigns');
curl_setopt_array($handle, [CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>15, CURLOPT_HTTPHEADER=>[
'Accept: application/json', 'x-white-label-domain: '.getenv('SPARKGLIM_APPROVED_DOMAIN'), 'x-white-label-key: '.getenv('SPARKGLIM_PUBLIC_KEY')
]]);
$raw = curl_exec($handle);
$status = curl_getinfo($handle, CURLINFO_RESPONSE_CODE);
curl_close($handle);
if ($raw === false || $status < 200 || $status >= 300) throw new RuntimeException('Organization read failed');
$payload = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
if (($payload['success'] ?? false) !== true) throw new RuntimeException('Organization read failed');
return $payload['data'];
}Comprendre la signature privée
Les requêtes privées utilisent HMAC version 2, domaine, horodatage, nonce neuf, portée et idempotence. Forme : v2.domain.idempotencyKey.campaignKey.timestamp.nonce.METHOD.pathname.sortedQuery.sha256(rawBody). Signez les octets transmis et la requête triée encodée.
Le SDK signe ses méthodes existantes. Ne l’incluez pas au navigateur et ne réutilisez ni nonce ni ancien signataire WordPress.
Préparer un paiement de test explicite
La fonction inactive appelle client.checkout.create avec champs réels documentés et return_path relatif autorisé. L’entrée n’est pas un ordre dont le prix fait autorité.
Réutilisez la clé d’idempotence pour la même opération et renvoyez authorization_url au client. Server contrôle paiement et délivrance ; aucun vérificateur ou suivi périodique dans le navigateur.
import { randomUUID } from 'node:crypto';
import { SparkGlimOrganization } from '@sparkglim/organization-sdk';
export async function createApprovedTestCheckout(client: SparkGlimOrganization, input: unknown, stableRequestId: string, approvedTest: boolean) {
if (!approvedTest) throw new Error('Approved test configuration required');
const data = await client.checkout.create(input, stableRequestId);
if (typeof data.authorization_url !== 'string') throw new Error('No paid checkout URL returned');
const target = new URL(data.authorization_url);
if (target.origin !== 'https://checkout.sparkglim.net' || target.username || target.password) throw new Error('Invalid checkout URL');
return { authorization_url: target.href };
}
export const newRequestId = () => randomUUID();Vérifier votre intégration
- Contrôler domaine, portée et absence de secrets dans les bundles ou journaux.
- Tester signatures invalides seulement en environnement contrôlé et distinguer code disponible, publication et déploiement.