Cartes enregistrées
Proposer le paiement en un clic à vos clients qui reviennent.
La règle à retenir
La page de paiement affiche les cartes enregistrées d'un client si et seulement si la session porte un customerId au moment où elle est créée. Cette condition est évaluée à l'ouverture de la page : rien de ce qui se passe ensuite ne peut la rattraper.
Comprendre le cycle de vie
Une carte enregistrée appartient à un client (objet customer, identifiant cus_...), lui-même rattaché à votre compte marchand. Le portefeuille est cloisonné : les cartes d'un de vos clients ne sont jamais visibles d'un autre marchand Mobupay.
Deux façons d'obtenir ce client, et elles ne se valent pas :
| Vous envoyez | Le client est créé | Le portefeuille s'affiche |
|---|---|---|
| saveCustomer: true | à la fin du paiement | non, jamais |
| customerId: "cus_..." | déjà créé | oui |
saveCustomer n'est donc pas une alternative à customerId : c'est la façon d'en obtenir un, à la première commande. Un intégrateur qui s'appuie sur saveCustomer seul, commande après commande, enregistre des cartes que son client ne verra jamais, et son portefeuille se remplit de doublons de la même carte.
Récupérer le customerId (sans appel supplémentaire)
Le webhook payment.authorized que vous recevez déjà porte toujours le customerId :
{
"type": "payment.authorized",
"data": {
"paymentId": "pay_xxxxxxxx",
"customerId": "cus_2KmBz9aQp4nT8R",
"customerCreated": true,
"paymentMethodId": "pm_xxxxxxxx",
"cardBrand": "VISA",
"cardLast4": "4242"
}
}Écrivez data.customerId sur l'utilisateur concerné dans votre base, à la réception. Vous n'avez rien d'autre à appeler : la correspondance se construit toute seule au fil des commandes.
paymentMethodId vous dit en prime qu'une carte vient d'être enregistrée, et customerCreated distingue une fiche créée d'une fiche retrouvée.
Créer vos clients à l'avance (recommandé)
Plus robuste que d'attendre le premier paiement : créez la fiche au moment où l'utilisateur ouvre un compte chez vous.
curl -X POST https://api.mobupay.nc/api/v1/customers \
-H "Authorization: Bearer sk_live_VOTRE_CLE" \
-H "Content-Type: application/json" \
-d '{
"email": "client@example.com",
"externalId": "votre-identifiant-utilisateur",
"firstName": "Prénom",
"lastName": "Nom"
}'externalId est le champ important : c'est votre identifiant, celui que vous maîtrisez. Il vous permet de retrouver la fiche sans dépendre de l'adresse de courriel, qu'un client peut changer.
Si l'adresse ou l'externalId existe déjà, l'API répond 409 et ne renvoie pas la fiche. Retrouvez-la alors par une recherche :
GET /api/v1/customers?externalId=votre-identifiant-utilisateur
GET /api/v1/customers?email=client@example.comPasser le customerId à chaque session
Première commande, client encore inconnu :
{
"order": { "amount": 3500, "currency": "XPF", "reference": "CMD-1042" },
"email": "client@example.com",
"saveCustomer": true,
"allowCustomerToSavePaymentMethod": true,
"redirectUrl": "https://example.com/retour",
"notificationUrl": "https://example.com/webhook"
}Commandes suivantes, une fois que vous avez son cus_... :
{
"order": { "amount": 2800, "currency": "XPF", "reference": "CMD-1108" },
"customerId": "cus_2KmBz9aQp4nT8R",
"allowCustomerToSavePaymentMethod": true,
"redirectUrl": "https://example.com/retour",
"notificationUrl": "https://example.com/webhook"
}customerIdetsaveCustomerne s'emploient pas ensemble : quand vous connaissez le client, la fiche existe déjà.- Gardez
allowCustomerToSavePaymentMethodàtrue: c'est ce qui autorise le client à enregistrer une nouvelle carte, y compris quand il en a déjà. - Pour un utilisateur non connecté, gardez le premier format. Le mélange des deux régimes est prévu et sans danger.
- Un
cus_de l'environnement de test ne fonctionne pas en production, et réciproquement : chaque environnement a ses propres fiches. Un identifiant qui n'appartient pas à votre compte donne une erreur400 CUSTOMER_NOT_FOUND.
Vérifier
Sur une clé de test, dans cet ordre :
- Une première commande avec
email+saveCustomer, en cochant l'enregistrement de la carte. Relevez lecustomerIddu webhook. - Une seconde commande pour le même utilisateur, avec
customerId. La page doit afficher la carte enregistrée et un bouton de paiement en un clic, et non un formulaire vierge. - Une troisième en enregistrant une deuxième carte : les deux doivent apparaître, et la carte par défaut être présélectionnée.
Si l'étape 2 affiche encore un formulaire vierge, le customerId n'est pas parti dans le corps de la requête : vérifiez vos journaux d'appel avant toute autre piste.
La précaution qui compte
N'envoyez un customerId que pour un utilisateur authentifié chez vous. Il donne accès aux cartes masquées du titulaire et permet de payer avec : c'est à vous, et à vous seul, de savoir que la personne devant l'écran est bien celle-là.