Download the PHP package paysera/lib-checkout-integration-sdk without Composer

On this page you can find all versions of the php package paysera/lib-checkout-integration-sdk. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package lib-checkout-integration-sdk

Checkout integration SDK

Packagist Version Packagist Downloads

Paysera PHP SDK for integrating with the Paysera Checkout v3 API: payment initiation, callback verification, refunds, project eligibility, and localization — with a single SdkFacade entry point.

Supported PHP versions

PHP 7.4, 8.0, 8.1, 8.2, 8.3, and 8.4. The minimum requirement is declared in composer.json as ^7.4 || ^8.0.

Requirements

Installation

Install via Composer:

Obtaining sandbox credentials

A sandbox project with API credentials is required to run the SDK end to end. Self-service onboarding for external integrators is documented on the Paysera developer portal at https://developers.paysera.com.

Code style

PSR-12. Built on top of PSR standards (PSR-3 logging, PSR-6 cache, PSR-18 HTTP client, PSR-20 clock).

Features

Quick Start

SDK Facade Configuration

The SDK facade can be customized with various options:

JWKS cache

The SDK verifies JWT access token signatures against Keycloak's JWKS endpoint (/auth/realms/Paysera/protocol/openid-connect/certs). The key set is fetched once on cold start and cached for 30 days. The endpoint is re-contacted only when an incoming JWT carries a kid that is not present in the cached set (Keycloak key rotation).

To benefit from this strategy in production you must inject a persistent PSR-6 cache pool via setCacheItemPool(). The default InMemoryCache is scoped to a single PHP request and defeats the caching completely in shared-nothing deployments (PHP-FPM, multi-container setups), causing a /certs fetch on every validation.

Recommended backends: Redis, APCu, filesystem cache — anything that survives across PHP request lifecycles. Examples:

If /certs is unreachable during a rotation fallback, JWT validation fails loudly — the SDK never accepts an unsigned or unverifiable token.

Forcing a JWKS refresh

Normal Keycloak rotation is handled automatically via the unknown-kid fallback. For incident response (revoked or compromised signing key), the cached key set must be purged from the PSR-6 pool so the next JWT validation cold-starts it from /certs again.

Firebase\JWT\CachedKeySet stores its entries under the jwks prefix, but setCacheKeys() SHA-256-hashes the composite key whenever it exceeds 64 characters — and every real Paysera JWKS URL crosses that threshold. The prefix is lost in the final storage key, which means a redis-cli --scan --pattern 'jwks*' sweep will not match anything.

The reliable approach is to dedicate an isolated PSR-6 pool to the SDK and clear it as a whole during an incident:

Sharing the SDK's PSR-6 pool with unrelated application caches defeats this procedure — a full flush would also wipe business data. Keep the pool SDK-scoped so incident response stays a one-liner.

HTTP client timeouts

JWKS fetches go through the PSR-18 client injected via setHttpClient() (or the default CurlHttpClient otherwise). During cold start and rotation fallback, the call blocks the caller thread. A slow or unreachable /certs endpoint with an unbounded client timeout turns every such call into a hung checkout request.

Required for production: configure a finite connect timeout (~5 s) and total-request timeout (~10 s) on the injected PSR-18 client.

HTTP logging and redaction

Requests and responses are written to the PSR-3 logger passed to setLogger() through SecureApiClientFormatter. Nothing is logged at all while the default NullLogger is in place.

The formatter redacts sensitive query parameters, headers and body fields before the line is written. Body redaction is fail closed: a body is logged only when a body formatter claims its Content-Type. JSON (application/json and any +json subtype, including the application/problem+json of an RFC 7807 error) and application/x-www-form-urlencoded are handled out of the box, matched on the parsed media type — so parameters (; charset=utf-8), letter case and a header sent twice make no difference. Anything else — an unknown media type, or a response with no Content-Type header — is replaced with [UNSUPPORTED_CONTENT_TYPE], so an unrecognized payload never reaches the log.

Redacted by default: the query parameters and body fields client_id, client_secret, access_token, password and token, and the headers Authorization and Set-Cookie. Extend either list through the SecureApiClientFormatter constructor, and add handling for a further content type with addCustomBodyFormatter() — a custom formatter is consulted before the built-in ones, so it can also override how JSON or form-urlencoded bodies are redacted.

Exception context in logs

Internal SDK exceptions extend BaseException and carry diagnostic data that is not part of the exception message: which field failed validation, what the API actually answered. getContextData(): array returns that data as an array so a PSR-3 logger can render it.

It does not reach a log on its own. A PSR-3 normalizer resolves the standard Throwable fields — class, message, code, file, line, trace, previous — and calls no other getters, so render the context explicitly in your own normalizer, or pass it alongside the exception:

A public facade surfaces failures as IntegrationException, so the internal exception that carries the context is the one behind getPrevious().

getContext(): string is unchanged and still returns exactly what it returned before.

Two things to know before passing the array straight to a handler.

Only an array keyed entirely by strings is merged into the top level. Everything else — a list, an integer-keyed array, a scalar, a body that is not JSON — is appended as a list under the reserved key _raw, so read it from there rather than from the top level.

And the array holds the values as they were given, where getContext() flattened everything to a string at write time. An object passed to setContext() is therefore handed to your log formatter as an object, not as the flattened string getContext() produced — a formatter that recurses into it can write more than the string form ever did, and one that cannot encode it can fail on the whole record.

Documentation

Use Cases

Version History

See CHANGELOG.md for detailed version history and upgrade notes.

Contributing

See CONTRIBUTING.md. Paysera GitLab is the source of truth; the GitHub repository is a read-only mirror updated on every release tag.

Security

Vulnerabilities should be reported privately — see SECURITY.md. Please do not open public issues for security findings.

License

LGPL-3.0-or-later. The full license text is in LICENSE.


All versions of lib-checkout-integration-sdk with dependencies

PHP Build Version
Package Version
Requires php Version ^7.4 || ^8.0
ext-curl Version *
ext-json Version *
fig/http-message-util Version ^1.1
firebase/php-jwt Version ^6.10 || ^7.0
nyholm/psr7 Version ^1.8
php-http/client-common Version ^2.7
php-http/curl-client Version ^2.3
php-http/logger-plugin Version ^1.3 || ^1.4
php-http/message Version ^1.16
psr/cache Version ^1.0 || ^2.0 || ^3.0
psr/clock Version ^1.0
psr/container Version ^1.1 || ^2.0
psr/log Version ^1.1 || ^3.0
symfony/polyfill-mbstring Version ^1.29
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package paysera/lib-checkout-integration-sdk contains the following files

Loading the files please wait ...