In den vorherigen Beiträgen haben wir zwei verschiedene Methoden zur Abwicklung der Zahlungsabwicklung in Laravel untersucht:
Obwohl beide Methoden effektiv sind, haben sie ihre Grenzen, wenn es darum geht, Zahlungsabwickler dynamisch basierend auf Laufzeitbedingungen (z. B. Benutzereingaben, Konfigurationseinstellungen) auszuwählen.
In diesem dritten und letzten Teil werden wir uns einen flexibleren Ansatz ansehen: die Verwendung des Factory-Musters. Dieses Entwurfsmuster ermöglicht es uns, die geeignete Implementierung von PaymentProcessorInterface basierend auf dem Kontext auszuwählen (z. B. je nach Anfrage zwischen Stripe oder PayPal zu wählen).
Das Factory Pattern bietet eine skalierbare Lösung, um verschiedene Implementierungen zur Laufzeit dynamisch aufzulösen. So richten Sie es Schritt für Schritt ein.
Zuerst definieren wir eine PaymentProcessorFactoryInterface, die beschreibt, wie verschiedene Zahlungsabwickler aufgelöst werden.
Diese Schnittstelle stellt sicher, dass jede von uns erstellte Factory über eine getProcessor-Methode verfügt, die für die Rückgabe des entsprechenden Zahlungsprozessors basierend auf dem bereitgestellten Argument (z. B. „stripe“ oder „paypal“) verantwortlich ist.
Schritt 2: Erstellen Sie die Factory-Implementierung
Als nächstes implementieren wir die Factory, die den entsprechenden Zahlungsprozessor basierend auf der Anbietereingabe auflöst.
Diese Fabrik wählt dynamisch den richtigen Zahlungsprozessor basierend auf den zur Laufzeit bereitgestellten Eingaben aus. In diesem Beispiel geben wir direkt neue Instanzen von StripePaymentProcessor und PayPalPaymentProcessor zurück. Bei Bedarf können diese Klassen zur besseren Verwaltung auch aus dem Service-Container von Laravel aufgelöst werden.
Schritt 3: Implementieren Sie Stripe- und PayPal-Prozessoren
Stellen Sie sicher, dass Sie sowohl über die Klassen StripePaymentProcessor als auch PayPalPaymentProcessor verfügen, die das PaymentProcessorInterface implementieren.
Beispiel: StripePaymentProcessor
Beispiel: PayPalPaymentProcessor
Implementieren Sie auf ähnliche Weise die PayPalPaymentProcessor-Klasse und folgen Sie dabei demselben Muster wie der StripePaymentProcessor.
Schritt 4: Binden Sie die Factory in den Service-Container
Um sicherzustellen, dass die Factory in Ihrer gesamten Laravel-Anwendung verfügbar ist, müssen Sie die PaymentProcessorFactory an den Service-Container von Laravel binden. Sie können dies im AppServiceProvider tun.
Fügen Sie in App\Providers\AppServiceProvider.php Folgendes in die Registermethode ein:
public function register() { $this->app->singleton(\App\Contracts\PaymentProcessorFactoryInterface::class, \App\Services\PaymentProcessorFactory::class); }Diese Bindung weist Laravel an, die PaymentProcessorFactory zu verwenden, wann immer die PaymentProcessorFactoryInterface angefordert wird, um sicherzustellen, dass es in der gesamten Anwendung nur eine Instanz der Factory gibt.
Schritt 5: Verwendung der Factory in einem Controller
Nachdem die Fabrik eingerichtet ist, können Sie sie in Ihre Controller einschleusen, um den geeigneten Zahlungsprozessor basierend auf Laufzeitdaten, wie z. B. der Anforderungseingabe, dynamisch auszuwählen.
Beispiel: PaymentController
paymentProcessorFactory = $paymentProcessorFactory; } public function makePayment(Request $request) { $provider = $request->input('provider'); // E.g., 'stripe' or 'paypal' $amount = $request->input('amount'); $currency = $request->input('currency'); $paymentDetails = $request->input('details'); // Get the appropriate payment processor based on the provider $paymentProcessor = $this->paymentProcessorFactory->getProcessor($provider); // Use the selected payment processor to create a payment $response = $paymentProcessor->createPayment($amount, $currency, $paymentDetails); return response()->json($response); } }In diesen Controller injizieren wir das PaymentProcessorFactoryInterface per Abhängigkeitsinjektion. Wenn eine Zahlung angefordert wird, ermitteln wir anhand der Anfrage den Zahlungsanbieter (z. B. Stripe oder PayPal), leiten ihn an die Fabrik weiter und lösen dynamisch den entsprechenden Zahlungsprozessor auf.
Schritt 6: Umgang mit verschiedenen Zahlungsanbietern
In diesem Setup kann der Controller nun dynamisch mit verschiedenen Zahlungsanbietern umgehen, indem er einfach den Anbieternamen in der Anfrage wechselt. Diese Methode ist besonders leistungsstark, wenn Sie mehrere Zahlungsgateways verwalten müssen, ohne die Logik zu duplizieren oder Ihren Code eng an bestimmte Implementierungen zu koppeln.
Abschluss
Die Verwendung des Factory-Musters in Laravel 11 bietet einen äußerst flexiblen Ansatz zur Auswahl verschiedener Zahlungsabwickler zur Laufzeit. Hier ist eine Zusammenfassung der von uns behandelten Schritte:
Wir haben dieses dreiteilige Tutorial mit einem einzelnen Zahlungsprozessor mit einer hartcodierten Auswahl begonnen, dann haben wir eine In-Code-Konfiguration („Kompilierungszeit“) mithilfe der Laravel Service Container Binding verwendet und dann haben wir in diesem Teil das Design weiter umgestaltet Prinzipien und Designmuster im Hinterkopf, die es uns ermöglichten, den Code umzugestalten und Folgendes zu erreichen:
Mit diesem Setup verfügen wir nun über ein leistungsstarkes, flexibles System zur Zahlungsabwicklung in Laravel. Wenn wir zusätzliche Prozessoren unterstützen müssen, können wir die Fabrik problemlos erweitern, um die Logik zur Auswahl von Anbietern zu unterstützen und zu ändern und verschiedene Geschäftslogikszenarien zu bewältigen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3