Razorpay Python SDK

2.0.1 · active · verified Wed Mar 25

Official Python SDK for Razorpay — India's leading payment gateway. Current version: 2.0.1 (Mar 2026). Auth uses API key + secret tuple. All amounts in paise (1 INR = 100 paise) — not rupees. Payment flow: create order server-side → collect payment client-side → verify signature server-side. Signature verification is mandatory — skipping it is a security vulnerability. Test keys start with 'rzp_test_', live keys with 'rzp_live_'.

Warnings

Install

Imports

Quickstart

Razorpay Python SDK — order creation, signature verification, and refund.

# pip install razorpay
import razorpay

# Use test keys from dashboard.razorpay.com
client = razorpay.Client(auth=('rzp_test_YOUR_KEY', 'YOUR_SECRET'))
client.enable_retry(True)  # retry on transient failures

# Step 1: Create order server-side
order = client.order.create({
    'amount': 50000,    # 500 INR in paise
    'currency': 'INR',
    'receipt': 'receipt_001',
    'notes': {
        'product': 'Widget',
        'user_id': '123'
    }
})
print('Order ID:', order['id'])
# Pass order['id'], key_id, amount to frontend Razorpay checkout

# Step 2: After frontend payment, verify signature
params = {
    'razorpay_order_id': order['id'],
    'razorpay_payment_id': 'pay_XXXX',   # from frontend
    'razorpay_signature': 'SIG_XXXX'     # from frontend
}
try:
    client.utility.verify_payment_signature(params)
    print('Payment confirmed')
except razorpay.errors.SignatureVerificationError:
    print('Invalid signature — reject payment')

# Fetch payment details
payment = client.payment.fetch('pay_XXXX')
print(payment['status'], payment['amount'])

# Refund
refund = client.payment.refund('pay_XXXX', {'amount': 50000})
print(refund['id'])

view raw JSON →