3brs/sylius-payment-fee-plugin

Payment extra fee plugin for Sylius

Package info

github.com/3BRS/sylius-payment-fee-plugin

Type:sylius-plugin

pkg:composer/3brs/sylius-payment-fee-plugin

Statistics

Installs: 10 114

Dependents: 0

Suggesters: 0

Stars: 2

Open Issues: 1

v2.1.0 2026-01-27 09:59 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

Replaces

None

MIT df12105efc8e389a783701b974a27f185cbb620c

pluginpaymentextrasyliusfeesylius-plugin


README

👁 Image

Payment Fee Plugin
👁 Image
👁 Image
👁 Image

Features

  • Charge extra fee for a payment method
  • Typical usage: Cash on Delivery
  • Taxes are implemented the same way as taxes for shipping fees

Admin

👁 Admin payment fee configuration

Checkout

👁 Checkout payment fees
👁 Checkout order summary with payment fee

Installation

  1. Run composer require 3brs/sylius-payment-fee-plugin

  2. Add plugin class to your config/bundles.php

    return [
     ...
     ThreeBRS\SyliusPaymentFeePlugin\ThreeBRSSyliusPaymentFeePlugin::class => ['all' => true],
    ];
  3. Add plugin configuration to your config/packages/_sylius.yaml

    imports:
     - { resource: "@ThreeBRSSyliusPaymentFeePlugin/Resources/config/config.yaml" }
  4. Your Entity PaymentMethod has to implement \ThreeBRS\SyliusPaymentFeePlugin\Model\PaymentMethodWithFeeInterface. You can use Trait ThreeBRS\SyliusPaymentFeePlugin\Model\PaymentMethodWithFeeTrait.

    For guide how to use your own entity see Sylius docs - Customizing Models

  5. JavaScript Integration - Register the Stimulus controller for dynamic calculator configuration forms:

    The plugin includes a Stimulus controller (payment-calculator_controller.js) that handles dynamic prototype forms for payment method calculator configuration. This allows the calculator configuration fields to appear/change dynamically when you select a calculator type in the admin panel.

    Manual Steps Required:

    a. In your application's admin entrypoint file (e.g., assets/admin/entrypoint.js):

    import { startStimulusApp } from '@symfony/stimulus-bridge';
    import PaymentCalculatorController from '../../vendor/3brs/sylius-payment-fee-plugin/src/Resources/assets/admin/controllers/payment-calculator_controller';
    
    // Start Stimulus app
    export const app = startStimulusApp();
    
    // Register the payment calculator controller from the plugin
    app.register('payment-calculator', PaymentCalculatorController);

    b. Rebuild your assets after adding the controller:

    yarn install
    yarn build

    How it works:

    • When you select a calculator type (e.g., "Flat rate") in the payment method form, the controller dynamically loads the appropriate configuration fields
    • On the edit page, it preserves existing saved values
    • On the create page, it initializes empty fields for the selected calculator
    • The controller uses Stimulus data attributes: data-controller="payment-calculator", data-payment-calculator-target="select", and data-payment-calculator-target="container"
  6. Create and run doctrine database migrations:

    bin/console doctrine:migrations:diff
    bin/console doctrine:migrations:migrate

Development

Usage

  • Alter plugin in /src
  • See bin/ dir for useful commands

Testing

After your changes you must ensure that the tests are still passing.

composer install
bin/console doctrine:database:create --if-not-exists --env=test
bin/console doctrine:schema:update --complete --force --env=test
yarn --cwd tests/Application install
yarn --cwd tests/Application build

bin/behat
bin/phpstan.sh
bin/ecs.sh
vendor/bin/phpspec run

Opening Sylius with your plugin

  1. Install symfony CLI command: https://symfony.com/download

    • hint: for Docker (with Ubuntu) use Debian/Ubuntu — APT based Linux installation steps as root user and without sudo command
      • you may need to install curl first apt-get update && apt-get install curl --yes
  2. Run app

    (cd tests/Application && APP_ENV=test bin/console sylius:fixtures:load)
    (cd tests/Application && APP_ENV=test symfony server:start --dir=public --port=8080)
  • change APP_ENV to dev if you need it

License

This library is under the MIT license.

Credits

Developed by 3BRS
Forked from manGoweb.