Frappe Payzum

Payzum crypto/stablecoin payment gateway for Frappe / ERPNext — USDC, USDT and more, non-custodial

Install Frappe Payzum

bench get-app https://github.com/payzum-dev/frappe-payzum

Add the Frappe Gems badge to your README

Maintain Frappe Payzum? Paste this into your README:

[![Listed on Frappe Gems](https://frappegems.com/api/method/frappe_gems.seo.badge?app=payzum-dev%2Ffrappe-payzum)](https://frappegems.com/gems/apps/payzum-dev/frappe-payzum)

About Frappe Payzum

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

Related Integrations apps for Frappe & ERPNext

  • Insights — Open Source Business Intelligence Tool
  • Raven — Simple, open source team messaging platform
  • Frappe Whatsapp — WhatsApp cloud integration for frappe
  • Frappe Assistant Core — Infrastructure that connects LLMs to ERPNext. Frappe Assistant Core works with the Model Context Protocol (MCP) to expose ERPNext functionality to any compatible Language Model
  • Biometric Attendance Sync Tool — A simple tool for syncing Biometric Attendance data with your ERPNext server
  • Frappe React Sdk — React hooks for Frappe
  • Frappe Js Sdk — TypeScript/JavaScript library for Frappe REST API
  • Mcp — Frappe MCP allows Frappe apps to function as MCP servers