En las publicaciones anteriores, exploramos dos métodos diferentes para manejar el procesamiento de pagos en Laravel:
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).
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.
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:
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:
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.
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