Skip to main content

A Django utility for eSewa signature generation.

Project description

Django-esewa

A simple, developer-friendly package for integrating the eSewa Payment Gateway into Django applications.

Overview

django-esewa was developed by Nischal Lamichhane to simplify eSewa integration for Python/Django developers. It aims to handle common payment gateway tasks like generating HMAC signatures, verifying transactions, and status checks (in future versions).

Features

  • HMAC Key Generation: Easily generate the signature required for eSewa requests.
  • Customization: Configure secret keys, product codes, success URLs, and failure URLs.

Future Goals

  • Transaction status verification.
  • Improved documentation for all class methods.

QuickStart

pip install django-esewa

Even though you can use the generate_signature(from django_esewa) function without creating an object of EsewaPayment, if you want to use other features, you need to instantiate an object of the class EsewaPayment.


Usage

All the amounts like amount, tax_amount, total_amount, product_delivery_charge, product_service_charge will be defaulted to 0. success_url will defaulted to http://localhost:8000/success/ and failure_url will be defaulted to http://localhost:8000/failure/. Secret key will be defaulted to "8gBm/:&EnhH.1/q". Product code will be defaulted to EPAYTEST. Transaction uuid will be defaulted to None.

Generating HTML Form

Views.py

from django_esewa import EsewaPayment

def confirm_order(request,id):
    order = Order.objects.get(id=id)

    payment = EsewaPayment(
        product_code=order.code,
        success_url="http://yourdomain.com/success/",
        failure_url="http://yourdomain.com/failure/",
        amount=order.amount,
        tax_amount=calculate_tax(),
        total_amount=order.total_amount,
        product_delivery_charge=order.delivery_charge,
        product_service_charge=order.service_charge
        transaction_uuid="transaction uuid",
        secret_key="your_secret_key",

    )
    signature = payment.create_signature() #Saves the signature as well as return it

    context = {
        'form':payment.generate_form()
    }
    
    return render(request,'order/checkout.html',context)

order/checkout.html

<form action="https://rc-epay.esewa.com.np/api/epay/main/v2/form" method="POST">
    {{form|safe}}
    <button type="submit">Pay with Esewa </button>
</form>

Generating a Signature

The generate_signature function helps create the HMAC signature required by eSewa for secure transactions.

Function Signature:

def generate_signature(
    total_amount: float,
    transaction_uuid: str,
    key: str = "8gBm/:&EnhH.1/q",
    product_code: str = "EPAYTEST"
) -> str:

Example:

from django_esewa import generate_signature

# During Development
signature = generate_signature(1000, "123abc")

# In Production
signature = generate_signature(1000, "123abc", "<your_private_key>", "<product_code>")

Using the EsewaPayment Class

EsewaPayment provides additional configuration options for success and failure URLs. List of all methods in EsewaPayment:

  • __init__()
  • create_signature()
  • generate_form()
  • get_status()
  • is_completed()
  • verify_signature()
  • log_transaction()
  • __eq__()

List of In-development methods:

  • generate_redirect_url()
  • refund_payment()
  • simulate_payment()

Initialization:

from django_esewa import EsewaPayment

payment = EsewaPayment(
    product_code="EPAYTEST",
        success_url="http://localhost:8000/success/",
        failure_url="http://localhost:8000/failure/",
        amount=100,
        tax_amount=0,
        total_amount=100,
        product_service_charge=0,
        product_delivery_charge=0,
        transaction_uuid="11-200-111sss1",
)

Signature generation

signature = payment.create_signature()

Form Generation

signature = payment.generate_form()

Settings

FR

Contributing

Current To-Do List

  • Write documentation for all methods in the EsewaPayment class.
  • Add refund method

How to Contribute

  1. Fork this repository.
  2. Create a feature branch.
  3. Commit your changes with clear messages.
  4. Submit a pull request (PR) with a detailed description of your changes.

Credits

django-esewa is maintained by Nischal Lamichhane. This package was created as a last-ditch effort to help Python/Django developers integrate eSewa Payment Gateway efficiently.

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

django_esewa-1.0.9.tar.gz (10.1 kB view details)

Uploaded Source

Built Distribution

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

django_esewa-1.0.9-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file django_esewa-1.0.9.tar.gz.

File metadata

  • Download URL: django_esewa-1.0.9.tar.gz
  • Upload date:
  • Size: 10.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for django_esewa-1.0.9.tar.gz
Algorithm Hash digest
SHA256 6a4817e6aaa0bed2e623ee0ccf61f9962765e8b0856fd0cad90a90ef7f5723f6
MD5 a2deda184484f9ea8ba195561efa00d5
BLAKE2b-256 f2d245d3057175719efbb9aaec505054b85f1b3d2441d5bf80d929ed81455274

See more details on using hashes here.

File details

Details for the file django_esewa-1.0.9-py3-none-any.whl.

File metadata

  • Download URL: django_esewa-1.0.9-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.0

File hashes

Hashes for django_esewa-1.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 805b0a17e5717d55cddf41c09845e98c950dbefdb90f38bf506dbb19d473fd59
MD5 e16a5146db18a1387b1a1f521385e1c9
BLAKE2b-256 9a492f9842a6c199e67fe4718850c7f66dbcc47d5a55122c0779ef3e9dde1c5f

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