Paynow payment gateway integration for python-getpaid ecosystem.
Project description
getpaid-paynow
Paynow payment gateway plugin for the
python-getpaid ecosystem. Provides an
async HTTP client (PaynowClient) and a payment processor (PaynowProcessor)
that integrates with getpaid-core's BaseProcessor interface. Authentication
uses API Key + HMAC-SHA256 signature against the Paynow V3 REST API.
Architecture
The plugin is split into two layers:
PaynowClient-- low-level async HTTP client wrapping the Paynow V3 REST API. Useshttpx.AsyncClientwith API Key authentication and HMAC-SHA256 request signing. Can be used standalone or as an async context manager for connection reuse.PaynowProcessor-- high-level payment processor implementingBaseProcessor. Orchestrates payment creation, callback/notification handling, status polling, and refunds. Integrates with the getpaid-core FSM for state transitions.
Key Features
- Create payment -- register a payment and get a redirect URL
- Notification handling -- verify HMAC signature and process status changes
- Status polling -- fetch current payment status via API
- Refund -- create, check, and cancel refunds
- Payment methods -- retrieve available payment methods
- HMAC-SHA256 signatures -- automatic request and notification signing
- PUSH and PULL -- notification-based flow with optional status polling
Quick Usage
Standalone Client
import asyncio
from decimal import Decimal
from getpaid_paynow import PaynowClient
async def main():
async with PaynowClient(
api_key="your-api-key",
signature_key="your-signature-key",
api_url="https://api.sandbox.paynow.pl",
) as client:
# Create a payment
response = await client.create_payment(
amount=Decimal("49.99"),
currency="PLN",
external_id="order-001",
description="Order #001",
buyer_email="buyer@example.com",
continue_url="https://shop.example.com/return/order-001",
)
redirect_url = response["redirectUrl"]
print(f"Redirect buyer to: {redirect_url}")
asyncio.run(main())
With django-getpaid
Register the plugin via entry point in pyproject.toml:
[project.entry-points."getpaid.backends"]
paynow = "getpaid_paynow.processor:PaynowProcessor"
Then configure in your Django settings (or config dict):
GETPAID_BACKEND_SETTINGS = {
"paynow": {
"api_key": "your-api-key",
"signature_key": "your-signature-key",
"sandbox": True,
"notification_url": "https://shop.example.com/payments/{payment_id}/callback/",
"continue_url": "https://shop.example.com/payments/{payment_id}/return/",
}
}
Configuration Reference
| Key | Type | Default | Description |
|---|---|---|---|
api_key |
str |
required | API key from Paynow merchant panel |
signature_key |
str |
required | Signature key for HMAC calculation |
sandbox |
bool |
True |
Use sandbox or production API |
notification_url |
str |
"" |
Notification URL template; use {payment_id} placeholder |
continue_url |
str |
"" |
Return URL template; use {payment_id} placeholder |
Supported Currencies
PLN, EUR, USD, GBP (4 total).
Limitations
Paynow does not support pre-authorization. The charge() and
release_lock() methods raise NotImplementedError.
Requirements
- Python 3.12+
python-getpaid-core >= 0.1.0httpx >= 0.27.0
Related Projects
- python-getpaid-core -- core abstractions (protocols, FSM, processor base class)
- django-getpaid -- Django adapter (models, views, admin)
License
MIT
Disclaimer
This project has nothing in common with the
getpaid plone project.
It is part of the django-getpaid / python-getpaid ecosystem.
Credits
Created by Dominik Kozaczko.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file python_getpaid_paynow-0.1.0.tar.gz.
File metadata
- Download URL: python_getpaid_paynow-0.1.0.tar.gz
- Upload date:
- Size: 64.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f13376ea0a68db9ca72c60c2f483b82bbf73c0520c6035915e67b382cec656be
|
|
| MD5 |
bf02b6e38321a10c252e323a821f110f
|
|
| BLAKE2b-256 |
3182dba6c449f53c758fdec4953bf871df64fd280059cbb9d85ee6aacfdd47d6
|
File details
Details for the file python_getpaid_paynow-0.1.0-py3-none-any.whl.
File metadata
- Download URL: python_getpaid_paynow-0.1.0-py3-none-any.whl
- Upload date:
- Size: 11.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Manjaro Linux","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8271f6ee5dc447603ade56d4a9524c48b4370058f3f631d4c597187db685c613
|
|
| MD5 |
630218ffa6194c98dc42fa573ae8389f
|
|
| BLAKE2b-256 |
afbe28d32f9a01e0ee5f66b663250449f1629b3b52b58abd8967a12232319c1a
|