Przelewy24 payments medusa
Przelewy24 (P24) payment integration plugin for Medusa e-commerce with BLIK, cards, and general P24 support.
Przelewy24 Payments for Medusa
A comprehensive payment provider plugin that enables Przelewy24 payments on Medusa V2 projects.
Table of Contents
- Features
- Prerequisites
- Installation
- Configuration
- Usage
- Client-Side Integration
- Supported Payment Methods
- Payment Flows
- Webhook Configuration
- Extending the Plugin
- Local Development and Customization
- License
Features
-
Multiple Payment Methods: Supports a wide range of Przelewy24 payment methods including:
- BLIK (Regular and One-Click)
- Credit/Debit Cards
- Bank Transfers
- White Label Integration
-
Modular Architecture: Multiple services in a single module provider for easy management.
-
Webhook Support: Full support for Przelewy24 webhooks for real-time payment status updates.
-
TypeScript Support: Full TypeScript implementation with proper types.
-
Sandbox Mode: Built-in sandbox support for testing.
[!WARNING] > This plugin has not been tested on a live store. Please conduct thorough testing before using it in a production environment. GMI Software is not responsible for any missed or failed payments resulting from the use of this plugin. If you encounter any issues, please report them here.
Prerequisites
- Medusa server v2.4.0 or later
- Node.js v20 or later
- A Przelewy24 merchant account with API credentials.
[!NOTE] > You can get your API credentials from your Przelewy24 merchant panel
Installation
yarn add p24-medusa-plugin
Configuration
Add the provider to the module in your file:
import { Modules } from "@medusajs/framework/utils";module.exports = defineConfig({modules: [{resolve: "@medusajs/medusa/payment",options: {providers: [{resolve:"@gmisoftware/przelewy24-payments-medusa/providers/przelewy24",id: "przelewy24",options: {api_key: process.env.P24_API_KEY,merchant_id: process.env.P24_MERCHANT_ID,pos_id: process.env.P24_POS_ID,crc: process.env.P24_CRC,sandbox: process.env.P24_IS_SANDBOX,frontend_url: process.env.MEDUSA_STORE_URL,backend_url: process.env.MEDUSA_BACKEND_URL,},},],},},],plugins: ["@gmisoftware/przelewy24-payments-medusa"],});
Configuration Options
| Option | Description | Required | Default |
|---|---|---|---|
| P24 Merchant ID | Yes | - | |
| P24 POS ID | Yes | - | |
| P24 API Key | Yes | - | |
| P24 CRC Key for signature verification | Yes | - | |
| Enable sandbox mode | No | ||
| Frontend URL for customer redirects | No | ||
| Backend URL for webhook notifications | No |
Environment Variables
Create or update your file with the following variables:
# P24 ConfigurationP24_MERCHANT_ID=your_merchant_idP24_POS_ID=your_pos_idP24_API_KEY=your_api_keyP24_CRC=your_crc_key# URL ConfigurationFRONTEND_URL=https://your-frontend-domain.comBACKEND_URL=https://your-backend-domain.com
Usage
Once installed and configured, the Przelewy24 payment methods will be available in your Medusa admin. To enable them, log in to your Medusa Admin, browse to Settings > Regions, add or edit a region and select the desired P24 providers from the dropdown.
Make sure that the selected payment methods are enabled in your Przelewy24 merchant panel as well.
Client-Side Integration
To integrate with your storefront, you'll need to implement the payment flow according to Przelewy24's and Medusa's documentation. Here's a basic example:
BLIK Payment
BLIK payments use a two-phase flow:
Phase 1: Create Payment Session
// Create payment session for BLIKconst paymentSession = await medusa.payment.createPaymentSession({provider_id: "p24-blik",amount: 10000, // 100.00 PLN in groszecurrency_code: "PLN",data: {country: "PL", // Country code (defaults to "PL" if not provided)language: "pl", // Language code (defaults to "pl" if not provided)},context: {email: "customer@example.com",},});// Response includes session_id and token, but no redirect_urlconsole.log(paymentSession.data.session_id); // Use this for BLIK processing
Phase 2: Process BLIK Code
// Call internal API to process BLIK codeconst blikResponse = await fetch("/admin/plugin/blik", {method: "POST",headers: {"Content-Type": "application/json",},body: JSON.stringify({token: paymentSession.data.token, // Token from payment sessionblikCode: "123456", // 6-digit BLIK code from user}),});
Card Payment
// Create payment session for cardsconst paymentSession = await medusa.payment.createPaymentSession({provider_id: "p24-cards",amount: 10000, // 100.00 PLN in groszecurrency_code: "PLN",data: {country: "PL", // Country code (defaults to "PL" if not provided)language: "pl", // Language code (defaults to "pl" if not provided)},context: {email: "customer@example.com",billing_address: {country_code: "PL",},},});// Redirect user to payment URLwindow.location.href = paymentSession.data.redirect_url;
General P24 Payment
// Create payment session for general P24const paymentSession = await medusa.payment.createPaymentSession({provider_id: "p24-general",amount: 10000,currency_code: "PLN",data: {country: "PL", // Country code (defaults to "PL" if not provided)language: "pl", // Language code (defaults to "pl" if not provided)},context: {email: "customer@example.com",},});// Redirect user to P24 payment selectionwindow.location.href = paymentSession.data.redirect_url;
Supported Payment Methods
The plugin currently supports the following Przelewy24 payment methods:
| Payment Method | Provider ID |
|---|---|
| BLIK | |
| Cards | |
| General P24 |
Payment Flows
1. BLIK Payment Flow
- Phase 1: Frontend creates payment session via
- Phase 2: Frontend collects BLIK code (6 digits) from customer
- Phase 3: Frontend calls internal API with BLIK code
- Phase 4: Backend calls P24 BLIK API to charge the payment
- Phase 5: Customer confirms payment on mobile device
- Phase 6: P24 sends webhook notification confirming payment
- Phase 7: Order is completed
Note: BLIK payments don't use redirect URLs. The entire flow happens through API calls.
2. Card Payment Flow
- Customer is redirected to P24 card payment page
- Customer enters card details
- Payment is processed
- Customer is redirected back to store
- Webhook notification confirms payment
3. General P24 Flow
- Customer is redirected to P24 payment selection
- Customer chooses payment method (bank transfer, etc.)
- Payment is processed through chosen method
- Customer is redirected back to store
- Webhook notification confirms payment
Webhook Configuration
Webhook URLs
The plugin provides webhook endpoints for each provider:
- BLIK:
- Cards:
- General:
Return URL
- Return URL:
Configure these URLs in your P24 merchant panel.
Note: The webhook URLs follow Medusa's pattern: where:
- is the service's static identifier (e.g., , , )
- is the package name ()
Extending the Plugin
To add support for additional Przelewy24 payment methods, create a new service in that extends the class:
import P24Base from "../core/p24-base";import { PaymentOptions } from "../types";class P24NewMethodService extends P24Base {static identifier = "p24-new-method";get paymentCreateOptions(): PaymentOptions {return {method: "new_method",};}}export default P24NewMethodService;
Make sure to replace with the actual Przelewy24 payment method ID.
Export your new service from . Then add your new service to the list of services in .
Local development and customization
In case you want to customize and test the plugin locally, refer to the Medusa Plugin docs.
License
MIT License
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests
- Submit a pull request