Skip to main content

Payzum Payments for Frappe / ERPNext

Accept crypto and stablecoin payments (USDC, USDT and more, multi-chain) in any Frappe or ERPNext site. Payzum is non-custodial: funds settle directly to your own wallet.

The app plugs into the official frappe/payments framework: it registers a Payzum payment gateway that any consumer of get_payment_gateway_controller (Payment Requests, web forms, custom code) can use, exactly like the built-in gateways.

  • Buyers are redirected to a hosted checkout page where they pick the asset and network; your site charges in fiat terms (e.g. 29.99 USD). No card fields, no PCI surface.
  • Orders are fulfilled from the signed payment notification (HMAC-SHA-512, verified by the official payzum Python SDK), never from the buyer's browser return.
  • Redelivered notifications are idempotent, and a late expired event can never downgrade an order that already settled.

Requirements

  • Frappe v15+ with the payments app installed
  • Python 3.10+
  • A publicly reachable site URL (Payzum delivers notifications server-to-server)

Installation

bench get-app https://github.com/payzum-dev/frappe-payzum
bench --site yoursite install-app payzum_payments

Configuration

Open Payzum Settings (single doctype) on your site:

Field Value
API Key From Dashboard → Settings → API Keys at merchant.payzum.com
Webhook Secret Shown once, at merchant creation or rotation
Use Sandbox Point at staging.payzum.com — isolated environment, separate API keys
Pay Currency all (default) lets the buyer pick on the hosted page; or pin a code like usdcmatic

Saving validates the API key against the live API.

Every invoice the app creates carries its own ipn_callback_url pointing back at your site, so no webhook needs to be configured in the Payzum dashboard.

Usage from code

from payments.utils import get_payment_gateway_controller

controller = get_payment_gateway_controller("Payzum")
controller.validate_transaction_currency("USD")

url = controller.get_payment_url(
    amount=29.99,
    currency="USD",
    title="Payment for SO-0001",
    description="Sales Order SO-0001",
    reference_doctype="Payment Request",
    reference_docname="PR-0001",
    payer_email="buyer@example.com",
)
# redirect the buyer to `url`

When the invoice settles, the reference document's on_payment_authorized("Completed") is called — the same contract every gateway in frappe/payments honours.

Statuses

The gateway emits five payment statuses; only finished fulfils:

Payzum status Effect
finished on_payment_authorized("Completed"), Integration Request → Completed
expired, failed Integration Request → Failed
waiting, partially_paid No change (partially_paid means underpaid)

Tests

bench --site yoursite run-tests --app payzum_payments

The suite exercises the notification handler with genuinely signed bodies: signature rejection, replay-window rejection, fulfilment, idempotent redelivery, and the never-downgrade guard.

License

MIT

Metadata

Release files for payzum-payments 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for payzum-payments 0.2.0
File Size Uploaded
payzum_payments-0.2.0.tar.gz 9.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for payzum-payments 0.2.0
File Interpreter ABI Platform
payzum_payments-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 21.8 kB

Release files / payzum_payments-0.2.0.tar.gz

Download URL payzum_payments-0.2.0.tar.gz
Size 9.9 kB
Tags Source
SHA-256 checksum
How to use checksums
2b32e64083f585ac6fbc5e41f5c3d5c159cb12cbb0a088e94b99a9833079779f
BLAKE2b-256 checksum
How to use checksums
f246a5201dfc536ec955fe073dca3ef98ac1101ba978fd83b34087b44a7f9079
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release files / payzum_payments-0.2.0-py3-none-any.whl

Download URL payzum_payments-0.2.0-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
efc9c352876a9ab68218fa39c78da2f11d38cdddeee9fb3a235d2db8ff9e9cbe
BLAKE2b-256 checksum
How to use checksums
ccfaad791d460a44a6f6bca9b0846d2e61f063abbc1122553dff7f43f65aea43
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.10.12

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page