Skip to main content

Customer Portal

Le Customer Portal est l’équivalent SahelPay du Stripe Customer Portal. Il permet à vos clients de gérer leur compte, consulter leur historique de transactions et gérer leurs abonnements, sans que vous ayez à développer cette interface.

Concept

┌─────────────────┐      POST /v1/portal/sessions      ┌─────────────────┐
│   Votre Site    │ ─────────────────────────────────► │    SahelPay     │
│   (Backend)     │ ◄───────────────────────────────── │      API        │
└─────────────────┘      { url: "https://..." }        └─────────────────┘
        │                                                      │
        │ Redirect client                                      │
        ▼                                                      ▼
┌─────────────────┐                                   ┌─────────────────┐
│   Votre Client  │ ─────────────────────────────────►│ Customer Portal │
│                 │      Accède à son espace          │   SahelPay      │
└─────────────────┘                                   └─────────────────┘

Fonctionnalités

FonctionnalitéDescription
ProfilVoir et modifier nom, email
TransactionsHistorique complet des paiements
Reçus PDFTélécharger un reçu pour chaque transaction réussie
AbonnementsVoir et annuler les abonnements actifs
Méthodes de paiementGérer les numéros Mobile Money enregistrés
StatistiquesTotal dépensé, nombre de transactions

Créer une session

Depuis votre backend, créez une session pour votre client :
const session = await sahelpay.portal.createSession({
  customer_phone: '+22370123456',
  customer_name: 'Moussa Diarra',
  customer_email: '[email protected]',
  return_url: 'https://votresite.com/account'
});

// Rediriger le client
window.location.href = session.url;

Réponse

{
  "success": true,
  "data": {
    "id": "portal_session_abc123",
    "url": "https://pay.sahelpay.ml/portal/portal_xyz789...",
    "customer_id": "cus_def456",
    "expires_at": "2025-01-02T12:00:00.000Z"
  }
}

Exemple complet (Express.js)

app.get("/mon-compte", async (req, res) => {
  // Récupérer les infos du client depuis votre DB
  const user = await db.users.findById(req.user.id);
  
  // Créer une session portal
  const session = await sahelpay.portal.createSession({
    customer_phone: user.phone,
    customer_name: user.name,
    customer_email: user.email,
    return_url: `${APP_URL}/account`
  });
  
  // Rediriger vers le portal
  res.redirect(session.url);
});

Expiration

Les sessions expirent après 24 heures. Si un client clique sur un lien expiré, proposez-lui d’en générer un nouveau.

Ce que le client voit

Une fois redirigé vers le portal, le client peut :
  1. Voir son profil : Nom, email, téléphone
  2. Consulter ses transactions : Historique complet avec filtres
  3. Télécharger des reçus : PDF pour chaque transaction réussie
  4. Gérer ses abonnements : Voir les plans actifs et annuler si besoin
  5. Gérer ses méthodes de paiement : Ajouter/supprimer des numéros Mobile Money
  6. Voir ses statistiques : Total dépensé, nombre de transactions

Retour sur votre site

Quand le client clique sur “Retour” dans le portal, il est redirigé vers votre return_url :
// https://votresite.com/account?portal_session=xxx
app.get("/account", (req, res) => {
  if (req.query.portal_session) {
    // Le client revient du portal
    res.render("account", { message: "Modifications sauvegardées" });
  } else {
    res.render("account");
  }
});

Cas d’usage

SaaS - Gestion d’abonnements

// Bouton "Gérer mon abonnement" sur votre dashboard
app.get("/billing/manage", async (req, res) => {
  const session = await sahelpay.portal.createSession({
    customer_phone: req.user.phone,
    return_url: `${APP_URL}/billing`
  });
  
  res.redirect(session.url);
});

E-commerce - Historique de commandes

// Bouton "Mes commandes" 
app.get("/orders", async (req, res) => {
  const session = await sahelpay.portal.createSession({
    customer_phone: req.user.phone,
    return_url: `${APP_URL}/orders`
  });
  
  res.redirect(session.url);
});

Bonnes pratiques

  1. Toujours utiliser HTTPS pour le return_url
  2. Stocker le customer_id retourné pour référence future
  3. Gérer l’expiration : proposez de régénérer une session si expirée
  4. Pré-remplir les infos : passez customer_name et customer_email pour une meilleure UX
  5. Sécuriser l’accès : vérifiez que l’utilisateur est authentifié avant de créer une session
Le Customer Portal est hébergé par SahelPay. Vous n’avez pas besoin de développer cette interface - créez simplement une session et redirigez le client.