Sylius PausePay Plugin
Sylius plugin for PausePay payment method.
-
Run:
composer require webgriffe/sylius-pausepay-plugin
-
Add
Webgriffe\SyliusPausePayPlugin\WebgriffeSyliusPausePayPlugin::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_pausepay_plugin.yaml:
imports: - { resource: "@WebgriffeSyliusPausePayPlugin/config/config.php" }
-
Create a new file config/routes/webgriffe_sylius_pausepay_plugin.yaml:
webgriffe_sylius_pausepay_plugin_shop: resource: "@WebgriffeSyliusPausePayPlugin/config/routes/shop.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_pausepay_plugin_index: resource: "@WebgriffeSyliusPausePayPlugin/config/routes/index.php" webgriffe_sylius_pausepay_plugin_payum: resource: "@WebgriffeSyliusPausePayPlugin/config/routes/payum.php" sylius_shop_payum_cancel: resource: "@PayumBundle/Resources/config/routing/cancel.xml"
-
Add the PaymentOrder entity. Create a new file
src/Entity/Payment/PaymentOrder.php
with the following content:<?php declare(strict_types=1); namespace App\Entity\Payment; use Doctrine\ORM\Mapping as ORM; use Webgriffe\SyliusPausePayPlugin\Entity\PaymentOrder as BasePaymentOrder; /** * @ORM\Entity * @ORM\Table(name="webgriffe_sylius_pausepay_payment_order") */ class PaymentOrder extends BasePaymentOrder { }
-
Add a new CompanyInfoResolver service that decorates the dummy service
webgriffe_sylius_pausepay.resolver.company_info
of the plugin. This service is used to resolve the company info "of the order" and will be passed to PausePay system upon payment creation.Create a new file
src/Resolver/PausePay/CompanyInfoResolver.php
with the following content:<?php declare(strict_types=1); namespace App\Resolver\PausePay; use Sylius\Component\Core\Model\OrderInterface; use Webgriffe\SyliusPausePayPlugin\Resolver\CompanyInfoResolverInterface; use Webgriffe\SyliusPausePayPlugin\ValueObject\CompanyInfo; final class CompanyInfoResolver implements CompanyInfoResolverInterface { public function resolveFromOrder(OrderInterface $order): CompanyInfo { // TODO: your logic here } }
and define it as the decoration/replacement of the service with alias
webgriffe_sylius_pausepay.resolver.company_info
. For example create the fileconfig/services/resolver.yaml
with content:services: webgriffe_sylius_pausepay.resolver.company_info: class: App\Resolver\PausePay\CompanyInfoResolver
TODO: Add sandbox logic
-
If you have a custom implementation of the Sylius service
PaymentMethodResolver
, you must add the logic to check the availability of PausePay payment method by using the servicePausePayAvailabilityChecker
.TODO: Add example
-
Run:
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-pausepay-entry', './vendor/webgriffe/sylius-pausepay-plugin/public/poll_payment.js' )
And then override the template
WebgriffeSyliusPausePayPlugin/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-pausepay-entry', null, 'sylius.shop') }} {% endblock %}
Access to the admin panel and go to the Payment methods
section. Create a new payment method and select PausePay
as gateway. Then, configure the payment method with the required parameters.
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)