Paiements

Endpoints pour traiter les paiements avec Stripe.

Intégration Stripe

SalonBookIt utilise Stripe pour traiter les paiements. Le widget gère tout le flux automatiquement. Ces endpoints sont pour les intégrations personnalisées.

POST /api/v1/pagos/intent/

Crée un PaymentIntent Stripe pour traiter un paiement.

Paramètres du corps

Paramètre Type Requis Description
cliente_id integer Oui ID du client
amount integer Oui Montant en centimes (ex : 2500 = 25,00€)
type string Oui booking, order ou points
reference_id integer Oui ID de la réservation, commande ou forfait de points

Exemple de requête

cURL
curl -X POST "https://app.salonbookit.com/api/v1/pagos/intent/" \
  -H "X-API-Key: hh_pub_live_abc123..." \
  -H "Authorization: Bearer eyJhbG..." \
  -H "Content-Type: application/json" \
  -d '{
    "cliente_id": 456,
    "amount": 2500,
    "type": "booking",
    "reference_id": 12345
  }'

Réponse (200 OK)

JSON
{
    "success": true,
    "data": {
        "client_secret": "pi_3N...secret_abc123",
        "payment_intent_id": "pi_3N...",
        "amount": 2500,
        "currency": "eur",
        "stripe_publishable_key": "pk_live_...",
        "customer_id": "cus_abc123"
    }
}

Utilisation en frontend

Utilisez le client_secret avec Stripe.js pour compléter le paiement :

JavaScript
// Initialiser Stripe
const stripe = Stripe('pk_live_...');
const elements = stripe.elements({
    clientSecret: response.data.client_secret
});

// Créer l'élément de carte
const cardElement = elements.create('card');
cardElement.mount('#card-element');

// Confirmer le paiement
const { error, paymentIntent } = await stripe.confirmCardPayment(
    response.data.client_secret,
    {
        payment_method: {
            card: cardElement,
            billing_details: {
                name: 'Juan Pérez',
                email: 'juan@email.com'
            }
        }
    }
);

if (error) {
    console.error('Error:', error.message);
} else if (paymentIntent.status === 'succeeded') {
    // Paiement réussi
    console.log('Paiement effectué :', paymentIntent.id);
}
POST /api/v1/pagos/confirmar/

Confirme un paiement après que Stripe l'a traité.

Paramètres du corps

Paramètre Type Description
payment_intent_id string ID du PaymentIntent Stripe

Réponse (200 OK)

JSON
{
    "success": true,
    "data": {
        "pago_id": 789,
        "estado": "completado",
        "monto": 25.00,
        "moneda": "EUR",
        "reserva_actualizada": true,
        "puntos_otorgados": 25,
        "recibo_url": "https://pay.stripe.com/receipts/..."
    }
}

Webhook Stripe

SalonBookIt reçoit les webhooks Stripe automatiquement sur :

POST https://app.salonbookit.com/api/v1/webhooks/stripe/

Événements traités :

Événement Stripe Action
payment_intent.succeeded Marque le paiement comme effectué, met à jour la réservation
payment_intent.payment_failed Marque le paiement comme échoué, notifie le client
charge.refunded Enregistre le remboursement
charge.dispute.created Notifie le commerce du litige
Pas de configuration nécessaire

Le webhook Stripe se configure automatiquement lors de la connexion de votre compte Stripe dans le Dashboard.

Erreurs de paiement

Code HTTP Description
STRIPE_NOT_CONFIGURED 400 Le commerce n'a pas Stripe configuré
INVALID_AMOUNT 400 Montant invalide (doit être positif)
BOOKING_ALREADY_PAID 400 La réservation a déjà été payée
PAYMENT_FAILED 400 Erreur lors du traitement du paiement (voir message Stripe)
CARD_DECLINED 400 Carte refusée

Devises supportées

Code Devise Symbole
EUR Euro
USD Dollar américain $
GBP Livre sterling £
AED Dirham émirati د.إ