django-esewa is a Pypi package Developed by DSF Member and Admin of this platform Nischal Lamichhane 

Overview

django-esewa&…

" />

Django-esewa package

ESEWA INTEGRATION


Django-esewa package 

django-esewa is a Pypi package Developed by DSF Member and Admin of this platform Nischal Lamichhane 

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

Note: Ensure you have added necessary settings like ESEWA_SECRET_KEYESEWA_SUCCESS_URL, and ESEWA_FAILURE_URL in your settings.py.

Even though you can use the generate_signature function without creating an object of EsewaPayment, if you want to use other features, you need to add ESEWA_SUCCESS_URLESEWA_FAILURE_URL (will fallback to localhost:8000/success/ & localhost:8000/failure/) & ESEWA_SECRET_KEY (will fall back to '8gBm/:&EnhH.1/q').

ESEWA_SUCCESS_URL = "localhost:8000/success/"
ESEWA_FAILURE_URL = "localhost:8000/failure/"
ESEWA_SECRET_KEY = "<Custom_key_from_Esewa>"

Usage

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", "", "")

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:


form = payment.generate_form()

 
 

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.

 

 

References