webgriffe/sylius-pagolight-plugin

Sylius plugin for Pagolight and Pagolight Pro payment gateway

Installs: 3 397

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 6

Forks: 0

Open Issues: 1

Type:sylius-plugin


README

Sylius Pagolight Plugin

Sylius plugin for Pagolight and Pagolight PRO payment methods.

Installation

  1. Run:

    composer require webgriffe/sylius-pagolight-plugin
  2. Add Webgriffe\SyliusPagolightPlugin\WebgriffeSyliusPagolightPlugin::class => ['all' => true] to your config/bundles.php.

    Normally, the plugin is automatically added to the config/bundles.php file by the composer require command. If it is not, you have to add it manually.

  3. Create a new file config/packages/webgriffe_sylius_pagolight_plugin.yaml:

    imports:
        - { resource: "@WebgriffeSyliusPagolightPlugin/config/config.php" }
  4. Import the routes needed for cancelling the payments. Add the following to your config/routes.yaml file:

    webgriffe_sylius_pagolight_plugin_shop:
        resource: "@WebgriffeSyliusPagolightPlugin/config/shop_routing.php"
        prefix: /{_locale}
        requirements:
            _locale: ^[A-Za-z]{2,4}(_([A-Za-z]{4}|[0-9]{3}))?(_([A-Za-z]{2}|[0-9]{3}))?$
    
    webgriffe_sylius_pagolight_plugin_ajax:
        resource: "@WebgriffeSyliusPagolightPlugin/config/shop_ajax_routing.php"
    
    sylius_shop_payum_cancel:
        resource: "@PayumBundle/Resources/config/routing/cancel.xml"
    

    NB: The file shop_routing needs to be after the prefix _locale, so that messages can be displayed in the right language. You should also include the cancel routes from the Payum bundle if you do not have it already!

  5. Add the WebhookToken entity. Create a new file src/Entity/Payment/WebhookToken.php with the following content:

     <?php
    
     declare(strict_types=1);
    
     namespace App\Entity\Payment;
    
     use Doctrine\ORM\Mapping as ORM;
     use Webgriffe\SyliusPagolightPlugin\Entity\WebhookToken as BaseWebhookToken;
     
     /**
      * @ORM\Entity
      * @ORM\Table(name="webgriffe_sylius_pagolight_webhook_token")
      */
     class WebhookToken extends BaseWebhookToken
     {
     }
  6. Run:

    php bin/console doctrine:migrations:diff
    php bin/console doctrine:migrations:migrate
  7. Run:

    php bin/console sylius:install:assets

    Or, you can add the entry to your webpack.config.js file:

    .addEntry(
        'webgriffe-sylius-pagolight-entry',
        './vendor/webgriffe/sylius-pagolight-plugin/public/poll_payment.js'
    )

    And then override the template WebgriffeSyliusPagolightPlugin/after_pay.html.twig to include the entry:

    {% block javascripts %}
        {{ parent() }}
    
        <script>
            window.afterUrl = "{{ afterUrl }}";
            window.paymentStatusUrl = "{{ paymentStatusUrl }}";
        </script>
        {{ encore_entry_script_tags('webgriffe-sylius-pagolight-entry', null, 'sylius.shop') }}
    {% endblock %}

Usage

Access to the admin panel and go to the Payment methods section. Create a new payment method and select Pagolight or Pagolight PRO as the gateway. Then, configure the payment method with the required parameters.

Automatically, the plugin will hide the payment method if the currency is not EUR, GBP or CH or if the country is not Italy or Switzerland. Pagolight PRO will also be visible only if the order total amount is greater than 100 EUR.

Contributing

For a comprehensive guide on Sylius Plugins development please go to Sylius documentation, there you will find the Plugin Development Guide, that is full of examples.

Quickstart Installation

Traditional

  1. Run composer create-project sylius/plugin-skeleton ProjectName.

  2. From the plugin skeleton root directory, run the following commands:

    $ (cd tests/Application && yarn install)
    $ (cd tests/Application && yarn build)
    $ (cd tests/Application && APP_ENV=test bin/console assets:install public)
    
    $ (cd tests/Application && APP_ENV=test bin/console doctrine:database:create)
    $ (cd tests/Application && APP_ENV=test bin/console doctrine:schema:create)

To be able to set up a plugin's database, remember to configure you database credentials in tests/Application/.env and tests/Application/.env.test.

Docker

  1. Execute docker compose up -d

  2. Initialize plugin docker compose exec app make init

  3. See your browser open localhost

Usage

Running plugin tests

  • PHPUnit

    vendor/bin/phpunit
  • PHPSpec

    vendor/bin/phpspec run
  • Behat (non-JS scenarios)

    vendor/bin/behat --strict --tags="~@javascript"
  • Behat (JS scenarios)

    1. Install Symfony CLI command.

    2. Start Headless Chrome:

    google-chrome-stable --enable-automation --disable-background-networking --no-default-browser-check --no-first-run --disable-popup-blocking --disable-default-apps --allow-insecure-localhost --disable-translate --disable-extensions --no-sandbox --enable-features=Metal --headless --remote-debugging-port=9222 --window-size=2880,1800 --proxy-server='direct://' --proxy-bypass-list='*' http://127.0.0.1
    1. Install SSL certificates (only once needed) and run test application's webserver on 127.0.0.1:8080:
    symfony server:ca:install
    APP_ENV=test symfony server:start --port=8080 --dir=tests/Application/public --daemon
    1. Run Behat:
    vendor/bin/behat --strict --tags="@javascript"
  • Static Analysis

    • Psalm

      vendor/bin/psalm
    • PHPStan

      vendor/bin/phpstan analyse -c phpstan.neon -l max src/  
  • Coding Standard

    vendor/bin/ecs check

Opening Sylius with your plugin

  • Using test environment:

    (cd tests/Application && APP_ENV=test bin/console sylius:fixtures:load)
    (cd tests/Application && APP_ENV=test bin/console server:run -d public)
  • Using dev environment:

    (cd tests/Application && APP_ENV=dev bin/console sylius:fixtures:load)
    (cd tests/Application && APP_ENV=dev bin/console server:run -d public)