"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Selección dinámica del procesador de pagos en Laravel usando el patrón de fábrica

Selección dinámica del procesador de pagos en Laravel usando el patrón de fábrica

Publicado el 2024-11-04
Navegar:439

Dynamic Payment Processor Selection in Laravel  Using the Factory Pattern

En las publicaciones anteriores, exploramos dos métodos diferentes para manejar el procesamiento de pagos en Laravel:

  • enlaces de servicios codificados
  • vinculación contextual.

Si bien ambos métodos son efectivos, tienen sus limitaciones cuando se trata de seleccionar procesadores de pagos dinámicamente según las condiciones de tiempo de ejecución (por ejemplo, entrada del usuario, ajustes de configuración).

En esta tercera y última parte, veremos un enfoque más flexible: usar el patrón Factory. Este patrón de diseño nos permite elegir la implementación adecuada de PaymentProcessorInterface según el contexto (por ejemplo, seleccionar entre Stripe o PayPal según la solicitud).

Implementación del patrón de fábrica

Factory Pattern proporciona una solución escalable para resolver dinámicamente diferentes implementaciones en tiempo de ejecución. A continuación se explica cómo configurarlo paso a paso.

Paso 1: crear una interfaz de fábrica

Primero, definamos una PaymentProcessorFactoryInterface que describa cómo resolver diferentes procesadores de pagos.

Esta interfaz garantiza que cualquier fábrica que creemos tendrá un método getProcessor, responsable de devolver el procesador de pagos apropiado según el argumento proporcionado (por ejemplo, 'stripe' o 'paypal').

Paso 2: crear la implementación de fábrica

A continuación, implementaremos la fábrica que resuelve el procesador de pagos apropiado según la entrada del proveedor.

Esta fábrica selecciona dinámicamente el procesador de pagos correcto según la entrada proporcionada en tiempo de ejecución. En este ejemplo, devolvemos directamente nuevas instancias de StripePaymentProcessor y PayPalPaymentProcessor. Si es necesario, estas clases también se pueden resolver desde el contenedor de servicios de Laravel para una mejor gestión.

Paso 3: implementar procesadores Stripe y PayPal

Asegúrese de tener las clases StripePaymentProcessor y PayPalPaymentProcessor que implementen PaymentProcessorInterface.

Ejemplo: Procesador de pagos Stripe

Ejemplo: Procesador de pagos de PayPal

De manera similar, implemente la clase PayPalPaymentProcessor, siguiendo el mismo patrón que StripePaymentProcessor.

Paso 4: vincular la fábrica en el contenedor de servicios

Para garantizar que la fábrica esté disponible en toda su aplicación Laravel, debe vincular PaymentProcessorFactory al contenedor de servicios de Laravel. Puedes hacer esto en AppServiceProvider.

En App\Providers\AppServiceProvider.php, agregue lo siguiente dentro del método de registro:

public function register()
{
    $this->app->singleton(\App\Contracts\PaymentProcessorFactoryInterface::class, \App\Services\PaymentProcessorFactory::class);
}

Este enlace le dice a Laravel que use PaymentProcessorFactory siempre que se solicite PaymentProcessorFactoryInterface, asegurando que solo haya una instancia de la fábrica en toda la aplicación.

Paso 5: Usar Factory en un controlador

Ahora que la fábrica está configurada, puede inyectarla en sus controladores para seleccionar dinámicamente el procesador de pagos apropiado según los datos del tiempo de ejecución, como la entrada de la solicitud.

Ejemplo: Controlador de pagos

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);
    }
}

En este controlador, inyectamos PaymentProcessorFactoryInterface mediante inyección de dependencia. Cuando se solicita un pago, determinamos el proveedor de pago (por ejemplo, Stripe o PayPal) a partir de la solicitud, lo pasamos a la fábrica y resolvemos dinámicamente el procesador de pago apropiado.

Paso 6: Manejo de diferentes proveedores de pago

En esta configuración, el controlador ahora puede manejar dinámicamente diferentes proveedores de pago simplemente cambiando el nombre del proveedor en la solicitud. Este método es particularmente poderoso cuando necesita manejar múltiples pasarelas de pago sin duplicar la lógica o acoplar estrechamente su código a implementaciones específicas.

Conclusión

El uso del patrón Factory en Laravel 11 ofrece un enfoque muy flexible para seleccionar diferentes procesadores de pagos en tiempo de ejecución. Aquí hay un resumen de los pasos que cubrimos:

  • Implementación e interfaz de fábrica: se creó una fábrica que resuelve dinámicamente el procesador de pagos correcto en función de una entrada de cadena.
  • Implementaciones del procesador: se aseguró de que las clases StripePaymentProcessor y PayPalPaymentProcessor implementen PaymentProcessorInterface.
  • Vinculación del contenedor de servicio: vincula la fábrica en el contenedor de servicio para permitir una fácil inyección en toda la aplicación. Selección dinámica en controladores: usó la fábrica dentro de un controlador para seleccionar y usar dinámicamente el procesador de pagos apropiado según los datos del tiempo de ejecución.

Principios de diseño de software y patrones de diseño

Comenzamos este tutorial de 3 partes usando un único procesador de pagos, con una selección codificada, luego usamos una configuración en el código ("tiempo de compilación") usando Laravel Service Container Binding, luego en esta parte seguimos refactorizando con el diseño. principios y patrones de diseño en mente, lo que nos permitió refactorizar el código, logrando:

  • Flexibilidad dinámica: Factory Pattern permite la selección de diferentes procesadores de pago en tiempo de ejecución, lo que hace que su aplicación sea más flexible y escalable.
  • Acoplamiento flojo: al inyectar la fábrica, sus controladores están débilmente acoplados a los procesadores de pagos, lo que facilita agregar o reemplazar pasarelas de pago en el futuro.
  • Mantenibilidad: este enfoque proporciona una base de código más limpia y fácil de mantener, especialmente cuando se trata de múltiples opciones de pago.

Con esta configuración, ahora tenemos un sistema potente y flexible para manejar pagos en Laravel. Si necesitamos admitir procesadores adicionales, podemos ampliar fácilmente la fábrica para admitir y modificar la lógica para seleccionar proveedores y manejar diferentes escenarios de lógica empresarial.

Declaración de liberación Este artículo se reproduce en: https://dev.to/websilvercraft/dynamic-paid-processor-selection-in-laravel-11-using-the-factory-pattern-3pbd?1 Si hay alguna infracción, comuníquese con Study_golang @163.com eliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3