Skip to main content

Paynow payment gateway integration for python-getpaid ecosystem.

Project description

python-getpaid-paynow

PyPI version License: MIT Python versions

Paynow payment processor for python-getpaid ecosystem. Paynow is a modern Polish payment provider and a subsidiary of mBank.

Architecture

The plugin is split into two layers:

  • PaynowClient -- low-level async HTTP client wrapping the Paynow V3 REST API. Uses httpx.AsyncClient with 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 implementing BaseProcessor. Orchestrates payment creation, callback/notification handling, status polling, and refunds using semantic payment updates.

Key Features

  • Create payment -- register a payment and get a redirect URL
  • Notification handling -- verify HMAC-SHA256 signature and process status changes
  • Status polling -- fetch current payment status via API (PULL flow)
  • Refund -- create, check, and cancel refunds
  • Payment methods -- retrieve available payment methods
  • Sandbox mode -- full support for testing environment

Note: Paynow does not support pre-authorization flows. Immediate capture is used for all transactions. The charge() and release_lock() methods raise NotImplementedError.

Supported Currencies

The processor supports the following 4 currencies:

  • PLN (Polish Złoty)
  • EUR (Euro)
  • GBP (British Pound)
  • USD (US Dollar)

Installation

Install the package using pip:

pip install python-getpaid-paynow

Install simulator support only when you want this package to register its local simulator plugin with python-getpaid-simulator:

pip install python-getpaid-paynow[simulator]

This extra installs the simulator host and Litestar dependencies, then exposes the paynow plugin through the getpaid.simulator.providers entry point.

Simulator Plugin

When python-getpaid-paynow[simulator] is installed alongside python-getpaid-simulator, the simulator host auto-discovers the PayNow plugin.

Typical local setup:

pip install python-getpaid-simulator python-getpaid-paynow[simulator]
getpaid-simulator

The plugin contributes:

  • PayNow payment and refund simulator API routes under /paynow/v3/...
  • PayNow authorization UI at /sim/paynow/authorize/{payment_id}
  • PayNow-specific webhook signing and state transitions

Useful simulator environment variables:

  • SIMULATOR_PAYNOW_API_KEY
  • SIMULATOR_PAYNOW_SIGNATURE_KEY
  • SIMULATOR_PAYNOW_NOTIFY_URL
  • SIMULATOR_PLUGIN_FAILURE_MODE (warn or strict)

Quick Usage

Standalone Client

import anyio
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}")

anyio.run(main)

With python-getpaid

Register the plugin via entry point in pyproject.toml (if not using the pre-packaged version):

[project.entry-points."getpaid.backends"]
paynow = "getpaid_paynow.processor:PaynowProcessor"

Then configure in your project settings:

GETPAID_BACKEND_SETTINGS = {
    "paynow": {
        "api_key": "your-api-key",
        "signature_key": "your-signature-key",
        "sandbox": True,
        "notification_url": "https://your-site.com/payments/{payment_id}/callback/",
        "continue_url": "https://your-site.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

Requirements

  • Python 3.12+
  • python-getpaid-core >= 3.0.0
  • httpx >= 0.27.0

Links

License

This project is licensed under the MIT License.

Credits

Created by Dominik Kozaczko.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

python_getpaid_paynow-3.0.0.tar.gz (33.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

python_getpaid_paynow-3.0.0-py3-none-any.whl (19.1 kB view details)

Uploaded Python 3

File details

Details for the file python_getpaid_paynow-3.0.0.tar.gz.

File metadata

  • Download URL: python_getpaid_paynow-3.0.0.tar.gz
  • Upload date:
  • Size: 33.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for python_getpaid_paynow-3.0.0.tar.gz
Algorithm Hash digest
SHA256 72085562543cb98fbc58f7c58f8106fefe5162ab24c372ee4e2de0ec5632fcaf
MD5 f29c54d951a0f377d9c9db9f90c281ff
BLAKE2b-256 b0cdb6759f040ec60918f5574e9c9f49249ed936e74f3300b2fbf4393606dd61

See more details on using hashes here.

File details

Details for the file python_getpaid_paynow-3.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for python_getpaid_paynow-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 85c7a9c2e342ab778a59396beedad697a9d28d9378f394c3b47882b286d9966d
MD5 d019a8f1cc5c849c0ede8bbdad72edb1
BLAKE2b-256 a53d688e7b9297a2ecb5883aed652d674cc71bc75a8f07b90b966febbc5d8c9a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page