Skip to content

v1.0.0

Choose a tag to compare

@loevgaard loevgaard released this 10 Aug 13:14
cc4b95c

First stable release. 🎉

A small, strongly-typed PHP SDK for the Quickpay API (v10), deliberately focused on the payments resource, the /ping health check, the payment-window link flow, and callback (webhook) verification.

composer require setono/quickpay-php-sdk

Requires PHP >= 8.1 and any PSR-18 HTTP client / PSR-17 factories (auto-discovered via php-http/discovery).

Highlights

  • Typed end to end — request DTOs with live-API-verified required fields, response DTOs mapped with Valinor, and a full typed exception hierarchy under a single QuickpayException marker interface.
  • Safe by default — host pinning so credentials only ever go to api.quickpay.net, sanitized URLs in exception messages, timing-safe HMAC verification of callbacks over the raw request body, and strict validation of the QuickPay-Resource-Type header.
  • Resilient to API evolution — non-exhaustive PaymentState / OperationType enums that never throw on server-added values, and a $raw escape hatch on every response for fields the SDK doesn't model.
  • Async operations, modeled honestly — capture/refund/cancel/authorize support Quickpay's ?synchronized flag per call or as a client-wide default, and the docs explain exactly what a 202 Accepted response does (and does not) tell you.
  • Well-tested — 109 unit tests, PHPStan at level max, mutation score (MSI) 85%, CI across PHP 8.1–8.5 with lowest & highest dependencies, plus a committed end-to-end harness (examples/e2e/) for verifying the whole flow against the real API.

See the README for full usage — from creating a payment and redirecting to the payment window, to verifying the signed callback.

Changes since v1.0.0-beta.2

  • Dist installs are now lean: CLAUDE.md, examples/ and .env.local.example are export-ignored, so a composer require ships only LICENSE, composer.json and src/ (#9)
  • Fixed the live test's generated order_id exceeding Quickpay's 20-character limit (#9)
  • Fixed a docblock referencing the nonexistent CallbackHandler::handleRequest() (now handleRaw()) (#9)
  • Removed an undefined env.PHP_EXTENSIONS reference from the CI workflow (#9)

Full changelog: v1.0.0-beta.2...v1.0.0