Jèko
Service Providers

Intégration Service Provider

Guide d'intégration technique pour les fournisseurs de services afin d'intégrer des marchands et gérer les clés API

Ce guide décrit le parcours d'intégration de l'API Service Provider. Pour le détail de chaque endpoint, consultez la spécification OpenAPI.

Prérequis

  • Un compte entreprise Service Provider
  • Des identifiants Partner API (clé API et ID de clé API)
  • L'accès aux endpoints Service Provider de la Partner API

Authentification

Tous les endpoints nécessitent les en-têtes suivants :

X-API-KEY: your_api_key_here
X-API-KEY-ID: your_api_key_id_here

Workflow d'intégration

Flux d'intégration complet

Étapes d'intégration

Obtenir les données de référence

Avant d'intégrer un marchand, récupérez les données nécessaires :

  • Localisations :

    • Retourne les villes et municipalités disponibles
    • Utilisez ces valeurs pour les champs city et municipality
  • Activités :

    • Retourne les catégories et activités commerciales
    • Support multilingue via l'en-tête Accept-Language (fr/en)
    • Utilisez ces valeurs pour les champs category et categoryActivity

Intégrer le marchand

POST /partner_api/service_providers/business_onboarding

Structure de la requête :

{
  "owner": {
    "phone": "+22507012345",
    "firstName": "Jean",
    "lastName": "Dupont",
    "sex": "M"
  },
  "business": {
    "name": "Magasin de Jean",
    "category": "retail",
    "categoryActivity": "home_appliances",
    "city": "abidjan",
    "municipality": "cocody"
  }
}

Réponse :

{
  "business": {
    "id": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
    "name": "Magasin de Jean",
    "reference": "BIZ-2024-001"
  },
  "serviceProviderMemberId": "29f81706-03a6-492f-92ee-5f0b2e9b18e7"
}

Important : Stockez le business.id pour l'étape suivante.

Créer la clé API

POST /partner_api/service_providers/business_api_keys

Requête :

{
  "merchantBusinessId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
  "name": "Clé API de production"
}

Réponse :

{
  "id": "a3c81f3d-ee04-4ec5-8bd2-cd8af5dabcfc",
  "name": "Clé API de production",
  "businessId": "59ae202a-f583-4a15-970f-9e99bd1e0baa",
  "key": "jeko_live_abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
}

Le champ key n'est retourné qu'une seule fois. Stockez-le immédiatement : il est irrécupérable ensuite. Le champ id sert de X-API-KEY-ID pour l'authentification.

Gestion des erreurs courantes

Numéro de téléphone déjà utilisé (409)

Le numéro appartient déjà à un utilisateur complètement intégré. Utilisez un autre numéro ou contactez l'utilisateur.

Accès refusé (403)

Vous ne pouvez créer des clés API que pour les marchands que vous avez intégrés. Vérifiez que le merchantBusinessId correspond à un marchand que vous avez intégré.

Erreurs de validation (422)

Vérifiez que les valeurs de category, city, municipality correspondent aux données retournées par les endpoints de référence.

Limitation de débit (Rate Limiting)

Pour garantir la stabilité et la disponibilité de l'API, Jèko applique des limites de débit au niveau applicatif.

Les limites sont appliquées par entreprise, et non par clé API. La création de plusieurs clés API ne permet pas de contourner les limites.

Limites appliquées

Type de limiteQuotaFenêtre de temps
Limite standard500 requêtespar minute
Limite burst1 000 requêtespar 5 minutes

Comportement en cas de dépassement

  1. Blocage temporaire : Votre entreprise sera bloquée pendant 10 à 15 minutes
  2. Réponse HTTP 429 : Toutes les requêtes pendant le blocage recevront une réponse 429 Too Many Requests

Exemple de réponse 429

{
  "statusCode": 429,
  "error": "Too Many Requests",
  "message": "Rate limit exceeded. Please retry after some time."
}

Gestion du rate limiting avec backoff exponentiel

async function makeRequestWithRetry(url, options, maxRetries = 5) {
  for (let attempt = 0; attempt < maxRetries; attempt++) {
    const response = await fetch(url, options);
    
    if (response.status === 429) {
      const waitTime = Math.pow(2, attempt) * 1000;
      console.log(`Rate limited. Attente de ${waitTime}ms avant nouvelle tentative...`);
      await new Promise(resolve => setTimeout(resolve, waitTime));
      continue;
    }
    
    return response;
  }
  
  throw new Error('Nombre maximum de tentatives dépassé');
}

Si vous avez besoin de limites plus élevées, contactez notre équipe à hello@jeko.africa.

Bonnes pratiques

  1. Sécurité des clés API : Stockez les clés API brutes dans un coffre-fort sécurisé dès leur création
  2. Validation : Utilisez toujours les endpoints de référence pour valider les valeurs avant l'intégration
  3. Gestion d'erreurs : Renvoyez des messages compréhensibles par le marchand
  4. Limitation de débit : Implémentez le backoff exponentiel pour gérer les erreurs 429

Exemples de code

async function onboardMerchant(merchantData) {
  const response = await fetch('https://api.jeko.africa/partner_api/service_providers/business_onboarding', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-KEY': process.env.SERVICE_PROVIDER_API_KEY,
      'X-API-KEY-ID': process.env.SERVICE_PROVIDER_API_KEY_ID,
    },
    body: JSON.stringify(merchantData),
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Échec de l'intégration : ${JSON.stringify(error)}`);
  }

  return await response.json();
}

async function createApiKey(merchantBusinessId, keyName) {
  const response = await fetch('https://api.jeko.africa/partner_api/service_providers/business_api_keys', {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      'X-API-KEY': process.env.SERVICE_PROVIDER_API_KEY,
      'X-API-KEY-ID': process.env.SERVICE_PROVIDER_API_KEY_ID,
    },
    body: JSON.stringify({ merchantBusinessId, name: keyName }),
  });

  if (!response.ok) {
    const error = await response.json();
    throw new Error(`Échec de la création de la clé API : ${JSON.stringify(error)}`);
  }

  const result = await response.json();
  
  // IMPORTANT : Sauvegarder la clé brute de manière sécurisée
  await saveApiKeySecurely(merchantBusinessId, result.key, result.id);
  
  return result;
}

Et ensuite

Le marchand est intégré et dispose de ses clés. À partir de là, il utilise la Partner API comme n'importe quel partenaire Jèko :

  • Paiements : encaisser en boutique, en ligne ou en application
  • Transferts : envoyer des fonds vers Mobile Money ou compte bancaire
  • Webhooks : recevoir les notifications de transaction

Les clés que vous lui avez créées s'authentifient exactement de la même façon, avec les en-têtes X-API-KEY et X-API-KEY-ID.

On this page