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_hereWorkflow 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
cityetmunicipality
-
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
categoryetcategoryActivity
Intégrer le marchand
POST /partner_api/service_providers/business_onboardingStructure 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_keysRequê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 limite | Quota | Fenêtre de temps |
|---|---|---|
| Limite standard | 500 requêtes | par minute |
| Limite burst | 1 000 requêtes | par 5 minutes |
Comportement en cas de dépassement
- Blocage temporaire : Votre entreprise sera bloquée pendant 10 à 15 minutes
- 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
- Sécurité des clés API : Stockez les clés API brutes dans un coffre-fort sécurisé dès leur création
- Validation : Utilisez toujours les endpoints de référence pour valider les valeurs avant l'intégration
- Gestion d'erreurs : Renvoyez des messages compréhensibles par le marchand
- 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.