TechniqueÀ la une

Migrer de Stripe ou Paystack vers Simiz : Guide complet

J

Jean-Pierre Mbarga

Lead Developer

5 février 202615 min de lecture
M

Migrer de Stripe ou Paystack vers Simiz : Guide complet

Vous utilisez actuellement Stripe ou Paystack et vous souhaitez migrer vers Simiz pour accepter les paiements Mobile Money en Afrique ? Ce guide complet vous accompagne pas à pas dans votre transition.

Pourquoi migrer vers Simiz ?

Limitations de Stripe et Paystack en Afrique

CritèreStripePaystackSimiz
Couverture Mobile MoneyLimitéeGhana uniquement4 providers (6 pays)
Afrique Centrale/OuestNon supportéNon supportéSpécialiste
Documentation en françaisNonNonOui
Support localInternationalNigeriaLocal

Avantages de Simiz

  1. Spécialisation Mobile Money - Focus sur le marché africain
  2. Multi-pays - Cameroun, Sénégal, CI, Bénin, Togo, Mali
  3. Multi-providers - Orange Money, MTN MoMo, Wave, Moov Money
  4. Documentation en français - Accessible aux équipes francophones
  5. Support local - Connaissance du marché
  6. Tarifs compétitifs - 1.5% - 2%

Préparation de la migration

1. Analyse de votre intégration actuelle

#### Stripe

Identifiez les fonctionnalités utilisées :

// Exemple de code Stripe existant

const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);

// Création de paiement

const paymentIntent = await stripe.paymentIntents.create({

amount: 5000,

currency: 'XAF',

payment_method_types: ['card'],

metadata: {

order_id: 'ORDER-123'

}

});

// Webhook handling

const event = stripe.webhooks.constructEvent(

payload,

sig,

endpointSecret

);

#### Paystack

Identifiez les fonctionnalités utilisées :

// Exemple de code Paystack existant

const paystack = require('paystack')(process.env.PAYSTACK_SECRET_KEY);

// Initialisation de paiement

const response = await paystack.transaction.initialize({

reference: 'TX-12345',

amount: 500000,

email: 'customer@example.com',

currency: 'GHS'

});

// Webhook handling

// Vérifier la signature et traiter l'événement

2. Mapping des fonctionnalités

FonctionnalitéStripePaystackSimiz
Créer un paiementpaymentIntents.create()transaction.initialize()payments.create()
Récupérer un paiementpaymentIntents.retrieve()transaction.verify()payments.retrieve()
Webhookswebhooks.constructEvent()Vérification manuellewebhooks.verify()
Remboursementrefunds.create()refund()refunds.create()
AbonnementSubscriptions APISubscriptions APISubscriptions API
PayoutsTransfers APITransfer APIpayouts.create()

Plan de migration

Phase 1 : Configuration (1 semaine)

  1. Création du compte Simiz
- Inscription sur simiz.io/register

- Vérification KYB

- Activation des providers souhaités

  1. Obtention des clés API
- Clés Sandbox pour les tests

- Configuration de l'environnement

Variables d'environnement

SIMIZ_API_KEY=smz_test_pk_xxxxx

SIMIZ_SECRET_KEY=smz_test_sk_xxxxx

SIMIZ_WEBHOOK_SECRET=whsec_xxxxx

Phase 2 : Intégration Sandbox (1-2 semaines)

  1. Installation du SDK

Node.js

bun add @simiz/sdk

PHP

composer require simiz/simiz-php

Python

pip install simiz

  1. Tests de base

import { Simiz } from '@simiz/sdk';

const simiz = new Simiz({

apiKey: process.env.SIMIZ_API_KEY,

secretKey: process.env.SIMIZ_SECRET_KEY,

sandbox: true

});

// Test création de paiement

const payment = await simiz.payments.create({

amount: 100,

currency: 'XAF',

phone: '+237690000001', // Numéro de test

provider: 'orange_money',

description: 'Test migration'

});

console.log('Paiement créé:', payment.id);

Phase 3 : Migration du code (2-3 semaines)

#### Migration depuis Stripe

Avant (Stripe) :
const paymentIntent = await stripe.paymentIntents.create({

amount: 5000,

currency: 'XAF',

payment_method_types: ['card'],

metadata: {

order_id: 'ORDER-123',

customer_id: 'CUST-001'

},

description: 'Achat sur MonSite.com'

});

Après (Simiz) :
const payment = await simiz.payments.create({

amount: 5000,

currency: 'XAF',

phone: '+237691234567',

provider: 'orange_money',

country: 'CM',

reference: 'ORDER-123',

description: 'Achat sur MonSite.com',

callbackUrl: 'https://monsite.com/webhooks/simiz',

metadata: {

customerId: 'CUST-001'

}

});

#### Migration depuis Paystack

Avant (Paystack) :
const response = await paystack.transaction.initialize({

reference: 'TX-12345',

amount: 500000,

email: 'customer@example.com',

currency: 'GHS',

callback_url: 'https://monsite.com/callback',

metadata: {

order_id: 'ORDER-123'

}

});

Après (Simiz) :
const payment = await simiz.payments.create({

amount: 5000,

currency: 'XOF',

phone: '+2250700123456',

provider: 'orange_money',

country: 'CI',

reference: 'TX-12345',

callbackUrl: 'https://monsite.com/webhooks/simiz',

metadata: {

order_id: 'ORDER-123'

}

});

Phase 4 : Migration des webhooks (1 semaine)

#### Webhook Stripe vers Simiz

Stripe :
app.post('/webhooks/stripe', async (req, res) => {

const sig = req.headers['stripe-signature'];

const event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);

switch (event.type) {

case 'payment_intent.succeeded':

await handleSuccess(event.data.object);

break;

case 'payment_intent.payment_failed':

await handleFailure(event.data.object);

break;

}

res.json({ received: true });

});

Simiz :
app.post('/webhooks/simiz', async (req, res) => {

const signature = req.headers['x-simiz-signature'];

const isValid = simiz.webhooks.verify(req.body, signature);

if (!isValid) {

return res.status(401).json({ error: 'Invalid signature' });

}

const event = req.body;

switch (event.type) {

case 'payment.success':

await handleSuccess(event.data);

break;

case 'payment.failed':

await handleFailure(event.data);

break;

}

res.json({ received: true });

});

Phase 5 : Tests complets (1 semaine)

  1. Tests unitaires
  2. Tests d'intégration
  3. Tests de charge
  4. Tests de sécurité

Phase 6 : Go-live (1 semaine)

  1. Basculer vers les clés production
  2. Monitoring intensif
  3. Support dédié

Mapping des événements

Stripe → Simiz

Événement StripeÉvénement Simiz
payment_intent.succeededpayment.success
payment_intent.payment_failedpayment.failed
payment_intent.canceledpayment.cancelled
charge.refundedrefund.succeeded

Paystack → Simiz

Événement PaystackÉvénement Simiz
charge.successpayment.success
charge.failedpayment.failed
transfer.successpayout.succeeded
transfer.failedpayout.failed

Gestion des erreurs

Mapping des codes d'erreur

Stripe/PaystackSimizAction
card_declinedinsufficient_balanceInformer le client
expired_cardaccount_inactiveDemander de mettre à jour
incorrect_cvcpin_errorDemander de réessayer
processing_errorservice_unavailableRéessayer plus tard

Exemple de gestion d'erreurs

async function createPaymentWithMigration(phone, amount, country) {

try {

return await simiz.payments.create({

amount,

currency: country === 'CM' ? 'XAF' : 'XOF',

phone,

provider: detectProvider(phone, country),

country,

description: 'Achat sur MonSite.com'

});

} catch (error) {

// Mapping des erreurs

const errorMap = {

'insufficient_balance': {

message: 'Solde insuffisant. Veuillez recharger votre compte.',

action: 'ask_user_to_topup'

},

'invalid_phone': {

message: 'Numéro de téléphone invalide.',

action: 'ask_user_to_correct'

},

'service_unavailable': {

message: 'Service temporairement indisponible.',

action: 'retry_later'

}

};

const mappedError = errorMap[error.code] || {

message: error.message,

action: 'contact_support'

};

throw new MappedError(mappedError);

}

}

Stratégies de déploiement

Option 1 : Migration progressive

// Déterminer quel provider utiliser

function getPaymentProvider(user) {

// Utiliser Simiz pour les nouveaux utilisateurs

if (user.isNew) {

return 'simiz';

}

// Garder Stripe/Paystack pour les utilisateurs existants (transition)

if (user.country === 'CM' || user.country === 'SN' || user.country === 'CI') {

return 'simiz';

}

// Garder Stripe/Paystack pour les autres pays

return 'stripe';

}

// Routeur de paiement

async function routePayment(user, amount, phone) {

const provider = getPaymentProvider(user);

if (provider === 'simiz') {

return await createSimizPayment(phone, amount, user.country);

} else if (provider === 'stripe') {

return await createStripePayment(amount, user.currency);

} else if (provider === 'paystack') {

return await createPaystackPayment(amount, user.currency);

}

}

Option 2 : Basculer tout Simiz (recommandé pour l'Afrique)

Pour l'Afrique Centrale et de l'Ouest, Simiz est la solution optimale. Basculer entièrement vers Simiz simplifie votre infrastructure.

Monitoring et comparaison

Tableau de bord de migration

MétriqueStripe/PaystackSimizObjectif
Taux de succès95%?>95%
Temps de réponse200ms?<300ms
Coût par transaction2.9%1.8%-
Support24h<24h-

Script de monitoring

const migrationMetrics = {

stripe: { success: 0, failed: 0, avgTime: 0 },

simiz: { success: 0, failed: 0, avgTime: 0 }

};

async function trackPayment(provider, startTime, success) {

const duration = Date.now() - startTime;

if (success) {

migrationMetrics[provider].success++;

migrationMetrics[provider].avgTime =

(migrationMetrics[provider].avgTime + duration) / 2;

} else {

migrationMetrics[provider].failed++;

}

// Log pour analyse

console.log('Migration metrics:', JSON.stringify(migrationMetrics, null, 2));

}

Checklist de migration

Avant la migration

  • [ ] Analyser l'intégration actuelle
  • [ ] Créer un compte Simiz
  • [ ] Obtenir les clés API Sandbox
  • [ ] Configurer les webhooks de test
  • [ ] Installer le SDK Simiz
  • [ ] Créer un plan de tests

Pendant la migration

  • [ ] Migrer le code de création de paiement
  • [ ] Migrer les webhooks
  • [ ] Adapter la gestion des erreurs
  • [ ] Mettre à jour la documentation
  • [ ] Former l'équipe
  • [ ] Effectuer des tests complets

Après la migration

  • [ ] Basculer vers les clés production
  • [ ] Monitorer les transactions
  • [ ] Comparer les métriques
  • [ ] Optimiser si nécessaire
  • [ ] Désactiver l'ancien système (si applicable)

Outils et ressources

Scripts de migration

// Script de test automatisé

async function runMigrationTests() {

const testCases = [

{ phone: '+237690000001', amount: 100, expected: 'success' },

{ phone: '+237690000002', amount: 100000, expected: 'failed' },

{ phone: '+237690000003', amount: 100, expected: 'timeout' }

];

for (const test of testCases) {

try {

const payment = await simiz.payments.create({

amount: test.amount,

currency: 'XAF',

phone: test.phone,

provider: 'orange_money',

country: 'CM'

});

console.log(Test passed for ${test.phone}: ${payment.status});

} catch (error) {

console.log(Test failed for ${test.phone}: ${error.code});

}

}

}

Support et assistance

Simiz propose un support dédié pour les migrations :

  • Email : developer@simiz.io
  • WhatsApp : +237 6XX XXX XXX
  • Documentation : docs.simiz.io
  • Appels vidéo : Sur demande

Conclusion

Migrer de Stripe ou Paystack vers Simiz est un processus structuré qui peut être réalisé en 4-6 semaines. Les avantages clés :

  1. Spécialisation Mobile Money - Meilleure couverture du marché africain
  2. Tarifs compétitifs - Économie significative sur les transactions
  3. Support local - Connaissance du marché et réactivité
  4. Documentation en français - Accessibilité pour les équipes francophones

Recommandation : Pour les businesses opérant en Afrique Centrale et de l'Ouest, Simiz est la solution optimale pour accepter les paiements Mobile Money.
Besoin d'aide pour votre migration ? Contactez notre équipe dédiée à migration@simiz.io
Partager cet article
J

Jean-Pierre Mbarga

Lead Developer

Passionné par les technologies financières et l'inclusion financière en Afrique. Contribue régulièrement au blog Simiz sur les sujets liés aux paiements Mobile Money.

Articles similaires