nimblephp / payments
Payments for NimblePHP
Requires
- php: >=8.4
- ext-curl: *
- brick/money: ^0.12.2
- krzysztofzylka/database-manager: ^1.1.17
- nimblephp/framework: ^0.4.3
- nimblephp/migrations: ^0.3.2
Requires (Dev)
- phpunit/phpunit: ^11.5
This package is auto-updated.
Last update: 2026-04-13 14:39:51 UTC
README
Moduł płatności dla NimblePHP.
Aktualny zakres
Na ten moment moduł wspiera:
- modułowy storage transakcji
module_payment_transaction - wspólny flow transakcji modułu z persystencją statusów i payloadów
- wybór systemu płatności przez
NimblePHP\Payments\Payments - system
przelewy24 - provider adapter dla Przelewy24 nad niskopoziomowym gatewayem
- provider-specific DTO dla rejestracji i weryfikacji transakcji
- provider-specific response DTO dla odpowiedzi API
- obsługę callbacków / webhooków operatora
- mapowanie statusów operatora na wspólny status modułu
- budowanie URL checkoutu dla Przelewy24
To nie jest jeszcze w pełni generyczna warstwa dla wielu operatorów. Obecne DTO odzwierciedlają payloady Przelewy24 i są trzymane w:
src/Provider/Przelewy24/DTO/
Wymagania
- PHP
>=8.4 ext-curlnimblephp/framework ^0.4.3nimblephp/migrations ^0.3.2brick/money ^0.12.2
Instalacja
composer require nimblephp/payments
Po instalacji moduł powinien zostać uwzględniony w aktualizacji projektu, tak aby wykonały się jego migracje.
Migracje modułu
Moduł trzyma własne migracje w katalogu:
migrations/
Hook NimblePHP\Payments\Module::onUpdate() uruchamia je przez nimblephp/migrations z grupą:
nimblephp-payments
Obecne migracje:
- tworzą tabelę
module_payment_transaction - rozszerzają storage o
provider_statusiwebhook_payload - dodają indeksy po najważniejszych polach wyszukiwania
- używają aktualnych klas kolumn z
krzysztofzylka/database-manager/src/Columns
Przy kolejnych zmianach schematu należy dodawać nowe pliki migracji, zamiast rozbudowywać Module::onUpdate() o ręczne CreateTable / ALTER TABLE.
Główne klasy
Entry point
NimblePHP\Payments\PaymentsNimblePHP\Payments\Module
Enum systemów
NimblePHP\Payments\Enum\PaymentSystemEnumNimblePHP\Payments\Enum\PaymentTransactionStatusEnum
Wspólna transakcja modułu
NimblePHP\Payments\DTO\PaymentTransactionDTONimblePHP\Payments\DTO\PaymentFlowResultDTONimblePHP\Payments\DTO\ProviderTransactionUpdateDTONimblePHP\Payments\Model\PaymentTransactionModelNimblePHP\Payments\Service\PaymentTransactionFlowServiceNimblePHP\Payments\Contracts\PaymentProviderAdapterInterface
Przelewy24
NimblePHP\Payments\Provider\Przelewy24\Przelewy24AdapterNimblePHP\Payments\Provider\Przelewy24\Przelewy24GatewayNimblePHP\Payments\Provider\Przelewy24\DTO\Przelewy24ConfigDTONimblePHP\Payments\Provider\Przelewy24\DTO\Przelewy24RegisterTransactionDTONimblePHP\Payments\Provider\Przelewy24\DTO\Przelewy24RegisterTransactionResponseDTONimblePHP\Payments\Provider\Przelewy24\DTO\Przelewy24VerifyTransactionDTONimblePHP\Payments\Provider\Przelewy24\DTO\Przelewy24VerifyTransactionResponseDTO
Konfiguracja Przelewy24
Biblioteka czyta konfigurację z NimblePHP\Framework\Config.
Obsługiwane klucze:
PRZELEWY24_MERCHANT_IDPRZELEWY24_MECHANT_ID- fallback dla starszej literówkiPRZELEWY24_POS_IDPRZELEWY24_API_KEYPRZELEWY24_CRCPRZELEWY24_API-productionalbosandbox
Przykład użycia
use NimblePHP\Payments\DTO\PaymentTransactionDTO; use NimblePHP\Payments\Enum\PaymentSystemEnum; use NimblePHP\Payments\Payments; use NimblePHP\Payments\Provider\Przelewy24\DTO\Przelewy24RegisterTransactionDTO; use NimblePHP\Payments\Provider\Przelewy24\DTO\Przelewy24VerifyTransactionDTO; $payments = new Payments('przelewy24'); $flow = $payments->flow(); $transaction = new PaymentTransactionDTO(); $transaction->provider = PaymentSystemEnum::przelewy24; $transaction->amount = 12345; $transaction->objectType = 'order'; $transaction->objectId = 123; $register = new Przelewy24RegisterTransactionDTO(); $register->sessionId = 'session-123'; $register->amount = 12345; $register->description = 'Order #123'; $register->email = 'john@example.com'; $register->urlReturn = 'https://example.com/order/123'; $register->urlStatus = 'https://example.com/payment/callback'; $registered = $flow->registerTransaction($transaction, $register); $checkoutUrl = $registered->checkoutUrl; $flow->handleWebhook([ 'data' => [ 'sessionId' => 'session-123', 'orderId' => 10001, 'status' => 2, ], ]); $verify = new Przelewy24VerifyTransactionDTO(); $verify->sessionId = 'session-123'; $verify->orderId = 10001; $verify->amount = 12345; $verify->currency = 'PLN'; $flow->verifyTransaction($registered->transactionId, $verify);
Architektura
Paymentswybiera provider na podstawie stringa alboPaymentSystemEnumPaymentsudostępnia zarówno niski poziom (gateway()), jak i wspólny flow modułu (flow())GatewayInterfacetrzyma wspólny kontrakt dla providerówPaymentProviderAdapterInterfaceoddziela flow modułu od logiki konkretnego operatoraModule::onUpdate()uruchamia migracje modułu z katalogumigrations/- implementacje providerów są w
src/Provider/ - adapter operatora mapuje statusy i webhooki do wspólnego formatu modułu
PaymentTransactionFlowServiceodpowiada za zapis rekordu, update statusów i przechowanie payloadów- DTO są provider-specific, dopóki nie pojawi się realna potrzeba wspólnej warstwy dla wielu operatorów
- storage transakcji jest wspólny dla modułu i nie jest nazwany per provider
- migracje używają aktualnych klas kolumn zamiast deprecated helperów
addIdColumn()/addDateCreatedColumn()/addDateModifyColumn()
Tabela module_payment_transaction
Aktualny wspólny storage modułu zawiera między innymi:
providerprovider_session_idprovider_order_idprovider_transaction_idprovider_tokenprovider_statusaccount_idobject_typeobject_idamountcurrencystatusrequest_payloadregister_response_payloadverify_response_payloadwebhook_payloadmetadatadate_completeddate_faileddate_createddate_modify
Callbacki i statusy
- callback / webhook operatora nie kończy flow sam z siebie — aktualizuje transakcję do stanu pośredniego i zapisuje surowy payload,
- finalne potwierdzenie płatności powinno następować po
verifyTransaction(...), - moduł przechowuje jednocześnie wspólny
statusoraz surowyprovider_status, - adapter operatora odpowiada za mapowanie statusów zewnętrznych do
PaymentTransactionStatusEnum.