dominservice / przelewy24-laravel
Przelewy24 Laravel library
1.0.0
2023-11-13 09:40 UTC
Requires
- php: ^8.1
- dominservice/przelewy24-php: ^1.0
- illuminate/contracts: >=9.0
- illuminate/support: >=9.0
Requires (Dev)
This package is auto-updated.
Last update: 2024-11-13 12:54:42 UTC
README
Laravel wrapper for dominservice/przelewy24-php.
Requirements
- PHP >=8.1
- Laravel >=9.0
Installation
composer require dominservice/przelewy24-laravel
Configuration
Add the following to your .env
file:
PRZELEWY24_MERCHANT_ID=12345 PRZELEWY24_REPORTS_KEY=f0ae... PRZELEWY24_CRC=aef0... PRZELEWY24_POS_ID=12345 PRZELEWY24_SANDBOX_MERCHANT_ID=12345 PRZELEWY24_SANDBOX_REPORTS_KEY=f0ae... PRZELEWY24_SANDBOX_CRC=aef0... PRZELEWY24_SANDBOX_POS_ID=12345 PRZELEWY24_LIVE=false
Setting PRZELEWY24_LIVE
to false
will use the sandbox environment. Set it to true
to use production/live mode.
Pos ID may also be set if necessary:
PRZELEWY24_POS_ID=...
Usage
Here is a simple example of how the package can be used to create a transaction, listen for Przelewy24's webhook and verify the transaction. Dependency injection is used to get an instance of Przelewy24
:
<?php use App\Models\Order; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Http\Response; use Przelewy24\Enums\Currency; use Przelewy24\Enums\Language; use Przelewy24\Exceptions\Przelewy24Exception; use Przelewy24\Przelewy24; class MyController { public function __construct( private readonly Przelewy24 $przelewy24, ) {} public function pay(Order $order): RedirectResponse { // Create a new transaction $register = $this->przelewy24->transactions()->register( sessionId: $order->id, amount: $order->amount, description: "Order #{$order->id}", email: $order->email, urlReturn: route('orders.success'), urlStatus: route('orders.webhook'), // client: 'Mateusz Domin', // currency: Currency::EUR, // language: Language::ENGLISH, // ... ); $order->payment_id = $register->token(); $order->save(); // Redirect to Przelewy24's payment gateway return redirect( $register->gatewayUrl() ); } /** * Method for route "orders.success". */ public function paymentSuccessful(): Response { return response('Payment successful!'); } /** * Method for route "orders.webhook". * Must be POST and excluded from CSRF protection. */ public function webhook(Request $request): Response { // Handle Przelewy24's webhook $webhook = $this->przelewy24->handleWebhook( $request->post() ); // Find related order using webhook's session ID $order = Order::find( $webhook->sessionId() ); // If you would like to verify that the webhook and its // signature are legitimate, you may use the following method: $isSignValid = $webhook->isSignValid( sessionId: $order->id, amount: $order->amount, originAmount: $order->amount, orderId: $webhook->orderId(), methodId: $webhook->methodId(), statement: "Order #{$order->id}", // currency: Currency::EUR, ); if (!$isSignValid) { // Handle error ... abort(Response::HTTP_BAD_REQUEST); } // Verify the transaction / claim the payment try { $this->przelewy24->transactions()->verify( $order->id, $webhook->orderId(), $order->amount, ); $order->status = 'paid'; $order->save(); } catch (Przelewy24Exception) { // Handle error ... } return response()->noContent(); } }
As this package wraps the dominservice/przelewy24-php package, all methods are the same. For a more in-depth documentation, check its README.