webgriffe/sylius-pausepay-plugin

Sylius plugin for PausePay payment gateway

This package is auto-updated.

Last update: 2024-10-26 12:30:59 UTC


README

Sylius PausePay Plugin

Sylius plugin for PausePay payment method.

Installation

  1. Run:

    composer require webgriffe/sylius-pausepay-plugin
  2. Add Webgriffe\SyliusPausePayPlugin\WebgriffeSyliusPausePayPlugin::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_pausepay_plugin.yaml:

    imports:
      - { resource: "@WebgriffeSyliusPausePayPlugin/config/config.php" }
  4. 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"
  5. 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
    {
    }
  6. 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 file config/services/resolver.yaml with content:

    services:
        webgriffe_sylius_pausepay.resolver.company_info:
            class: App\Resolver\PausePay\CompanyInfoResolver

    TODO: Add sandbox logic

  7. 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 service PausePayAvailabilityChecker.

    TODO: Add example

  8. Run:

    php bin/console doctrine:migrations:migrate
  9. 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 %}

Usage

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.

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)