Passerelle de paiement fictive pour les tests : Fournisseur Dummy de Casdoor, Mode test Stripe et Bac à sable PayPal
Une passerelle de paiement fictive est un fournisseur de paiement qui accepte tous les paiements comme payés sans contacter une banque ou un réseau de cartes, afin que vous puissiez tester les commandes, les abonnements et le traitement des commandes sans argent ni compte de passerelle. Casdoor en inclut un : le Fournisseur de paiement Dummy. Ajoutez-le à un produit, achetez le produit, et Casdoor enregistre le paiement et la commande comme Paid, démarre l'abonnement et écrit la transaction, le tout sans quitter votre serveur. Utilisez Dummy en développement, et passez à un bac à sable fournisseur (mode test Stripe, bac à sable PayPal, bac à sable Paddle) en préproduction, où vous avez également besoin de cartes refusées, de 3-D Secure et de redirections réelles.
Aperçu de Dummy, Balance et bacs à sable fournisseurs
| Fournisseur | Environnement de test | Comment Casdoor choisit test ou production | Type de fournisseur Casdoor |
|---|---|---|---|
| Dummy | Aucun nécessaire, chaque paiement réussit | Toujours simulé | Dummy |
| Balance | Interne, financé par un produit de recharge | Toujours interne | Balance |
| Stripe | Bac à sable avec les clés sk_test_ / pk_test_ | Selon les clés saisies | Stripe |
| PayPal | Applications bac à sable et comptes bac à sable | Un runmode autre que prod utilise le bac à sable | PayPal |
| Paddle | Compte bac à sable séparé chez sandbox-vendors.paddle.com | Un runmode autre que prod utilise sandbox-api.paddle.com | Paddle |
| Adyen | Environnement de test (checkout-test.adyen.com) | Un runmode autre que prod utilise l'environnement de test | Adyen |
| AirWallex | Separate sandbox account | runmode other than prod calls api.sandbox.airwallex.com | AirWallex |
| Lemon Squeezy | Mode test de la boutique avec des clés API de test | Selon la clé API saisie | Lemon Squeezy |
| FastSpring | Vitrine de test avec .test. dans l'hôte | Selon l'Host saisi | FastSpring |
| Polar | Sandbox sur sandbox.polar.sh | Définissez Host du fournisseur sur https://sandbox-api.polar.sh | Polar |
runmode est l'option dans conf/app.conf (ou la variable d'environnement runmode) décrite dans la référence de configuration. Sa valeur par défaut est dev, donc une nouvelle instance de Casdoor communique avec les bacs à sable de PayPal, Paddle, Adyen et AirWallex jusqu'à ce que vous la régliez sur prod.
Signification d'une transaction fictive
Une transaction fictive suit les mêmes enregistrements qu'un achat réel (commande, paiement, abonnement, écriture comptable) mais ne déplace aucun argent. Elle diffère d'une transaction en bac à sable. Un bac à sable appelle toujours l'API du fournisseur, affiche la page de paiement du fournisseur et envoie des webhooks ; seul l'argent est faux. Une transaction fictive ne quitte jamais votre système.
Cette différence décide de ce que chacun peut tester. Une passerelle fictive est bonne pour votre propre logique : le plan accorde-t-il le bon rôle, la commande apparaît-elle, le coupon est-il compté comme utilisé, l'utilisateur arrive-t-il sur la bonne page. Un bac à sable est bon pour l'intégration : identifiants, redirections, refus de carte, défis d'authentification et livraison des webhooks. Vous avez besoin des deux, à des étapes différentes.
Comment fonctionne le fournisseur Dummy de Casdoor
Le fournisseur Dummy n'a aucun paramètre ni page de paiement. Voici le flux complet sur la branche master de Casdoor :
- Lorsque l'utilisateur paie, l'appel
Paydu fournisseur renvoie la page de résultat Casdoor comme URL de paiement. Il encode le prix et la devise dans l'ID de commande au lieu de créer quoi que ce soit chez un vendeur. - Casdoor stocke le paiement avec l'état
Createdet redirige directement le navigateur vers la page de résultat. Il n'y a pas de formulaire de carte bancaire, même simulé. - La page de résultat voit un paiement
Createdet appellePOST /api/notify-paymentenviron une seconde plus tard. - L'appel
Notifydu fournisseur répond toujoursPaid, avec le prix qu'il avait encodé précédemment, de sorte que la vérification du prix passe. - Casdoor exécute ensuite le chemin de succès normal : le paiement et la commande deviennent
Paid, les abonnements créés pour le paiement sont mis à jour, une transactionPurchaseest écrite, le stock du produit est réduit et un coupon sur la commande est marqué comme utilisé. Si le produit est un produit de recharge, une transactionRechargeajoute également le montant au solde de l'utilisateur.
Donc oui, Dummy marque la commande comme payée immédiatement, et l'utilisateur voit la page de succès sans étape intermédiaire.
Deux limites découlent de cette conception. Dummy ne peut pas échouer : il n'y a aucun moyen de lui faire retourner Canceled, Timeout ou Error, donc les chemins d'échec nécessitent un bac à sable (sandbox). Et Dummy ne peut pas renouveler : Casdoor n'autorise le renouvellement automatique que pour Balance et Stripe, donc un abonnement acheté avec Dummy a toujours le renouvellement automatique désactivé.
Sur une nouvelle base de données, Casdoor crée un fournisseur Dummy intégré nommé provider_payment_dummy dans l'organisation admin, à côté d'un fournisseur Balance intégré. Vous pouvez également ajouter le vôtre : dans Identity > Providers, définissez Category sur Payment et Type sur Dummy.
Gardez Dummy hors de la production
/api/notify-payment is open to anonymous callers, because real gateways call it without a Casdoor session. For a real provider that is safe, since Notify checks the payment with the vendor. Dummy checks nothing and reports Paid, so for a Dummy payment Casdoor only accepts the call from the payment's own user or an admin of its organization. That still leaves the main risk: any product that lists Dummy in its Payment providers shows it at checkout, and any signed-in user who picks it gets the product for free. Remove Dummy from every product before you go live, and do not put it on products in an organization that real users can reach.
Balance : le portefeuille interne que vous pouvez alimenter avec Dummy
Le fournisseur Balance permet aux utilisateurs de payer depuis leur solde de compte. Casdoor vérifie le solde d'abord, déduit le prix, et marque le paiement et la commande Paid dans la même requête. Balance est une vraie fonctionnalité de production, pas un outil de test, mais il se marie bien avec Dummy : mettez Dummy sur un produit de recharge, "approvisionnez" un utilisateur de test, et le solde est crédité sans argent impliqué.
Cela importe pour les abonnements, car Balance est l'un des deux fournisseurs qui prennent en charge le renouvellement automatique. Avec Dummy plus Balance, vous pouvez tester toute la boucle de renouvellement sur un ordinateur portable sans compte de passerelle.
Bacs à sable des vendeurs pour le staging
Stripe. Stripe sépare les données de test et de production par clés : les clés de bac à sable commencent par pk_test_ et sk_test_, les clés de production par pk_live_ et sk_live_, et les objets dans un mode ne sont pas visibles dans l'autre. Casdoor utilise les clés que vous placez dans le fournisseur Stripe ; runmode ne change rien pour Stripe. Les cartes de test de Stripe couvrent les chemins que Dummy ne peut pas : 4242 4242 4242 4242 réussit, 4000 0000 0000 0002 est refusée, et 4000 0000 0000 3220 nécessite 3-D Secure. Utilisez une date d'expiration future et n'importe quel CVC. Les conditions de Stripe interdisent de tester en mode production avec de vraies informations de carte.
PayPal. Le bac à sable PayPal est un environnement séparé avec ses propres applications et comptes de test. PayPal crée un compte personnel par défaut et un compte professionnel par défaut lorsque vous vous connectez pour la première fois au tableau de bord développeur ; vous payez avec le personnel. Créez l'application en mode bac à sable, placez ses identifiants dans le fournisseur PayPal, et gardez runmode à dev.
Paddle. Le bac à sable est un compte séparé sur sandbox-vendors.paddle.com avec ses propres clés et produits ; rien n'est partagé avec la production. Les cartes de test de Paddle incluent 4242 4242 4242 4242 (réussit) et 4000 0000 0000 0002 (refusée).
Lemon Squeezy has a test mode per store, and API keys created in test mode only see test data. FastSpring test orders go through a test storefront: insert .test. into the store host, for example yourstore.test.onfastspring.com, and enter that as the provider's Host. Polar has a sandbox with its own tokens; set the provider's Host to https://sandbox-api.polar.sh to use it, and leave Host empty for live Polar. Alipay in Casdoor is also hard-wired to production.
Un plan de test pour les produits, plans et abonnements de Casdoor
Développement, avec Dummy
- Créez un produit et ajoutez Dummy à ses Payment providers.
- Créez un plan pour ce produit et une page de tarification qui le liste (voir l'aperçu de la tarification).
- En tant qu'utilisateur de test, ouvrez la page de tarification et achetez le plan. Vérifiez que le paiement et la commande sont
Paid, que l'abonnement estActive, et qu'une transactionPurchaseapparaît sur l'utilisateur. - Connectez-vous en tant qu'utilisateur et vérifiez que le rôle du plan a pris effet dans votre application.
- Si le plan a Is exclusive activé, achetez-le à nouveau et attendez-vous à l'erreur indiquant que l'utilisateur a déjà un abonnement actif.
- Appliquez un coupon lors du paiement et vérifiez que son utilisation est enregistrée.
- Créez un produit de recharge avec Dummy, approvisionnez l'utilisateur de test, puis achetez le plan avec Balance et Auto renew activé.
- Pour tester le renouvellement sans attendre un mois, modifiez l'End time de l'abonnement sur sa page d'édition afin qu'il se termine dans les 24 heures. Casdoor vérifie les abonnements une fois par heure ; attendez-vous à ce que l'Renewal state soit
Renewedet qu'un nouvel abonnement soit créé pour la période suivante. Puis achetez le plan à nouveau avec un solde trop faible pour la période suivante, déplacez son heure de fin de la même manière, et attendez-vous àFailedavec la raison dans Renewal message. La documentation sur les abonnements décrit les règles exactes.
Staging, avec un bac à sable
- Exécutez l'environnement de préproduction avec
runmode = devet uniquement des identifiants sandbox ou de test. - Remplacez Dummy par le fournisseur que vous utiliserez en production, configuré avec ses clés sandbox.
- Répétez l'achat et vérifiez que le navigateur redirige vers la page de paiement du vendeur puis revient sur la page de résultat Casdoor.
- Avec Stripe, effectuez un paiement avec la carte de refus et un autre avec la carte 3-D Secure, puis vérifiez les états du paiement et de la commande pour chacun.
- Avec Stripe et Auto renew activé, Casdoor enregistre la carte lors du paiement et procède lui-même au débit lors du renouvellement, ce qui permet à l'astuce sur l'heure de fin mentionnée ci-dessus de fonctionner également dans l'environnement sandbox.
Passage en production
Supprimez Dummy de tous les produits, définissez runmode = prod si vous utilisez PayPal, Paddle, Adyen ou AirWallex, et remplacez les clés par vos clés de production. Vérifiez les enregistrements de paiement des premières commandes réelles.
Si vous testez également les e-mails d'inscription dans le même environnement, un collecteur de courrier local empêche ces messages d'atteindre de vraies boîtes de réception ; consultez MailHog vs Mailpit.
Références
- Code source Casdoor :
pp/dummy.go,pp/balance.go,object/order_pay.go,object/payment.go,object/subscription_renew.go - Documentation Casdoor : Fournisseurs de paiement, Dummy, Balance, Abonnement
- Stripe : Tests, Clés API
- PayPal : Sandbox, Comptes Sandbox
- Paddle : Sandbox
- Lemon Squeezy : Mode Test
- FastSpring : Commandes de test
- Polar : Sandbox
- Adyen : Endpoints de production