Dummy Payment Gateway for Testing: Casdoor's Dummy Provider, Stripe Test Mode and PayPal Sandbox
Ein Dummy-Zahlungs-Gateway akzeptiert jeden Checkout als bezahlt, ohne eine Bank oder ein Kartennetzwerk zu kontaktieren, sodass Sie Bestellungen, Abonnements und die Auftragsabwicklung ohne Geld und ohne Gateway-Konto testen können. Casdoor bringt einen mit: den Dummy payment provider. Fügen Sie ihn zu einem Produkt hinzu, kaufen Sie das Produkt, und Casdoor zeichnet die Zahlung und die Bestellung als Paid auf, startet das Abonnement und schreibt die Transaktion, alles ohne Ihren Server zu verlassen. Verwenden Sie Dummy in der Entwicklung und wechseln Sie in der Staging-Umgebung zu einem Anbieter-Sandbox-Modus (Stripe Test Mode, PayPal Sandbox, Paddle Sandbox), wo Sie auch abgelehnte Karten, 3-D Secure und echte Weiterleitungen benötigen.
Dummy, Balance und Anbieter-Sandboxes im Überblick
| Anbieter | Testumgebung | Wie Casdoor Test oder Live auswählt | Casdoor-Anbietertyp |
|---|---|---|---|
| Dummy | Keine erforderlich, jede Zahlung schlägt fehl | Immer simuliert | Dummy |
| Balance | Intern, finanziert durch ein Aufladeprodukt | Immer intern | Balance |
| Stripe | Sandbox mit sk_test_ / pk_test_ Schlüsseln | Durch die eingegebenen Schlüssel | Stripe |
| PayPal | Sandbox-Apps und Sandbox-Konten | runmode ungleich prod verwendet die Sandbox | PayPal |
| Paddle | Separates Sandbox-Konto unter sandbox-vendors.paddle.com | runmode ungleich prod verwendet sandbox-api.paddle.com | Paddle |
| Adyen | Testumgebung (checkout-test.adyen.com) | runmode ungleich prod verwendet die Testumgebung | Adyen |
| AirWallex | Separate sandbox account | runmode other than prod calls api.sandbox.airwallex.com | AirWallex |
| Lemon Squeezy | Store-Testmodus mit Testmodus-API-Schlüsseln | Durch den eingegebenen API-Schlüssel | Lemon Squeezy |
| FastSpring | Test-Frontend mit .test. im Host | Durch den eingegebenen Host | FastSpring |
| Polar | Sandbox unter sandbox.polar.sh | Setzen Sie den Host des Anbieters auf https://sandbox-api.polar.sh | Polar |
runmode ist die Option in conf/app.conf (oder die Umgebungsvariable runmode), die in der Konfigurationsreferenz beschrieben ist. Der Standardwert ist dev, daher spricht ein neues Casdoor die Sandboxes von PayPal, Paddle, Adyen und AirWallex an, bis Sie es auf prod setzen.
Was eine Dummy-Transaktion bedeutet
Eine Dummy-Transaktion durchläuft dieselben Datensätze wie ein echter Kauf (Bestellung, Zahlung, Abonnement, Buchhaltungseintrag), bewegt aber kein Geld. Sie unterscheidet sich von einer Sandbox-Transaktion. Eine Sandbox ruft weiterhin die API des Anbieters auf, zeigt die Checkout-Seite des Anbieters an und sendet Webhooks; nur das Geld ist falsch. Eine Dummy-Transaktion verlässt Ihr System niemals.
Dieser Unterschied bestimmt, was jeweils getestet werden kann. Ein Dummy-Gateway ist gut für Ihre eigene Logik: Gewährt der Plan die richtige Rolle, erscheint die Bestellung, zählt der Gutschein als verwendet, landet der Benutzer auf der richtigen Seite. Eine Sandbox ist gut für die Integration: Zugangsdaten, Weiterleitungen, Kartenablehnungen, Authentifizierungs-Herausforderungen und Webhook-Zustellung. Sie benötigen beide, in verschiedenen Phasen.
Wie der Casdoor Dummy-Anbieter funktioniert
Der Dummy-Anbieter hat keine Einstellungen und keine Zahlungsseite. Hier ist der vollständige Ablauf auf Casdoor master:
- Wenn der Benutzer bezahlt, gibt der
Pay-Aufruf des Anbieters die Casdoor-Ergebnisseite als Zahlungs-URL zurück. Er verpackt Preis und Währung in die Bestell-ID, anstatt etwas beim Anbieter zu erstellen. - Casdoor speichert die Zahlung im Zustand
Createdund leitet den Browser direkt zur Ergebnisseite weiter. Es gibt kein Kartenformular, weder echt noch simuliert. - Die Ergebnisseite erkennt eine
Created-Zahlung und ruft etwa eine Sekunde späterPOST /api/notify-paymentauf. - Der
Notify-Aufruf des Anbieters antwortet immer mitPaid, zusammen mit dem zuvor verpackten Preis, sodass die Preisprüfung bestanden wird. - Casdoor führt dann den normalen Erfolgspfad aus: Die Zahlung und die Bestellung werden auf
Paidgesetzt, die für die Zahlung erstellten Abonnements werden aktualisiert, einePurchase-Transaktion wird geschrieben, der Produktbestand wird reduziert und ein Coupon auf der Bestellung wird als verwendet markiert. Wenn das Produkt ein Auflade-Produkt ist, fügt eineRecharge-Transaktion den Betrag auch dem Guthaben des Benutzers hinzu.
Ja, Dummy markiert die Bestellung sofort als bezahlt, und der Benutzer sieht die Erfolgsseite ohne Zwischenschritt.
Aus diesem Design ergeben sich zwei Einschränkungen. Dummy kann nicht fehlschlagen: Es gibt keine Möglichkeit, es dazu zu bringen, Canceled, Timeout oder Error zurückzugeben, daher benötigen Fehlerpfade eine Sandbox. Und Dummy kann nicht erneuern: Casdoor erlaubt automatische Verlängerung nur für Balance und Stripe, daher hat ein mit Dummy gekauftes Abonnement immer die automatische Verlängerung deaktiviert.
In einer neuen Datenbank erstellt Casdoor einen integrierten Dummy-Anbieter namens provider_payment_dummy in der Organisation admin, neben einem integrierten Balance-Anbieter. Sie können auch Ihren eigenen hinzufügen: Setzen Sie in Identity > Providers die Category auf Payment und den Type auf Dummy.
Vermeiden Sie Dummy in der Produktion
/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: Die interne Geldbörse, die Sie mit Dummy aufladen können
Der Balance-Anbieter ermöglicht es Benutzern, aus ihrem Kontoguthaben zu bezahlen. Casdoor prüft zuerst das Guthaben, zieht den Preis ab und markiert die Zahlung und die Bestellung im selben Request als Paid. Balance ist eine echte Produktionsfunktion, kein Testwerkzeug, aber es ergänzt sich gut mit Dummy: Setzen Sie Dummy auf ein Auflade-Produkt, "laden" Sie einen Testbenutzer auf, und das Guthaben wird ohne tatsächlichen Geldeinsatz gutgeschrieben.
Dies ist wichtig für Abonnements, da Balance einer der beiden Anbieter ist, die die automatische Verlängerung unterstützen. Mit Dummy plus Balance können Sie den gesamten Erneuerungszyklus auf einem Laptop ohne Gateway-Konto testen.
Anbieter-Sandboxes für Staging
Stripe. Stripe trennt Test- und Live-Daten durch Schlüssel: Sandbox-Schlüssel beginnen mit pk_test_ und sk_test_, Live-Schlüssel mit pk_live_ und sk_live_, und Objekte in einem Modus sind im anderen nicht sichtbar. Casdoor verwendet die Schlüssel, die Sie im Stripe-Anbieter eingeben; runmode ändert nichts für Stripe. Stripes Testkarten decken die Pfade ab, die Dummy nicht kann: 4242 4242 4242 4242 schlägt erfolgreich, 4000 0000 0000 0002 wird abgelehnt, und 4000 0000 0000 3220 erfordert 3-D Secure. Verwenden Sie jedes zukünftige Ablaufdatum und jede CVC. Stripes Bedingungen verbieten das Testen im Live-Modus mit echten Kartendetails.
PayPal. Die PayPal-Sandbox ist eine separate Umgebung mit eigenen Apps und Testkonten. PayPal erstellt bei der ersten Anmeldung im Developer Dashboard standardmäßig ein persönliches und ein geschäftliches Sandbox-Konto; Sie zahlen mit dem persönlichen. Erstellen Sie die App im Sandbox-Modus, geben Sie ihre Zugangsdaten im PayPal-Anbieter ein und lassen Sie runmode auf dev.
Paddle. Die Sandbox ist ein separates Konto unter sandbox-vendors.paddle.com mit eigenen Schlüsseln und Produkten; nichts wird mit Live geteilt. Paddles Testkarten umfassen 4242 4242 4242 4242 (erfolgreich) und 4000 0000 0000 0002 (abgelehnt).
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.
Ein Testplan für Casdoor-Produkte, Pläne und Abonnements
Entwicklung, mit Dummy
- Erstellen Sie ein Produkt und fügen Sie Dummy zu seinen Payment providers hinzu.
- Erstellen Sie einen Plan für dieses Produkt und eine Preisseite, die ihn auflistet (siehe die Preisübersicht).
- Öffnen Sie als Testbenutzer die Preisseite und kaufen Sie den Plan. Prüfen Sie, ob die Zahlung und die Bestellung
Paidsind, das AbonnementActiveist und einePurchase-Transaktion beim Benutzer erscheint. - Melden Sie sich als Benutzer an und prüfen Sie, ob die Rolle des Plans in Ihrer Anwendung wirksam geworden ist.
- Wenn Is exclusive für den Plan aktiviert ist, kaufen Sie ihn erneut und erwarten Sie die Fehlermeldung, dass der Benutzer bereits ein aktives Abonnement hat.
- Wenden Sie beim Checkout einen Coupon an und prüfen Sie, ob seine Verwendung aufgezeichnet wird.
- Erstellen Sie ein Auflade-Produkt mit Dummy, laden Sie den Testbenutzer auf, und kaufen Sie dann den Plan mit Balance und aktiviertem Auto renew.
- Um die Erneuerung zu testen, ohne einen Monat zu warten, bearbeiten Sie die End time des Abonnements auf seiner Bearbeitungsseite so, dass sie innerhalb von 24 Stunden endet. Casdoor prüft Abonnements einmal pro Stunde; erwarten Sie Renewal state
Renewedund ein neues Abonnement für den nächsten Zeitraum. Kaufen Sie den Plan dann erneut mit einem Guthaben, das für den nächsten Zeitraum zu niedrig ist, verschieben Sie die Endzeit auf dieselbe Weise und erwarten SieFailedmit dem Grund in Renewal message. Die Abonnement-Dokumentation beschreibt die genauen Regeln.
Staging, mit einer Sandbox
- Führe die Staging-Umgebung mit
runmode = devund ausschließlich Sandbox- oder Test-Anmeldedaten aus. - Ersetze Dummy durch den Anbieter, den du in der Produktion verwenden wirst, konfiguriert mit seinen Sandbox-Schlüsseln.
- Wiederhole den Kauf und prüfe, ob der Browser zum Checkout des Anbieters weitergeleitet wird und zur Casdoor-Ergebnisseite zurückkehrt.
- Bei Stripe: Zahle einmal mit einer abgelehnten Karte und einmal mit einer 3-D Secure-Karte und prüfe für jede Transaktion den Zahlungs- und Bestellstatus.
- Wenn bei Stripe Auto renew aktiviert ist, speichert Casdoor die Karte beim Checkout und belastet sie selbst bei der Verlängerung, sodass der oben genannte Trick mit dem Endzeitpunkt auch in der Sandbox funktioniert.
Live-Schaltung
Entferne Dummy aus allen Produkten, setze runmode = prod, wenn du PayPal, Paddle, Adyen oder AirWallex nutzt, und tausche gegen Live-Schlüssel. Überprüfe die Zahlungsdatensätze der ersten echten Bestellungen.
Wenn du in derselben Umgebung auch die E-Mail-Bestätigung bei der Registrierung testest, verhindert ein lokaler Mail-Catcher, dass diese Nachrichten in echten Postfächern landen; siehe MailHog vs Mailpit.
Referenzen
- Casdoor-Quellcode:
pp/dummy.go,pp/balance.go,object/order_pay.go,object/payment.go,object/subscription_renew.go - Casdoor-Dokumentation: Payment providers, Dummy, Balance, Subscription
- Stripe: Testing, API keys
- PayPal: Sandbox, Sandbox accounts
- Paddle: Sandbox
- Lemon Squeezy: Test mode
- FastSpring: Test orders
- Polar: Sandbox
- Adyen: Live endpoints