oxid-esales / mollie-payment
Mollie Payment Module for OXID eShop 7 — built on the Smart-Contract payment-base
Package info
github.com/OXID-eSales/mollie-payment
Type:oxideshop-module
pkg:composer/oxid-esales/mollie-payment
Requires
- php: ^8.2
- ext-json: *
- doctrine/dbal: ^2.13 || ^3.0
- mollie/mollie-api-php: ^2.0
- oxid-esales/payment-base: >=v1.2
- psr/log: ^1.0 || ^2.0 || ^3.0
- symfony/console: ^6.4 || ^7.0
Requires (Dev)
- oxid-esales/developer-tools: dev-b-7.4.x
- oxid-esales/oxideshop-ce: dev-b-7.4.x
- phpmd/phpmd: ^2.15
- phpstan/phpstan: ^2.0.2
- phpunit/phpunit: ^11.4
- squizlabs/php_codesniffer: ^3.10
Suggests
None
Provides
None
Conflicts
- oxid-esales/oxideshop-ce: <7.4
Replaces
None
- dev-b-7.4.x
- v1.0.0-rc.1
- dev-b-7.4.x-GRAPH-QL
- dev-b-7.4.x-order-page-method-card
- dev-b-7.4.x-admin-capture-release-authorization
- dev-b-7.4.x-capture-section-stale-after-capture
- dev-b-7.4.x-MOL-10-contract-state-help
- dev-b-7.4.x-MOL-10-config-help-contract-states
- dev-b-7.4.x-MOL-9-agb-gates-mollie-block
- dev-b-7.4.x-MOL-22-not-orderable-item-message
- dev-b-7.4.x-agb-checkout-opc-MOL-11
- dev-b-7.4.x-webhook-retry-after-failed-claim
- dev-b-7.4.x-MOL-17-refund-after-paid-lost-update
- dev-b-7.4.x-MOL-15-user-data-validation-parity
- dev-b-7.4.x-mol-10-18-single-click-and-order-state
- dev-b-7.4.x-opc-footer-manual-capture
- dev-b-7.4.x-manual-capture-per-method
- dev-fix/opc-233-retire-unpaid-order
- dev-b-7.4.x-order-page-single-method
- dev-main
- dev-fix/opc-delivery-address-hash-passthrough
- dev-main-psp-payment-method-STRP-TBD
- dev-fix/strp-168-expire-committed-guard
- dev-sprint-10-module-config-secret-masking
- dev-worktree-mollie-config-secret-masking
- dev-fix-mollie-manual-capture-gating
- dev-feat-capture-cancel-e2e
- dev-worktree-mollie-admin-e2e
This package is auto-updated.
Last update: 2026-10-07 13:30:35 UTC
README
A Mollie payment module for OXID eShop 7.4+, built on the shared payment-base
Smart-Contract payment core. Mollie follows the PayPal reference architecture: segregated
adapter interfaces behind one lazy SDK adapter, redirect-first checkout, webhook verification by
re-fetching the payment from the Mollie API (Mollie sends no signature), and a shared admin
"Payment" tab owned by payment-base. The module owns no database migrations — all tables
come from payment-base.
Status: under active construction (see
docs/dev_day_log/). The scaffold, DevOps spine, and adapter/checkout/webhook layers are built sprint-by-sprint.
Requirements
- OXID eShop CE 7.4+ (
dev-b-7.4.x), PHP 8.2+ oxid-esales/payment-basemollie/mollie-api-php ^2
Install & activate
Registered as a Composer path repository in the shop and required like the sibling modules:
# from the shop root (inside the php container)
composer update oxid-esales/mollie-payment --with-all-dependencies
bin/oe-console oe:module:activate oe_payments_mollie
bin/oe-console oe:module:deactivate oe_payments_mollie
Configure the module in the admin under Extensions → Modules → Mollie Payment: choose the mode
(test/live), paste the matching API key (test_… / live_…), set the webhook URL, and pick the
log level.
Quality gates
From the module root (run inside the php container, tools resolved from the shop vendor):
composer phpcs # PSR-12 composer phpstan # PHPStan level max — no baseline entries composer phpmd # PHP Mess Detector composer phpunit # PHPUnit (tests/phpunit.xml) composer style # phpcs + phpstan + phpmd # aggregate gate (phpcs → phpunit → phpstan → phpmd) ./bin/pre-commit-check.sh # Unit tests only ./bin/pre-commit-check.sh --full # Unit + Integration (needs MySQL) ./bin/pre-commit-check.sh --no-phpunit # style only
Run a single test:
docker compose exec -w /var/www/extensions/mollie-payment php \
/var/www/vendor/bin/phpunit -c tests/phpunit.xml --filter testName tests/Unit/Path/To/Test.php
Architecture & docs
- Build plan & daily logs:
docs/dev_day_log/ - Architecture analysis:
docs/dev_day_log/20260629/reports/01-mollie-architecture-analysis.md - Contributor guidance for AI agents:
CLAUDE.md
All Mollie SDK imports are confined to src/Mollie/Adapter/; the contract is never mutated via a
generic setState() — only through the named transitions on the payment-base contract. Both
rules are enforced by regression tests.
GraphQL / headless checkout
The module exposes mollieCheckoutStart / mollieCheckoutReturn / mollieCheckoutCancel to the GraphQL Storefront
(payment-base's headless checkout, GRAPH-QL epic); Mollie's webhook ends the order. Try it from the command line:
SHOP_URL=https://<your shop>/ bin/graph-ql-cli-test.sh demo
How it works, every command and example output: bin/graph-ql-cli-test.md.