Gestion des Cartes
Emettez des cartes virtuelles et physiques, gerez leur cycle de vie complet et securisez les transactions avec tokenisation et 3D Secure.
Vue d'ensemble
Le module de gestion des cartes YaniPay permet d'emettre et gerer des cartes de paiement directement depuis la plateforme. Les cartes sont integrees avec Stripe Issuing et suivent les standards PCI DSS niveau 1.
Cartes virtuelles
- Emission instantanee
- Paiements en ligne
- Apple Pay / Google Pay
- Plafonds personnalisables
Cartes physiques
- Livraison sous 5 jours
- Design personnalise YaniPay
- Puce EMV + sans contact
- Retrait DAB
Types de cartes
| Propriete | Virtuelle | Physique |
|---|---|---|
| Emission | Instantanee | 3-5 jours ouvrables |
| Cout | Gratuit | 9.99 EUR |
| Paiement en ligne | Oui | Oui |
| Paiement en magasin | Via Apple/Google Pay | Oui (NFC + puce) |
| Retrait DAB | Non | Oui |
| Plafond mensuel | 5 000 EUR | 10 000 EUR |
| 3D Secure | Oui | Oui |
Cycle de vie
Chaque carte passe par un cycle de vie structure, de l'emission a la resiliation. Les transitions sont tracees en base de donnees et notifiees a l'utilisateur en temps reel.
Activer
Premiere utilisation
Geler
Blocage temporaire
Degeler
Remettre en service
Resilier
Suppression definitive
API Endpoints
| Methode | Endpoint | Description |
|---|---|---|
| GET | /api/payments/cards | Lister les cartes de l'utilisateur |
| POST | /api/payments/cards | Creer une nouvelle carte |
| GET | /api/payments/cards/:id | Details d'une carte |
| PATCH | /api/payments/cards/:id | Modifier une carte (limites, statut) |
| POST | /api/payments/cards/:id/freeze | Geler une carte |
| POST | /api/payments/cards/:id/unfreeze | Degeler une carte |
| DELETE | /api/payments/cards/:id | Resilier une carte definitivement |
Creer une carte
Pour emettre une nouvelle carte, utilisez l'endpoint POST /api/payments/cards. Le processus differe selon le type de carte choisie.
1 // POST /api/payments/cards 2 const response = await fetch('/api/payments/cards', { 3 method: 'POST', 4 headers: { 'Content-Type': 'application/json' }, 5 body: JSON.stringify({ 6 type: 'virtual', 7 currency: 'eur', 8 spendingLimit: { 9 amount: 500000, // 5000.00 EUR en centimes 10 interval: 'monthly', // "daily" | "weekly" | "monthly" | "yearly" 11 }, 12 metadata: { 13 label: 'Carte achats en ligne', 14 }, 15 }), 16 }); 17 18 const { data: card } = await response.json(); 19 // card.id = "card_7stu8vwx9yz" 20 // card.number = "4242 4242 4242 1234" (visible une seule fois) 21 // card.cvc = "123" (visible une seule fois)
Donnees sensibles
Gerer une carte
Geler / Degeler
1 // Geler une carte 2 await fetch('/api/payments/cards/card_7stu8vwx9yz/freeze', { 3 method: 'POST', 4 }); 5 6 // Degeler une carte 7 await fetch('/api/payments/cards/card_7stu8vwx9yz/unfreeze', { 8 method: 'POST', 9 });
Modifier les plafonds
1 // PATCH /api/payments/cards/:id 2 await fetch('/api/payments/cards/card_7stu8vwx9yz', { 3 method: 'PATCH', 4 headers: { 'Content-Type': 'application/json' }, 5 body: JSON.stringify({ 6 spendingLimit: { 7 amount: 1000000, // 10 000.00 EUR 8 interval: 'monthly', 9 }, 10 allowedCategories: [ 11 'online_shopping', 12 'travel', 13 'restaurants', 14 ], 15 }), 16 });
Resilier definitivement
// DELETE /api/payments/cards/:id
await fetch('/api/payments/cards/card_7stu8vwx9yz', {
method: 'DELETE',
});
// Status: 200 OK - Carte resiliee definitivementAction irreversible
Securite
La securite des cartes YaniPay repose sur plusieurs couches de protection conformes aux standards bancaires europeens.
Tokenisation
Les numeros de carte sont tokenises via Stripe. Aucune donnee PAN n'est stockee sur nos serveurs. Conforme PCI DSS niveau 1.
3D Secure 2
Authentification forte (SCA) pour toutes les transactions en ligne. Compatible avec les exemptions SCA pour les petits montants.
1 import { z } from 'zod'; 2 3 // Schema de validation carte 4 export const cardSchema = z.object({ 5 type: z.enum(['virtual', 'physical']), 6 currency: z.string().length(3).default('eur'), 7 spendingLimit: z.object({ 8 amount: z.number().positive().max(10000000), // Max 100K EUR 9 interval: z.enum(['daily', 'weekly', 'monthly', 'yearly']), 10 }).optional(), 11 allowedCategories: z.array(z.string()).optional(), 12 blockedMerchants: z.array(z.string()).optional(), 13 }); 14 15 // Masquage du numero de carte 16 export function maskCardNumber(last4: string): string { 17 return `**** **** **** ${last4}`; 18 } 19 20 // Verification 3D Secure requise 21 export function requires3DS(amount: number, currency: string): boolean { 22 // SCA exemption: montants < 30 EUR 23 if (currency === 'eur' && amount < 3000) return false; 24 return true; 25 }
Apple Pay / Google Pay