v1.0.0
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-sdkRequires 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
QuickpayExceptionmarker 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 theQuickPay-Resource-Typeheader. - Resilient to API evolution — non-exhaustive
PaymentState/OperationTypeenums that never throw on server-added values, and a$rawescape hatch on every response for fields the SDK doesn't model. - Async operations, modeled honestly — capture/refund/cancel/authorize support Quickpay's
?synchronizedflag per call or as a client-wide default, and the docs explain exactly what a202 Acceptedresponse 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.exampleareexport-ignored, so acomposer requireships onlyLICENSE,composer.jsonandsrc/(#9) - Fixed the live test's generated
order_idexceeding Quickpay's 20-character limit (#9) - Fixed a docblock referencing the nonexistent
CallbackHandler::handleRequest()(nowhandleRaw()) (#9) - Removed an undefined
env.PHP_EXTENSIONSreference from the CI workflow (#9)
Full changelog: v1.0.0-beta.2...v1.0.0