Skip to main content

Python package to connect to Setu's UPI Deep Link APIs.

Project description

Setu UPI DeepLinks: Python SDK

setu is a Python SDK for accessing Setu’s UPI Deeplinks APIs. The SDK is designed with ease of access in mind, with native Python class objects for inputs & ouputs and custom exceptions.

Version Downloads License

SDK in action

Getting started

SDK documentation →
Full documentation →
Product overview →

Installation

pip install setu

Features

  • Full support for latest UPI Deeplinks APIs
  • Native Python class objects for all inputs & responses
  • Allows both JWT & OAuth authentication mechanisms
  • SANDBOX mode to test integration & PRODUCTION for live data
  • Internal mechanism for OAuth authentication to automatically re-fetch token when current one expires, and retry all failed requests.

Examples

Setup

from setu import Deeplink
from setu.contract import RefundRequestItem, SetuAPIException

dl = Deeplink(
    scheme_id="c4f57443-dc1e-428f-8c4e-e5fd531057d2",
    secret="5b288618-473f-4193-ae1b-8c42f223798e",
    product_instance_id="861023031961584801",
    auth_type="OAUTH",
    mode="SANDBOX",
)

Generate UPI payment link

bill_amount = 100
try:
    link = dl.create_payment_link(
        amount_value=bill_amount,
        biller_bill_id="test_transaction_1234",
        amount_exactness="EXACT",
        payee_name="Python SDK unittest",
        transaction_note="unittest transaction",
    )
    assert link.payment_link.upi_id == "refundtest@kaypay"
except SetuException as e:
    assert False

Get Payment Link Status

try:
    link_status = dl.check_payment_status(link.platform_bill_id)
    assert link_status.status == "BILL_CREATED"
except SetuAPIException as e:
    assert False

Trigger mock payment for UPI payment link (Sandbox only)

try:
    credit_response = dl.trigger_mock_payment(
        float(bill_amount) / 100, link.payment_link.upi_id, link.platform_bill_id
    )
except SetuAPIException as e:
    assert False

Mock Settlement

try:
    dl.trigger_mock_settlement([credit_response.utr])
except SetuAPIException as e:
    assert False

Expire bill payment

try:
    dl.expire_payment_link(link.platform_bill_id)
except SetuAPIException as e:
    assert False

Initiate Refund

try:
    batch_initiate_refund_response = dl.initiate_batch_refund(
        refunds=[
            RefundRequestItem(
                identifier=link.platform_bill_id,
                identifierType="BILL_ID",
                refundType="FULL",
            ),
        ],
    )
    assert batch_initiate_refund_response.refunds[0].status == "Pending"
except SetuAPIException as e:
    assert False

Get refund batch status

try:
    refund_batch_status_response = dl.get_batch_refund_status(batch_initiate_refund_response.batch_id)
    assert refund_batch_status_response.refunds[0].bill_id == link.platform_bill_id
except SetuAPIException as e:
    assert False

Get individual refund status

try:
    refund_status_response = dl.get_refund_status(batch_initiate_refund_response.refunds[0].id)
    assert refund_status_response.bill_id == link.platform_bill_id
except SetuAPIException as e:
    assert False

Contributing

Have a look through existing Issues and Pull Requests that you could help with. If you'd like to request a feature or report a bug, please create a GitHub Issue using the template provided.

See contribution guide →

Credits

This package was created with Cookiecutter and the waynerv/cookiecutter-pypackage project template.

License

MIT. Have at it.

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

setu-2.1.0.tar.gz (12.7 kB view hashes)

Uploaded Source

Built Distribution

setu-2.1.0-py3-none-any.whl (11.7 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page