PHPackages                             optiosteam/payconiq-client-php - 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. [API Development](/categories/api)
4. /
5. optiosteam/payconiq-client-php

ActiveLibrary[API Development](/categories/api)

optiosteam/payconiq-client-php
==============================

Payconiq API client library for PHP developed by Optios.

2.1.1(7mo ago)1273.4k↓23.5%2MITPHPPHP &gt;=8.2CI passing

Since Dec 15Pushed 7mo ago7 watchersCompare

[ Source](https://github.com/optiosteam/payconiq-client-php)[ Packagist](https://packagist.org/packages/optiosteam/payconiq-client-php)[ RSS](/packages/optiosteam-payconiq-client-php/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependencies (12)Versions (17)Used By (0)

[![CI](https://github.com/optiosteam/payconiq-client-php/actions/workflows/tests.yaml/badge.svg?branch=main)](https://github.com/optiosteam/payconiq-client-php/actions/workflows/tests.yaml)[![codecov](https://camo.githubusercontent.com/0ee65d556c54e78439b9d3ff81ce0dbeca9a86ba4b88094175dc268c9a156ce9/68747470733a2f2f636f6465636f762e696f2f67682f6f7074696f737465616d2f706179636f6e69712d636c69656e742d7068702f6272616e63682f6d61696e2f67726170682f62616467652e7376673f746f6b656e3d53363259445558563741)](https://codecov.io/gh/optiosteam/payconiq-client-php)

PHP Payconiq/Wero/Bancontact API Client (unofficial)
====================================================

[](#php-payconiqwerobancontact-api-client-unofficial)

Supported API version: v3

Development sponsored by [Optios](https://www.optios.net)

API Documentation:

Supported API functions
-----------------------

[](#supported-api-functions)

This library provides support for the following Payconiq API (v3) functions:

- Payconiq Instore (V3) - Terminal &amp; Display
- Payconiq Instore (V3) - Static QR Sticker
- Payconiq Instore (V3) - Receipt
- Payconiq Invoice (V3) - Invoice
- Payconiq Online (V3) - Custom Online
- Payconiq Online (V3) - Checkout Flow Online
- Payconiq Online (V3) - App2App Linking
- Payconiq Online (V3) - Top-up

Not supported yet:

- Loyalty Integration
- Payout Reconciliation API

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

[](#installation)

**Requirement**: PHP version &gt;=8.2

```
composer require optiosteam/payconiq-client-php

```

Migrating from 1.x to 2.x: Migration Payconiq &gt; WERO/Bancontact
------------------------------------------------------------------

[](#migrating-from-1x-to-2x-migration-payconiq--werobancontact)

The code has been updated for PHP 8 (constructor property promotion, enums, immutable with `readonly`, ...)

All resources (`Payment`, `Creditor`, `Debtor`, `SearchResult`) are now immutable.

**So if you are migrating your code from 1.x to 2.x, make sure to use the enums for PaymentStatus, QR code size, color &amp; format, instead of the old constants**

Setters on resources no longer exist.

From version 2.1.0 onward, `transferAmount`, `tippingAmount` and `totalAmount` have been removed from the Payment resource since they are no longer returned by the API (see [here](https://github.com/optiosteam/payconiq-client-php/issues/18#issuecomment-3306512880)).

Description
-----------

[](#description)

This library provides 3 main classes:

- `PayconiqApiClient`
- `PayconiqCallbackSignatureVerifier`
- `PayconiqQrCodeGenerator`

### PayconiqApiClient

[](#payconiqapiclient)

This is the main class for performing REST calls to the Payconiq API, e.g. create payments, cancel payments, search payments &amp; refund payments.

In the constructor you have to pass your Payconiq API key, optionally you can also inject your own Guzzle Client and specify if you want to use the production environment of the Payconiq API or the testing (Ext) environment.

```
public function __construct(string $apiKey, ClientInterface $httpClient = null, bool $useProd = true)
```

### PayconiqCallbackSignatureVerifier

[](#payconiqcallbacksignatureverifier)

This class is used for TLS Two-way TLS Encryption Support (TLS-Mutual Authentication). It verifies the callback body, JSON Web Signature (JWS) and the header fields in the JOSE header.

In the constructor you have to pass your Payconiq Payment Profile Id, optionally you can also inject your own Guzzle Client and Symfony Cache Adapter and specify if you want to use the production environment of the Payconiq API or the testing (Ext) environment.

```
public function __construct(string $paymentProfileId, ClientInterface $httpClient = null, AdapterInterface $cache = null, bool $useProd = true)
```

The cache adapter is used to cache Payconiq's JWKS (JSON Web Key Set). By default this library will use the `FilesystemAdapter` which will use the file system for caching. If you'd like to use another caching system, like Redis for example, you can inject your own (e.g. `RedisAdapter`).

List of Symfony's Cache Adapters:

**Note**: when using the `PayconiqCallbackSignatureVerifier`, make sure your server time is correct because the verifier checks the issued-at header timestamp.

### PayconiqQrCodeGenerator

[](#payconiqqrcodegenerator)

This class offers static functions to:

- Customize (color, size, format) QR code links (Used for `Terminal & Display` &amp; `Custom Online`)
- Generate static QR code stickers links (Used for `Static QR Sticker`)
- Generate QR code links with metadata, like: description, amount &amp; reference (Used for `Receipt`, `Invoice` &amp; `Top-up`)

Some examples
-------------

[](#some-examples)

### Request payment

[](#request-payment)

```
use Optios\Payconiq\PayconiqApiClient;
use Optios\Payconiq\Request\RequestPayment;

$apiKey = 'MY_PAYCONIQ_API_KEY';
$client = new PayconiqApiClient($apiKey, null, false);

$requestPayment = new RequestPayment(
    100 // = € 1
);
$requestPayment->setCallbackUrl('https://mywebsite.com/api/payconiq-webhook');
$requestPayment->setReference('ref123456');
$requestPayment->setPosId('POS00001');

$payment = $client->requestPayment($requestPayment);
var_dump($payment);
```

### Get payment

[](#get-payment)

```
use Optios\Payconiq\PayconiqApiClient;

$apiKey = 'MY_PAYCONIQ_API_KEY';
$client = new PayconiqApiClient($apiKey, null, false);

$payment = $client->getPayment('5bdb1685b93d1c000bde96f2');
var_dump($payment);
```

### Cancel payment

[](#cancel-payment)

```
use Optios\Payconiq\PayconiqApiClient;

$apiKey = 'MY_PAYCONIQ_API_KEY';
$client = new PayconiqApiClient($apiKey, null, false);

$client->cancelPayment('5bdb1685b93d1c000bde96f2');
```

### Search payments

[](#search-payments)

```
use Carbon\Carbon;
use Optios\Payconiq\PayconiqApiClient;
use Optios\Payconiq\Request\SearchPayments;

$apiKey = 'MY_PAYCONIQ_API_KEY';
$client = new PayconiqApiClient($apiKey, null, false);

$search = new SearchPayments(new Carbon('2020-12-01 00:00:00'));
$searchResult = $client->searchPayments($search);
var_dump($searchResult);
```

### Refund payment

[](#refund-payment)

```
use Optios\Payconiq\PayconiqApiClient;

$apiKey = 'MY_PAYCONIQ_API_KEY';
$client = new PayconiqApiClient($apiKey, null, false);

$client->refundPayment('5bdb1685b93d1c000bde96f2');
```

### Verify callback (JWS)

[](#verify-callback-jws)

```
use Optios\Payconiq\PayconiqCallbackSignatureVerifier;

$paymentProfileId = '5fxxxxxxxxxxxf581'; //your payconiq payment profile id

// When Payconiq sends a POST to your webhook endpoint (callbackUrl), take the signature from the request header
// e.g. Symfony: Symfony\Component\HttpFoundation\Request $request->headers->get('signature');
$signature = 'eyJ0eXAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxbg8xg';

//POST body (payload)
$payload = '{"paymentId":"5bdb1685b93d1c000bde96f2","transferAmount":0,"tippingAmount":0,"amount":100,"totalAmount":0,"createdAt":"2020-12-01T10:22:40.487Z","expireAt":"2020-12-01T10:42:40.487Z","status":"EXPIRED","currency":"EUR"}';

$payconiqCallbackSignatureVerifier = new PayconiqCallbackSignatureVerifier($paymentProfileId, null, null, false);

echo $payconiqCallbackSignatureVerifier->isValid($signature, $payload) ? 'valid' : 'invalid';

var_dump($payconiqCallbackSignatureVerifier->loadAndVerifyJWS($signature, $payload));
```

### QR link generation

[](#qr-link-generation)

```
use Optios\Payconiq\Enum\QrImageColor;
use Optios\Payconiq\Enum\QrImageFormat;
use Optios\Payconiq\Enum\QrImageSize;
use Optios\Payconiq\PayconiqQrCodeGenerator;

//Example 1: customized QR code (defaults are PNG, SMALL, MAGENTO)
//e.g. coming from Optios\Payconiq\Resource\Payment\Payment->getQrLink()
$qrLink = 'https://portal.payconiq.com/qrcode?c=https%3A%2F%2Fpayconiq.com%2Fpay%2F2%2F73a222xxxxxxxxx00964';
$customizedQRLink  = PayconiqQrCodeGenerator::customizePaymentQrLink(
    $qrLink,
    QrImageFormat::PNG,
    QrImageSize::EXTRA_LARGE,
    QrImageColor::BLACK,
);
var_dump($customizedQRLink);

//Example 2: static QR code
$staticQRLink = PayconiqQrCodeGenerator::generateStaticQRCodeLink('abc123', 'POS00001');
var_dump($staticQRLink);
```

Contributing
------------

[](#contributing)

Feel free to submit pull requests for improvements &amp; bug fixes.

please ensure your pull request adheres to the following guidelines:

- Enter a meaningful pull request description.
- Put a link to each library in your pull request ticket so it's easier to review.
- Use the following format for libraries: [LIBRARY](LINK) - DESCRIPTION.
- Make sure your text editor is set to remove trailing whitespace.

MIT License

###  Health Score

52

—

FairBetter than 96% of packages

Maintenance65

Regular maintenance activity

Popularity37

Limited adoption so far

Community14

Small or concentrated contributor base

Maturity74

Established project with proven stability

 Bus Factor1

Top contributor holds 89.8% 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 ~136 days

Recently: every ~195 days

Total

14

Last Release

212d ago

Major Versions

1.0.10 → 2.0.12025-09-01

PHP version history (3 changes)1.0.0PHP &gt;=7.2

1.0.6PHP &gt;=7.2|&gt;=8.0

2.0.1PHP &gt;=8.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/814d404abddc2aabda999e023c114eca619f439e5a69366c4bd9b5cb837e9e10?d=identicon)[simonwestyn](/maintainers/simonwestyn)

---

Top Contributors

[![simonwestyn](https://avatars.githubusercontent.com/u/21172932?v=4)](https://github.com/simonwestyn "simonwestyn (53 commits)")[![d3bug-git](https://avatars.githubusercontent.com/u/57825783?v=4)](https://github.com/d3bug-git "d3bug-git (5 commits)")[![WebDevTmas](https://avatars.githubusercontent.com/u/1933457?v=4)](https://github.com/WebDevTmas "WebDevTmas (1 commits)")

---

Tags

apibancontactclientcomposercomposer-packagejwspayconiqpayconiq-client-phppayconiq-phppaymentphpqrcodewerowero-bancontactwero-bancontact-phpphpapiclientpayconiq

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

![Health badge](/badges/optiosteam-payconiq-client-php/health.svg)

```
[![Health](https://phpackages.com/badges/optiosteam-payconiq-client-php/health.svg)](https://phpackages.com/packages/optiosteam-payconiq-client-php)
```

###  Alternatives

[openai-php/laravel

OpenAI PHP for Laravel is a supercharged PHP API client that allows you to interact with the Open AI API

3.7k7.6M74](/packages/openai-php-laravel)[kunalvarma05/dropbox-php-sdk

Dropbox PHP API V2 SDK (Unofficial)

3633.0M18](/packages/kunalvarma05-dropbox-php-sdk)[resend/resend-php

Resend PHP library.

574.7M21](/packages/resend-resend-php)[mozex/anthropic-laravel

Anthropic PHP for Laravel is a supercharged PHP API client that allows you to interact with the Anthropic API

71226.4k1](/packages/mozex-anthropic-laravel)[sima-land/api-php-client

Client library for Simaland APIs

311.5k](/packages/sima-land-api-php-client)

PHPackages © 2026

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