33-4 Line Items
Comme mentionné à l'étape précédente, il faut envoyer à Stripe le montant et les articles à payer.
Pour ce faire, il est possible de passer à l'objet d'options une liste de LineItems
. Dans le cas de Snowfall, je n'enverrai qu'un seul LineItem
puisque mon panier ne supporte qu'un item.
Dans votre projet, avec plusieurs items dans le panier, vous devez envoyer plusieurs line items!
Ajouter une liste de SessionLineItemOptions
À l'objet d'options, ajoutez une List<SessionLineItemOptions>
contenant le détail de la commande.
var options = new SessionCreateOptions
{
LineItems = new List<SessionLineItemOptions>
{
new SessionLineItemOptions
{
PriceData = new SessionLineItemPriceDataOptions
{
UnitAmount = (long)(evenement.Prix * 100), // 99.99 = 9999 sans virgule,
Currency = "cad",
ProductData = new SessionLineItemPriceDataProductDataOptions
{
Name = evenement.Nom,
},
},
Quantity = 1,
},
},
Mode = "payment",
SuccessUrl = Url.Action("Confirmation", "Inscriptions", null , Request.Scheme) + "?sessionId={CHECKOUT_SESSION_ID}",
CancelUrl = Url.Action("Annuler", "Inscriptions", null, Request.Scheme) + "?sessionId={CHECKOUT_SESSION_ID}",
};
Remarquez que le prix a été converti en format long
, sans virgule. C'est le format attendu par Stripe. Comme nous utilisons un format Decimal
à chiffres après la virgule, on multiplie par 100.
Ajouter les types de paiements acceptés
Finalement, toujours à l'objet d'options, ajoutons card
comme type de paiement accepté.
var options = new SessionCreateOptions
{
LineItems = new List<SessionLineItemOptions>
{
new SessionLineItemOptions
{
PriceData = new SessionLineItemPriceDataOptions
{
UnitAmount = (long)(evenement.Prix * 100), // 99.99 = 9999 sans virgule,
Currency = "cad",
ProductData = new SessionLineItemPriceDataProductDataOptions
{
Name = evenement.Nom,
},
},
Quantity = 1,
},
},
PaymentMethodTypes = new List<string>
{
"card",
},
Mode = "payment",
SuccessUrl = Url.Action("Confirmation", "Inscriptions", null , Request.Scheme) + "?sessionId={CHECKOUT_SESSION_ID}",
CancelUrl = Url.Action("Annuler", "Inscriptions", null, Request.Scheme) + "?sessionId={CHECKOUT_SESSION_ID}",
};
Vous pouvez en apprendre plus sur les différentes options de paiement supportées ici: https://stripe.com/docs/api/payment_methods/object
Test
Vous pouvez maintenant retester et devriez être redirigé vers Stripe!
Remarquez l'identifiant dans l'URL, il s'agit du Id de session Stripe.
Le Id de session devrait être le même que celui sauvegardé dans la base de données et associé à la commande en attente de paiement.
Entrer des informations de paiement
Vous pouvez utiliser les informations de carte de crédit suivantes:
- Numéro:
4242 4242 4242 4242
- Expiration: n'importe quoi
- CVC: n'importe quoi
Vous pouvez vous référer à la documentation de Stripe pour plus d'informations sur les cartes de test: https://stripe.com/docs/testing
Vous pouvez ensuite faire "Payer". Vous obtiendrez cependant une erreur 404 ou une erreur NullReferenceException
. La raison est que l'URL de redirection est au format suivant: http://localhost:5155/Acahts/Confirmation?sessionId=cs_test_[...]
Alors que la route associée à la page de confirmation s'attend à recevoir plutôt un paramètre d'URL du genre http://localhost:5155/Achats/38463f6c-c726-44c2-ab79-2069527cb0a8
Nous allons remédier à la situation à la prochaine étape.
Vérifier que le paiement est bien présent dans Stripe
Même si la page de confirmation n'est pas correctement associée à la confirmation de paiement reçu de Stripe, le paiement devrait avoir fonctionné!
Vous pouvez valider dans l'interface d'administration de Stripe, sous l'onglet Paiements
.