Passer au contenu

Accepter les paiements en cryptomonnaie avec Next.js

Découvrez les étapes d’un paiement crypto, comparez prestataires et portefeuilles, et configurez une intégration Next.js sécurisée.

Payora11 min de lectureEN · RU · UK · ES · DE · FR · IT · PL · PT · HI · ZH
Accepter les paiements en cryptomonnaie avec Next.js

Comprendre le parcours de paiement et les exigences

Pour savoir comment accepter les paiements en cryptomonnaie sur un site Next.js et comment accepter les paiements en cryptomonnaie avec Next.js, commencez par comprendre le parcours de paiement, pas par écrire du code. Un paiement en cryptomonnaie comporte généralement 4 étapes : créer une commande, présenter une demande de paiement, suivre la blockchain et ne marquer la commande comme payée qu’après vérification.

En théorie, c’est simple. En pratique, ça l’est rarement.

« Accepter les cryptomonnaies » sur un site Next.js ne signifie pas que votre application détient elle-même des cryptomonnaies. Dans la plupart des cas, votre site crée une demande de paiement pour le client, qui envoie les fonds depuis un portefeuille. Un prestataire de paiement ou votre propre backend confirme ensuite le transfert. Un bon parcours de paiement doit aussi prévoir une expiration : un taux de change avantageux à 10 h ne le sera peut-être plus 20 minutes plus tard.

Vous devez également déterminer les réseaux et les actifs que vous prendrez en charge. Une boutique qui accepte l’USDT sur Ethereum, Polygon et BNB Chain n’a pas les mêmes besoins qu’un site qui accepte uniquement le BTC sur une seule blockchain. Le choix du réseau a une incidence sur les frais, les délais de confirmation et le type de portefeuille dont le client aura besoin. Si vous acceptez un paiement sur le mauvais réseau, les fonds risquent d’arriver à un endroit où vous ne pourrez pas les associer à une commande.

Voici un test pratique : un nouveau client peut-il terminer son paiement en moins de 2 minutes ? Si la réponse est non, le parcours doit être amélioré. Un portefeuille, un montant, une adresse clairement indiquée et une page de suivi explicite : voilà le niveau de clarté auquel les utilisateurs s’attendent.

Choisir un prestataire de paiement en cryptomonnaie ou intégrer un portefeuille

Il existe 3 grandes façons de créer un parcours de paiement en cryptomonnaie. Première option : utiliser le paiement hébergé d’un prestataire. Deuxième option : intégrer directement un portefeuille, en faisant communiquer votre application avec une bibliothèque de portefeuille. Troisième option : utiliser une passerelle de paiement entre l’utilisateur et la blockchain. Chaque approche demande un investissement différent, et le bon choix dépend de vos priorités : rapidité, contrôle ou les deux. Pour choisir une passerelle de paiement en cryptomonnaie, comparez notamment les actifs et réseaux pris en charge, les webhooks et les outils de gestion des factures.

Un paiement hébergé est généralement la solution la plus rapide à mettre en place. Vous créez une facture, redirigez le client vers une page hébergée et le prestataire se charge de détecter le paiement. Une intégration directe de portefeuille s’intègre plus naturellement à votre produit, mais exige généralement davantage de code, la gestion de plus de cas particuliers et une plus grande responsabilité dans la confirmation des paiements. Une passerelle se situe entre les deux et constitue souvent un choix pratique pour le commerce : elle peut créer des factures, suivre les confirmations et fournir des webhooks.

Avant de choisir, vérifiez 5 points : les cryptomonnaies prises en charge, les réseaux disponibles, la prise en charge des webhooks, l’expiration des factures et la quantité de code backend que vous devrez écrire. Si vous comparez des solutions pour une boutique, le guide sur les passerelles de paiement en cryptomonnaie pour le commerce en ligne est un bon point de départ : il aborde la même décision du point de vue d’un vendeur. Les travailleurs indépendants qui facturent des clients peuvent accorder plus d’importance aux factures et aux liens de paiement qu’à une vitrine en ligne ; c’est pourquoi le sujet des passerelles de paiement en cryptomonnaie pour les freelances mérite aussi votre attention.

Un aparté : si un prestataire affirme prendre en charge « tous les principaux actifs », demandez-lui une liste précise. « Tous » est vague. « BTC, ETH et USDC sur 3 réseaux », c’est concret et exploitable.

Configurer votre projet Next.js pour les paiements

Commencez par organiser proprement votre application. Dans un projet Next.js utilisant l’App Router, placez la logique de paiement dans des routes serveur ou des actions serveur, et gardez les clés secrètes hors du code client. Une structure simple peut comprendre 1 page produit, 1 formulaire de paiement, 1 route API pour créer les factures et 1 route webhook pour recevoir les événements de paiement.

Vos variables d’environnement doivent inclure la clé secrète du prestataire de paiement, le secret du webhook et les valeurs d’API publiques pouvant être exposées dans le navigateur. Ne placez jamais la clé secrète dans un composant client. Cette erreur peut compromettre tout le compte et peut coûter très cher.

Si votre prestataire propose un SDK, installez-le uniquement côté serveur. S’il fournit de simples points de terminaison HTTP, cela convient aussi. Le principe reste le même : le navigateur demande à votre backend Next.js de créer une demande de paiement, puis le backend communique avec le prestataire. Le navigateur ne doit jamais décider qu’une commande est payée.

Pour les équipes qui passent des paiements par carte aux cryptomonnaies, la structure est assez proche d’un parcours Stripe, même si les étapes de vérification diffèrent. Si cette comparaison vous est utile, lisez comment migrer depuis Stripe avant de définir vos routes API. Une seule route API suffit pour un prototype ; 3 ou 4 seront peut-être préférables lorsque vous ajouterez les nouvelles tentatives, les remboursements et l’historique des statuts de commande.

Créer l’interface de paiement dans Next.js

L’interface de paiement peut prendre la forme d’une fiche produit, d’une page de panier ou d’un simple bouton qui lance le paiement. Dans un composant client Next.js, le bouton envoie généralement les détails de la commande à votre route serveur, attend une réponse, puis redirige le client ou affiche les instructions pour son portefeuille. Pour intégrer un paiement crypto dans une application Next.js, gardez cette interface légère et confiez la création de la demande de paiement à votre backend.

Gardez le formulaire court. Le nom du produit, le montant, l’adresse e-mail et, éventuellement, une note de commande suffisent souvent. Si vous demandez 9 renseignements, attendez-vous à davantage d’abandons. Si vous n’en demandez que 3, les clients termineront plus vite. Un paiement qui prend 30 secondes est plus agréable qu’un paiement qui en prend 3 minutes, même si les deux aboutissent au même résultat.

Le bouton de paiement doit indiquer clairement l’action : « Payer en cryptomonnaie ». Évitez « Continuer » ou « Procéder au paiement », qui masquent la prochaine étape. Au clic, appelez votre backend, récupérez la demande de paiement, puis affichez dans la même vue l’adresse du portefeuille, le code QR et le montant.

Une bonne pratique consiste à laisser le récapitulatif de commande visible pendant le chargement des instructions de paiement. Le client voit ainsi l’article exact et le montant correspondant en même temps. Cela évite toute confusion lorsque le prix est fixé en USD, mais payé dans un actif volatil.

Générer des adresses de paiement, des factures ou des liens de paiement

Chaque commande doit correspondre à 1 demande de paiement unique. Il peut s’agir d’une adresse de portefeuille, d’un lien de paiement ou d’une facture créée par votre prestataire. Réutiliser la même adresse pour tous les clients complique le rapprochement des paiements et risque de créer des problèmes que votre équipe d’assistance n’a pas besoin de gérer.

Pour une petite boutique, vous pouvez générer une nouvelle adresse pour chaque commande et enregistrer dans votre base de données l’adresse, le montant attendu, l’actif et l’heure d’expiration. Avec un prestataire, celui-ci peut plutôt renvoyer un identifiant de facture et un lien de paiement hébergé. Dans les deux cas, associez la demande de paiement à l’identifiant de la commande avant de la présenter au client.

Présentez clairement les informations au client : actif, réseau, montant et adresse de destination. Un code QR est utile, mais ne doit pas remplacer le texte. Certains portefeuilles lisent mal les codes QR et certains utilisateurs préfèrent copier-coller l’adresse. Une adresse clairement visible reste une précaution indispensable.

Si vous devez gérer la facturation par adresse pour des services ou des factures, les principes sont similaires à ceux présentés dans l’article sur les passerelles de paiement en cryptomonnaie pour les freelances. Un lien de paiement convient souvent mieux à une commande ponctuelle ; un enregistrement de facture dédié est préférable si vous avez besoin d’un historique des paiements et de rappels.

Confirmer les paiements sur la blockchain et mettre à jour le statut des commandes

C’est souvent au moment de confirmer le paiement que les équipes font preuve de négligence. Ne marquez pas une commande comme payée lorsqu’un portefeuille indique un transfert en attente. Ne vous fiez pas uniquement au navigateur. Votre backend doit vérifier la transaction directement sur la blockchain ou recevoir un webhook signé du prestataire de paiement.

Le processus est généralement simple. Le prestataire détecte le paiement, envoie un webhook à votre route Next.js, puis votre serveur vérifie la signature avant de modifier le statut de la commande. Si vous implémentez vous-même cette étape, vous devez vérifier le hachage de la transaction, l’adresse de destination, l’actif, le montant et le nombre de confirmations exigé par votre politique. Un paiement peut sembler réel avant d’être définitif.

Utilisez un modèle de commande à 3 états : en attente, confirmé, payé. « En attente » signifie que la demande existe. « Confirmé » signifie que la blockchain a détecté le paiement et que celui-ci a reçu suffisamment de confirmations. « Payé » signifie que votre application a mis à jour la livraison ou les droits d’accès. Distinguez bien ces états : votre équipe d’assistance doit savoir si le client attend, si le paiement a été vérifié ou si la commande a déjà été livrée.

Si votre système utilise des webhooks, validez-les à chaque réception. L’article expliquant comment vérifier les webhooks signés de Payora reste utile même si vous n’utilisez pas PHP, car le principe est identique : rejeter les messages qui ne prouvent pas qu’ils proviennent du prestataire. Cette vérification suffit à bloquer les fausses notifications de paiement.

Gérer les cas particuliers, la sécurité et les tests

Un paiement en cryptomonnaie peut échouer de bien plus de façons qu’un paiement par carte. Un taux de change peut expirer. Un client peut envoyer les fonds sur le mauvais réseau. Un portefeuille peut envoyer un montant légèrement insuffisant. Le navigateur peut être actualisé en cours de route. Chaque situation nécessite une réponse et doit indiquer clairement à l’utilisateur la prochaine étape à suivre.

Ne laissez pas les taux de change expirés dans une situation ambiguë. Si un lien de paiement est valable 15 minutes, affichez clairement le compte à rebours et créez une nouvelle demande à son expiration. Pour les transferts effectués sur le mauvais réseau, prévoyez une procédure d’assistance : les fonds peuvent exister sans se trouver là où votre application les attend. Vous pouvez accepter les paiements insuffisants, les refuser ou les signaler pour examen, mais définissez votre politique avant le lancement, pas après la première réclamation.

La sécurité n’est pas une option. Conservez les clés secrètes dans des variables d’environnement réservées au serveur. Vérifiez les signatures des webhooks. Ne stockez que les données de paiement indispensables. Si vous consignez des identifiants de transaction, masquez les informations sensibles qui ne sont pas nécessaires au débogage. Effectuez des tests sur un testnet ou avec les outils de bac à sable de votre prestataire avant le lancement. Pour une liste de vérification pratique, consultez comment tester un paiement en cryptomonnaie avant de connecter un portefeuille réel.

N’oubliez pas les événements en double. Certains prestataires renvoient les webhooks en cas d’échec et, si votre système est mal conçu, la blockchain peut faire apparaître plusieurs fois le même paiement. Le code qui met à jour les commandes doit être idempotent : un même événement ne doit pas marquer deux fois la même commande comme payée. Cette simple protection peut vous faire gagner des heures.

Lancer, surveiller et améliorer l’expérience de paiement

Un déploiement sur Vercel ou un hébergeur similaire convient généralement bien à Next.js, mais les éléments liés aux paiements demandent toujours une attention particulière. Vérifiez que votre point de terminaison webhook est accessible publiquement, que vos variables d’environnement sont configurées en production et que votre build ne dépend pas de valeurs disponibles uniquement en local. Une route de paiement qui fonctionne sur votre ordinateur, mais échoue en production : voilà une erreur classique.

La journalisation est importante. Consignez la création des factures, la réception des webhooks, les résultats de vérification et les changements de statut. Fournissez suffisamment de détails pour suivre une commande de bout en bout, sans jamais inclure de secrets dans les journaux. Si un client vous dit avoir payé à 14 h 32, vous devriez retrouver l’événement correspondant en quelques secondes, pas en quelques heures.

De petites améliorations de l’expérience utilisateur peuvent réduire les frictions plus qu’on ne le croit. Affichez le montant à deux endroits : dans le récapitulatif de commande et à l’étape du paiement. Gardez le bouton de paiement visible une fois la facture chargée. Ajoutez un bouton de copie à côté de l’adresse. Indiquez clairement l’étape de confirmation, car les utilisateurs actualisent souvent la page pendant l’attente. Sans mise à jour de statut pendant 5 secondes, l’attente peut sembler durer 5 minutes.

À partir de là, le vrai travail ne concerne pas le premier paiement. Il s’agit du deuxième, du troisième et de celui qui échoue à l’interface entre un portefeuille, une blockchain et votre backend Next.js. Si votre système gère correctement ces 3 situations, vous disposez d’un parcours de paiement auquel vos clients peuvent faire confiance.

Comments

Prêt à commencer ?

Créez un compte et émettez votre première facture en moins d’une heure.

Ce que cette page répond