PHPackages                             pkglt/sylius-everypay-plugin - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Payment Processing](/categories/payments)
4. /
5. pkglt/sylius-everypay-plugin

ActiveSylius-plugin[Payment Processing](/categories/payments)

pkglt/sylius-everypay-plugin
============================

EveryPay (LHV Paytech — SEB, LHV, Swedbank in the Baltics) payment gateway for Sylius 2, built on the PaymentRequest abstraction — no Payum.

v0.3.0(2d ago)09↓100%MITPHP ^8.2

Since Jul 5Compare

[ Source](https://github.com/pkglt/sylius-everypay-plugin)[ Packagist](https://packagist.org/packages/pkglt/sylius-everypay-plugin)[ RSS](/packages/pkglt-sylius-everypay-plugin/feed)WikiDiscussions Synced today

READMEChangelog (5)Dependencies (16)Versions (6)Used By (0)

Sylius EveryPay Plugin
======================

[](#sylius-everypay-plugin)

[![Build](https://github.com/pkglt/sylius-everypay-plugin/actions/workflows/build.yaml/badge.svg)](https://github.com/pkglt/sylius-everypay-plugin/actions/workflows/build.yaml)[![License](https://camo.githubusercontent.com/8bb50fd2278f18fc326bf71f6e88ca8f884f72f179d3e555e20ed30157190d0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d677265656e2e737667)](LICENSE)

[EveryPay](https://every-pay.com) payment gateway for **Sylius 2.x**. EveryPay is the LHV Paytech e-commerce platform used by the Baltic partner banks **SEB, LHV and Swedbank** — one integration gives you card payments, Open Banking bank links (all major Baltic banks), Apple Pay and Google Pay through EveryPay's hosted payment page.

Built on the modern Sylius **PaymentRequest** abstraction (`sylius/payment-bundle`, the same architecture as the official Stripe plugin). **No Payum anywhere.**

EveryPay themselves offer no official Sylius integration and none is planned (confirmed by EveryPay support, September 2025) — this community plugin fills that gap.

> Not to be confused with everypay.gr (a Greek PSP with the same name).

Features
--------

[](#features)

- **One-off payments** via the EveryPay hosted payment page (cards, bank links, wallets)
- **In-shop payment method buttons** (optional): show the bank/card grid with EveryPay's own logos directly in your store and send customers straight to their bank's payment page — or keep the classic redirect (default)
- **Credential verification on save** — definitively wrong API credentials are rejected in the admin form; an unreachable EveryPay never blocks saving
- **Server-to-server callbacks** — unauthenticated callbacks are never trusted; the payment state is always re-read from the EveryPay API (the single source of truth)
- **Idempotent state synchronization** — customer return and callbacks may arrive in any order, any number of times
- **Full refunds** from the standard Sylius admin Refund button, executed transactionally (a failed EveryPay refund never leaves a payment marked refunded)
- **Portal-initiated refund detection** — a refund made in the EveryPay merchant portal syncs back without triggering a second refund API call
- **Retry-friendly checkout** — a customer who bounces off the hosted page can pay again; failed attempts get a fresh Sylius payment automatically
- **Encrypted credentials** — gateway config is encrypted at rest by Sylius
- Admin form in **English, Lithuanian, Estonian, Latvian**

Requirements
------------

[](#requirements)

VersionPHP^8.2Sylius^2.2Works with the standard Sylius shop frontend out of the box, and with headless/API-only stores (see [Headless checkouts](#headless--api-checkouts)).

Installation
------------

[](#installation)

### 1. Require the package

[](#1-require-the-package)

```
composer require pkglt/sylius-everypay-plugin
```

### 2. Register the bundle

[](#2-register-the-bundle)

```
// config/bundles.php
return [
    // ...
    Pkg\SyliusEveryPayPlugin\PkgSyliusEveryPayPlugin::class => ['all' => true],
];
```

### 3. Import the plugin configuration

[](#3-import-the-plugin-configuration)

```
# config/packages/pkg_sylius_everypay.yaml
imports:
    - { resource: '@PkgSyliusEveryPayPlugin/config/config.yaml' }
```

This registers the gateway validation groups and the admin form Twig hooks. No database migrations are needed — the plugin only uses core Sylius entities (`sylius_payment`, `sylius_payment_request`, `sylius_gateway_config`).

### 4. Create the payment method

[](#4-create-the-payment-method)

In the Sylius admin: *Payment methods → Create*, choose the **EveryPay (cards &amp; bank payments)** gateway, and fill in:

FieldWhere to find itAPI username / API secretEveryPay merchant portal → *Merchant settings → General*Processing accounte.g. `EUR3D1` — shown in the portal; fixes the currency and available methodsEnvironmentDemo (`igw-demo.every-pay.com`) or Live (`pay.every-pay.eu`)Checkout appearanceRedirect to EveryPay (default), or show the payment method buttons in the shopCredentials are verified against the EveryPay API when you save the form — a wrong secret or an unknown processing account fails validation with a clear message (network problems never block saving).

Because no Payum factory named `everypay` exists, Sylius automatically stores `use_payum = 0` on the gateway config and routes checkout through the PaymentRequest pipeline — no extra configuration needed.

### 5. Set the callback URL in the EveryPay portal

[](#5-set-the-callback-url-in-the-everypay-portal)

In the merchant portal under *E-shop settings → Payments*, set the callback (notification) URL to the Sylius payment method notify endpoint:

```
https:///payment-methods/

```

Keep **"Additional notifications via callback"** enabled so refund/void/chargeback events are delivered too, and leave the `order_reference` uniqueness validation on (the plugin generates unique references per payment attempt).

If your shop sits behind a CDN/WAF (e.g. Cloudflare), make sure `/payment-methods/*` is neither cached nor bot-challenged — a challenge page would silently eat the server-to-server callback.

Headless / API checkouts
------------------------

[](#headless--api-checkouts)

With `sylius/shop-bundle` installed, the customer return URL (`customer_url`) defaults to the shop's `/order/after-pay/{hash}` route — nothing to configure.

In headless stores (or for API-created payment requests in hybrid apps), pass the return URL of your frontend in the payment request payload instead:

```
{ "after_pay_url": "https://spa.example/checkout/thank-you" }
```

An explicit `after_pay_url` always wins over the shop route. Remember that EveryPay rejects URLs with a dotless host (plain `localhost` fails; `*.localhost`subdomains work). After the customer returns to your frontend, drive the usual Sylius payment-request status flow to settle the payment.

How it works
------------

[](#how-it-works)

FlowTriggerWhat happensCapturecustomer finishes checkout`POST /v4/payments/oneoff` → customer is redirected (303) to the hosted payment pageStatuscustomer returns to the shoppayment state re-read from the API, Sylius payment transitioned accordinglyNotifyEveryPay server callbackpayment resolved by `payment_reference`, state re-read from the API; non-2xx responses make EveryPay redeliver (6 retries / 72 h)Refundadmin presses Refundrefund payment request + `POST /v4/payments/refund` inside one transaction; on API failure everything rolls back and the admin sees an error flashSee [docs/architecture.md](docs/architecture.md) for the full design (state mapping table, idempotency and concurrency notes) and [docs/everypay-api.md](docs/everypay-api.md) for the distilled EveryPay API v4 reference.

Local development &amp; testing gotchas
---------------------------------------

[](#local-development--testing-gotchas)

- EveryPay rejects `customer_url` with a dotless host — `http://localhost/...`fails one-off validation, while `.localhost` subdomains (e.g. `http://myshop.localhost`) pass. Point your dev channel hostname at a `.localhost` subdomain.
- Callbacks need a public URL — an `ngrok http 80 --host-header=`tunnel works fine against the demo environment.
- SEB demo test cards are documented publicly at [support.ecommerce.sebgroup.com](https://support.ecommerce.sebgroup.com/en/articles/13459276-test-cards).

Development
-----------

[](#development)

```
composer install
vendor/bin/phpunit --testsuite unit         # pure unit tests (no kernel, no DB)
vendor/bin/phpunit --testsuite functional   # boots the plugin inside sylius/test-application
vendor/bin/phpunit                          # both suites
vendor/bin/behat                            # Gherkin payment-lifecycle scenarios
vendor/bin/phpstan analyse                  # static analysis, level 9
vendor/bin/ecs check                        # coding standard (Sylius Labs)
```

The functional suite runs the plugin inside the official Sylius test application on SQLite with a scripted EveryPay API mock — no database service, browser or frontend build required. It covers container wiring, the notify endpoint (including a settled callback moving a payment through the real state machine), the capture flow on the real payment-request command bus, and the admin gateway form rendering.

This repository is set up for AI-agent-assisted development — see [AGENTS.md](AGENTS.md) for the project map, invariants and conventions.

Roadmap
-------

[](#roadmap)

- Partial refunds via `sylius/refund-plugin` integration (the API client already accepts arbitrary amounts)
- Tokenized/CIT payments (`request_token`)

Contributing &amp; security
---------------------------

[](#contributing--security)

Contributions are welcome — see [CONTRIBUTING.md](CONTRIBUTING.md) and the agent/architecture guide in [AGENTS.md](AGENTS.md). Please report security issues privately per [SECURITY.md](SECURITY.md). Changes are tracked in the [CHANGELOG](CHANGELOG.md).

License
-------

[](#license)

MIT — see [LICENSE](LICENSE).

Extracted from the production integration of a Lithuanian Sylius 2 shop, where it has been verified end-to-end against the EveryPay/SEB demo environment (full pay, refund, callback and failure paths).

*EveryPay is a trademark of its respective owner (EveryPay AS / LHV Paytech). This is an independent community integration, not affiliated with or endorsed by EveryPay, LHV, SEB or Swedbank.*

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance99

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity39

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

5

Last Release

2d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1830639?v=4)[Alfonsas Cirtautas](/maintainers/acirtautas)[@acirtautas](https://github.com/acirtautas)

---

Tags

syliuspaymentgatewaysebsylius-pluginBanklinkSwedbanklhvbalticeverypayevery-pay

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/pkglt-sylius-everypay-plugin/health.svg)

```
[![Health](https://phpackages.com/badges/pkglt-sylius-everypay-plugin/health.svg)](https://phpackages.com/packages/pkglt-sylius-everypay-plugin)
```

###  Alternatives

[flux-se/sylius-stripe-plugin

Sylius Stripe plugin using Payment Request

1242.7k2](/packages/flux-se-sylius-stripe-plugin)[renekorss/banklink

PHP banklink library to easily integrate Baltic banklinks.

3632.6k](/packages/renekorss-banklink)[flux-se/sylius-payum-stripe-plugin

Payum Stripe gateways plugin for Sylius.

61353.8k](/packages/flux-se-sylius-payum-stripe-plugin)[sylius/payum-bundle

Payum integration for Symfony e-commerce applications.

11113.0k16](/packages/sylius-payum-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
