PHPackages                             fearless-ajs/smart-payment-routing - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. fearless-ajs/smart-payment-routing

ActiveLibrary[Payment Processing](/categories/payments)

fearless-ajs/smart-payment-routing
==================================

This is a smart payment routing package for laravel, it checks for the most optimal payment processor to perform transactions

1.0.0(1y ago)01MITPHP

Since Jul 7Pushed 1y ago1 watchersCompare

[ Source](https://github.com/fearless-ajs/smart-payment-routing)[ Packagist](https://packagist.org/packages/fearless-ajs/smart-payment-routing)[ RSS](/packages/fearless-ajs-smart-payment-routing/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (2)Versions (2)Used By (0)

Smart Payment Routing
=====================

[](#smart-payment-routing)

Smart Payment Routing is a Laravel package for smartly routing transactions to payment processors(gateways) based on a defined criterial

Installation
------------

[](#installation)

Use the package manager [composer](https://packagist.org/en/stable/) to install Smart Payment Routing

```
composer require fearless-ajs/smart-payment-routing
```

Usage
-----

[](#usage)

1. Enter the payment processor's env variables in your .env file or you can also publish smart-payment-config.php.

```
  PAYSTACK_SECRET=*************
  PAYSTACK_REDIRECT_URL=http://example.com/redirect

  FLUTTERWAVE_SECRET=*************
  FLUTTERWAVE_REDIRECT_URL=http://example.com/redirect
```

2. Inject ProcessorManager class into the class that's going to handle payment transactions, and configure the processor manager by initializing the desired payment processors as shown below.

```
namespace App\Http\Controllers;

use App\Http\Requests\CreatePaymentRequest;
use App\Http\Services\StripeProcessor;
use Fearless\SmartPaymentRouting\core\adapter\ProcessorManager;
use Fearless\SmartPaymentRouting\core\PaymentRoutingService;
use Fearless\SmartPaymentRouting\core\processors\FlutterwaveProcessor;
use Fearless\SmartPaymentRouting\core\processors\PaystackProcessor;
use Illuminate\Http\Request;

class TransactionController extends Controller
{
   private readonly ProcessorManager $processorManager;

    public function __construct(ProcessorManager $processorManager)
    {
        $this->processorManager = $processorManager;
        // Register the processor for transactions within this class
        $processorManager->initialize([
            [
                'name' => 'paystack',
                'processor' => new PaystackProcessor(),
            ],
            [
                'name'  => 'flutterwave',
                'processor' => new FlutterwaveProcessor(),
            ]
        ]);
    }

}
```

2. Then instantiate PaymentRoutingService and pass the ProcessorManager as a parameter.
3. Then call makeCharge method on paymentRoutingService with your transaction data(user\_email, amount, and currency) to perform the payment transaction(The default payment processors will only return a payment URL, users will need to be redirected to the payment URL to make the payment)

```
namespace App\Http\Controllers;

use App\Http\Requests\CreatePaymentRequest;
use App\Http\Services\StripeProcessor;
use Fearless\SmartPaymentRouting\core\adapter\ProcessorManager;
use Fearless\SmartPaymentRouting\core\PaymentRoutingService;
use Fearless\SmartPaymentRouting\core\processors\FlutterwaveProcessor;
use Fearless\SmartPaymentRouting\core\processors\PaystackProcessor;
use Illuminate\Http\Request;

class TransactionController extends Controller
{
        private readonly ProcessorManager $processorManager;

    public function __construct(ProcessorManager $processorManager)
    {
        $this->processorManager = $processorManager;
        // Register the processor for transactions within this class
        $processorManager->initialize([
            [
                'name' => 'paystack',
                'processor' => new PaystackProcessor(),
            ],
            [
                'name'  => 'flutterwave',
                'processor' => new FlutterwaveProcessor(),
            ]
        ]);
    }

    /**
     * Store a newly created resource in storage.
     */
    public function store(CreatePaymentRequest $request)
    {

        // Initialize the payment routing service
        $paymentRoutingService = new PaymentRoutingService($this->processorManager);
        $transaction = [
            'user_email' => $request->get('email'),
            'amount' => $request->get('amount'),
            'currency' => $request->get('currency'),
        ];

        // Route transaction to the best processor
        return $paymentRoutingService->makeCharge($this->processorManager, $transaction);
    }

}
```

4. To add any other payment processor, simply publish the config file by running

```
  php artisan vendor:publish --tag smart-payment-routing-config
```

Then create a new payment processor class(e.g StripeProcessor) and implement PaymentProcessor interface as shown below

```
