PHPackages                             peaceofmind/ideal2 - 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. peaceofmind/ideal2

ActiveLibrary[Payment Processing](/categories/payments)

peaceofmind/ideal2
==================

Complete library for connecting to different kinds of iDEAL implementations

1.0.21(2mo ago)65.2k↓31.6%3MITPHPPHP &gt;= 8.2CI passing

Since Apr 8Pushed 2mo ago4 watchersCompare

[ Source](https://github.com/mailtopay/ideal2)[ Packagist](https://packagist.org/packages/peaceofmind/ideal2)[ RSS](/packages/peaceofmind-ideal2/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (2)Dependencies (5)Versions (24)Used By (0)

iDEAL | Wero PHP Library
========================

[](#ideal--wero-php-library)

A PHP library for the iDEAL | Wero payment protocol, supporting both the Currence iDEAL Hub (via ING) and Worldline integration paths.

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

[](#requirements)

- PHP &gt;= 8.2
- OpenSSL extension

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

[](#installation)

```
composer require peaceofmind/ideal2
```

Supported Banks
---------------

[](#supported-banks)

BankIntegrationCodeABN AMROWorldline`abn`BNGWorldline`bng`BNP ParibasWorldline`bnp`Deutsche BankWorldline`db`INGHub`ing`ING SandboxHub`ingsandbox`RabobankWorldline`rabo`Worldline (test)Worldline`worldline`Hub Integration (ING)
---------------------

[](#hub-integration-ing)

### Configuration

[](#configuration)

```
use POM\iDEAL\Banks\BankFactory;
use POM\iDEAL\Hub\Config;
use POM\iDEAL\Hub\SigningAlgorithm;
use POM\iDEAL\Hub\iDEAL;

$config = new Config(
    merchantId: 'your-merchant-id',
    testMode: true,
    bank: BankFactory::bankFromString('ing'),
    INGmTLSCertificatePath: '/path/to/ing-mtls-cert.pem',
    INGmTLSKeyPath: '/path/to/ing-mtls-key.pem',
    INGmTLSPassPhrase: 'passphrase',
    INGSigningKey: file_get_contents('/path/to/ing-signing-key.pem'),
    INGSigningPassphrase: 'passphrase',
    INGSigningCertificate: file_get_contents('/path/to/ing-signing-cert.pem'),
    hubmTLSCertificatePath: '/path/to/hub-mtls-cert.pem',
    hubmTLSKeyPath: '/path/to/hub-mtls-key.pem',
    hubmTLSPassphrase: 'passphrase',
    hubSigningKey: file_get_contents('/path/to/hub-signing-key.pem'),
    hubSigningCertificate: file_get_contents('/path/to/hub-signing-cert.pem'),
    hubSigningPassphrase: 'passphrase',
    signingAlgorithm: SigningAlgorithm::ES256,
    cache: $yourPsr16Cache, // any PSR-16 CacheInterface implementation
);

$ideal = new iDEAL($config);
```

### Creating a Transaction

[](#creating-a-transaction)

```
$transaction = $ideal->createTransactionRequest()->execute(
    amount: 1000,                    // amount in cents (e.g. 1000 = EUR 10.00)
    description: 'Order #123',       // shown to the payer
    reference: 'INV-2024-001',       // appears on bank statements
    returnUrl: 'https://example.com/return',
    callbackUrl: 'https://example.com/webhook', // optional
);

// redirect the payer
header('Location: ' . $transaction->getRedirectUrl());
```

### Checking Transaction Status

[](#checking-transaction-status)

```
$transaction = $ideal->createTransactionStatusRequest()->execute($transactionId);

$status = $transaction->getStatus(); // TransactionStatus enum: OPEN, SUCCESS, CANCELLED, EXPIRED, FAILURE, IDENTIFIED
```

The returned `Transaction` object provides:

- `getTransactionId()` - unique transaction ID
- `getStatus()` - current status
- `getAmount()` - amount in cents
- `getDescription()` - transaction description
- `getReference()` - payment reference
- `getRedirectUrl()` - payer redirect URL
- `getCreated()` / `getExpire()` - timestamps
- `getIban()` / `getBic()` / `getAccountOwner()` - payer details (after completion)

### Verifying Webhook Callbacks

[](#verifying-webhook-callbacks)

```
$isValid = $ideal->verifyCallbackResponse(
    callbackResponse: file_get_contents('php://input'),
);
```

Or pass headers manually:

```
$isValid = $ideal->verifyCallbackResponse(
    callbackResponse: file_get_contents('php://input'),
    headers: [
        'Request-Id' => $requestId,
        'X-Sender' => $sender,
        'Signature' => $signature,
    ],
);
```

Worldline Integration
---------------------

[](#worldline-integration)

### Configuration

[](#configuration-1)

```
use POM\iDEAL\Banks\BankFactory;
use POM\iDEAL\Worldline\Config;
use POM\iDEAL\Worldline\iDEAL;

$config = new Config(
    merchantId: 'your-merchant-id',
    testMode: true,
    merchantCertificate: file_get_contents('/path/to/merchant-cert.pem'),
    merchantKey: file_get_contents('/path/to/merchant-key.pem'),
    merchantPassphrase: 'passphrase',
    acquirerCertificate: file_get_contents('/path/to/acquirer-cert.pem'),
    bank: BankFactory::bankFromString('abn'),
    notificationUrl: 'https://example.com/webhook',
    cache: $yourPsr16Cache,
);

$ideal = new iDEAL($config);
```

### Creating a Transaction

[](#creating-a-transaction-1)

```
$transaction = $ideal->createTransactionRequest()->execute(
    amount: 1000,
    reference: 'INV-2024-001',
    description: 'Order #123',
    transactionIdentifier: 'your-unique-id',
    returnUrl: 'https://example.com/return',
);

header('Location: ' . $transaction->getRedirectUrl());
```

### Checking Transaction Status

[](#checking-transaction-status-1)

```
$status = $ideal->doStatusRequest()->execute($transactionId);

$status->getPaymentStatus();          // e.g. "SettlementCompleted"
$status->getIdentification();         // payer IBAN
$status->getName();                   // payer name
$status->getGuaranteedAmount();       // settled amount
$status->getTransactionIdentifier();  // your original transaction ID
```

### Verifying Webhook Callbacks

[](#verifying-webhook-callbacks-1)

```
$isValid = $ideal->verifyCallbackResponse(
    callbackResponse: file_get_contents('php://input'),
);
```

Caching
-------

[](#caching)

Both integration paths require a PSR-16 (`psr/simple-cache`) implementation for caching access tokens and (for Hub) acquirer certificates. Any compatible cache library will work, for example `symfony/cache` or `matthiasmullie/scrapbook`.

License
-------

[](#license)

MIT

###  Health Score

51

—

FairBetter than 96% of packages

Maintenance83

Actively maintained with recent releases

Popularity30

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 54.4% of commits — single point of failure

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 ~32 days

Recently: every ~155 days

Total

22

Last Release

88d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/69513344ea156972ef754a63ab5f325e8cef048e8edb25cb49c7af3ff669b588?d=identicon)[PatrickPOM](/maintainers/PatrickPOM)

---

Top Contributors

[![Kefkef123](https://avatars.githubusercontent.com/u/8995446?v=4)](https://github.com/Kefkef123 "Kefkef123 (37 commits)")[![PatrickHuiskens](https://avatars.githubusercontent.com/u/8719714?v=4)](https://github.com/PatrickHuiskens "PatrickHuiskens (30 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (1 commits)")

---

Tags

idealworldlineiDEAL 2.0Currence

### Embed Badge

![Health badge](/badges/peaceofmind-ideal2/health.svg)

```
[![Health](https://phpackages.com/badges/peaceofmind-ideal2/health.svg)](https://phpackages.com/packages/peaceofmind-ideal2)
```

###  Alternatives

[laravel/framework

The Laravel Framework.

34.7k509.9M17.0k](/packages/laravel-framework)[shopware/platform

The Shopware e-commerce core

3.3k1.5M3](/packages/shopware-platform)[shopify/shopify-api

Shopify API Library for PHP

4634.8M16](/packages/shopify-shopify-api)[shetabit/multipay

PHP Payment Gateway Integration Package

291348.2k3](/packages/shetabit-multipay)[civicrm/civicrm-core

Open source constituent relationship management for non-profits, NGOs and advocacy organizations.

728272.9k20](/packages/civicrm-civicrm-core)[shopware/core

Shopware platform is the core for all Shopware ecommerce products.

595.2M386](/packages/shopware-core)

PHPackages © 2026

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