Sylius Pagolight Plugin
Sylius plugin for Pagolight and Pagolight PRO payment methods.
-
Run:
composer require webgriffe/sylius-pagolight-plugin
-
Add
Webgriffe\SyliusPagolightPlugin\WebgriffeSyliusPagolightPlugin::class => ['all' => true]
to yourconfig/bundles.php
.Normally, the plugin is automatically added to the
config/bundles.php
file by thecomposer require
command. If it is not, you have to add it manually. -
Create a new file config/packages/webgriffe_sylius_pagolight_plugin.yaml:
imports: - { resource: "@WebgriffeSyliusPagolightPlugin/config/config.php" }
-
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!
-
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 { }
-
Run:
php bin/console doctrine:migrations:diff php bin/console doctrine:migrations:migrate
-
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 %}
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.
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.
-
Run
composer create-project sylius/plugin-skeleton ProjectName
. -
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
.
-
Execute
docker compose up -d
-
Initialize plugin
docker compose exec app make init
-
See your browser
open localhost
-
PHPUnit
vendor/bin/phpunit
-
PHPSpec
vendor/bin/phpspec run
-
Behat (non-JS scenarios)
vendor/bin/behat --strict --tags="~@javascript"
-
Behat (JS scenarios)
-
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
- 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
- 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
-
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)