33-2 Colonnes BD Stripe et statut de paiement
Le processus d'achats demeurera largement intact. C'est-à-dire qu’avant de basculer vers Stripe, nous allons créer dans la base de données l'achat, même si ce dernier n'est pas payé. En effet, lorsque nous allons recevoir la confirmation de Stripe que le paiement a été effectué, on ne peut pas simplement récupérer ce qu'il y a dans le panier puisque l'utilisateur pourrait avoir fait des modifications entre temps à son panier pour contourner le système!
Par exemple, il aurait pu ajouter des items plus chers à son panier entre temps, ce qui aurait comme effet d'enregistrer dans la BD une commande différente du paiement.
Bref, dès qu'on passe à Stripe, il faut enregistrer l'achat, mais avec un statut de paiement d'attente. Cela permet d'identifier rapidement les commandes qui ne sont pas complétées.
De plus, on devrait sauvegarder d'autres éléments supplémentaires comme:
Checkout Session Id
de stripe qui sera utilisé pour rediriger le visiteur vers Stripe et récupérer les informations associ ées au paiement.Payement Intent Id
soit l'id du paiement Stripe associé à la transaction.
Au final, on aura besoin des colonnes suivantes dans la table des achats:
statut_paiement
(string)stripe_session_id
(string)stripe_payment_intent_id
(string)
Créer la migration
Créez la migration pour les colonnes nécessaires à Stripe:
statut_paiement
(string)stripe_session_id
(string)stripe_payment_intent_id
(string)
Vous pouvez utiliser des string(255)
et les colonnes doivent être nullables
.
De plus, nous aurons besoin de faire des requêtes sur la colonne stripe_session_id
, donc n'oubliez pas de créer un index pour cette colonne pour des raisons d'optimisation de performance.
Modifier le modèle d'achat
Pour votre modèle d'achat, ajoutez des propriétés supplémentaires correspondant aux nouvelles colonnes.
//...
public string? StatutPaiement { get; set; }
public string? StripeSessionId { get; set; }
public string? StripePaymentIntentId { get; set; }
//...
Modifier l'insertion en BD pour prendre en considération les nouvelles colonnes
La fonction de repository responsable de créer un achat (ex.: Create
) doit d’être en mesure de sauvegarder les informations liées aux nouvelles colonnes.
Vous devez effectuer la modification de la requête SQL en conséquence de votre côté.
Créer un modèle pour représenter les différents statuts de paiement
Malheureusement, C# ne supporte pas les Enum
sous forme de string
. Nous allons contourner cette limitation en créant une classe statique avec des propriétés statiques en lecture seule.
public static class StatutPaiement
{
public static readonly string Attente = "ATTENTE";
public static readonly string Paye = "PAYE";
public static readonly string Annule = "ANNULE";
}
Cela permettra d'utiliser StatutPaiement.Attente
, par exemple, plutôt que de gérer à la main ces string
de statut et de risquer d'introduire des erreurs de transcription.