Aller au contenu principal

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.

attention

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}",
};
info

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}",
};
info

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.

Imgur

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.

Imgur

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
info

Vous pouvez vous référer à la documentation de Stripe pour plus d'informations sur les cartes de test: https://stripe.com/docs/testing

Imgur

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_[...]

Imgur

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.

Imgur