在之前的文章中,我们探索了 Laravel 中处理付款处理的两种不同方法:
虽然这两种方法都很有效,但在根据运行时条件(例如用户输入、配置设置)动态选择支付处理器时它们都有其局限性。
在第三部分也是最后一部分中,我们将研究一种更灵活的方法:使用工厂模式。这种设计模式允许我们根据上下文选择适当的 PaymentProcessorInterface 实现(例如,根据请求在 Stripe 或 PayPal 之间进行选择)。
工厂模式提供了一个可扩展的解决方案,可以在运行时动态解决不同的实现。以下是逐步设置的方法。
首先,让我们定义一个 PaymentProcessorFactoryInterface,它概述了如何解析不同的支付处理器。
这个接口确保我们创建的任何工厂都有一个 getProcessor 方法,负责根据提供的参数(例如“stripe”或“paypal”)返回适当的支付处理器。
第 2 步:创建工厂实现
接下来,我们将实现根据提供商输入解析适当支付处理器的工厂。
该工厂根据运行时提供的输入动态选择正确的支付处理器。在此示例中,我们直接返回 StripePaymentProcessor 和 PayPalPaymentProcessor 的新实例。如果需要,这些类也可以从 Laravel 的服务容器中解析,以便更好的管理。
第 3 步:实施 Stripe 和 PayPal 处理器
确保您拥有实现 PaymentProcessorInterface 的 StripePaymentProcessor 和 PayPalPaymentProcessor 类。
示例:StripePaymentProcessor
示例:PayPalPaymentProcessor
同样,实现 PayPalPaymentProcessor 类,遵循与 StripePaymentProcessor 相同的模式。
第四步:在服务容器中绑定工厂
为了确保工厂在整个 Laravel 应用程序中可用,您需要将 PaymentProcessorFactory 绑定到 Laravel 的服务容器。您可以在 AppServiceProvider 中执行此操作。
在App\Providers\AppServiceProvider.php中,在register方法中添加以下内容:
public function register() { $this->app->singleton(\App\Contracts\PaymentProcessorFactoryInterface::class, \App\Services\PaymentProcessorFactory::class); }此绑定告诉 Laravel 在请求 PaymentProcessorFactoryInterface 时使用 PaymentProcessorFactory,确保整个应用程序中只有一个工厂实例。
第 5 步:在控制器中使用工厂
现在工厂已经设置完毕,您可以将其注入控制器中,以根据运行时数据(例如请求输入)动态选择适当的支付处理器。
示例: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); } }在此控制器中,我们通过依赖注入注入 PaymentProcessorFactoryInterface。当请求付款时,我们根据请求确定付款提供商(例如 Stripe 或 PayPal),将其传递给工厂,并动态解析适当的付款处理器。
第 6 步:处理不同的支付提供商
在此设置中,控制器现在可以通过简单地切换请求中的提供商名称来动态处理不同的支付提供商。当您需要处理多个支付网关而无需重复逻辑或将代码与特定实现紧密耦合时,此方法特别强大。
结论
在 Laravel 11 中使用工厂模式提供了一种高度灵活的方法来在运行时选择不同的支付处理器。以下是我们所涵盖的步骤的摘要:
我们使用单个支付处理器开始这个由 3 部分组成的教程,并进行硬编码选择,然后我们通过 Laravel 服务容器绑定使用代码内(“编译时”)配置,然后在这部分中我们不断重构设计牢记原则和设计模式,这使我们能够重构代码,实现:
通过此设置,我们现在拥有一个强大、灵活的系统来处理 Laravel 中的付款。如果我们需要支持额外的处理器,我们可以轻松扩展工厂来支持和修改选择提供者的逻辑,并处理不同的业务逻辑场景。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3