Skip to main content

Paynow payment gateway integration for python-getpaid ecosystem.

Project description

getpaid-paynow

PyPI Python Version License

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. 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. 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.0
  • httpx >= 0.27.0

Related Projects

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


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-0.1.0.tar.gz (64.6 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-0.1.0-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

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

Hashes for python_getpaid_paynow-0.1.0.tar.gz
Algorithm Hash digest
SHA256 f13376ea0a68db9ca72c60c2f483b82bbf73c0520c6035915e67b382cec656be
MD5 bf02b6e38321a10c252e323a821f110f
BLAKE2b-256 3182dba6c449f53c758fdec4953bf871df64fd280059cbb9d85ee6aacfdd47d6

See more details on using hashes here.

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

Hashes for python_getpaid_paynow-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8271f6ee5dc447603ade56d4a9524c48b4370058f3f631d4c597187db685c613
MD5 630218ffa6194c98dc42fa573ae8389f
BLAKE2b-256 afbe28d32f9a01e0ee5f66b663250449f1629b3b52b58abd8967a12232319c1a

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