Skip to main content

perform hot-recharge services with hot-recharge library programmatically

Project description

Hot Recharge

perform hot-recharge services with hot-recharge python library programmaticaly

  • ℹ Not an official hot-recharge python library

Library installation

$ pip install hot-recharge

or update with

$ pip install -U hot-recharge

CHANGELOG

please see full changelog here

Examples

Check examples available here

Sign Up

  • needs a hot recharge co-operate account or contact hot-recharge for proper account
  • sign up

Authentication Header

Use the new HRAuthConfig (from v2.x.x) class to pass auth header keys

import hotrecharge

# create config class
config = hotrecharge.HRAuthConfig(
    access_code='acc-email', 
    access_password='acc-pwd',
    reference='random-ref'
)

# pass config object to api constructor
api = hotrecharge.HotRecharge(config)

New in v3.x

You can now return response models rather than dict

  • model returned is auto-generated by Munch library
  • To enable it, flag the return_model=True, defaults to False
# <..>

try:
    # flag return_model -> True in order to return model, (Munch object)
    api = hotrecharge.HotRecharge(config, return_model=True)    

    # lets get available EVDs (electronic vouchers) as models
    evds = api.getEVDs()

    # you can now do
    print(evds.AgentReference)
    print(evds.ReplyMsg)

    x = 0

    # can loop around available evds in stock
    for evd_pin in evds.InStock:
        print(f'------- EVD Pin [{x}]-------')

        print('EVD Brand Name:    ', evd_pin.BrandName)
        print('EVD Pin Value:     ', evd_pin.PinValue)
        print('EVD Current Stock: ', evd_pin.Stock)
        
        print('-----------------------------')

        x++

# can also catch api exceptions
# HotRechargeException is the base class for all exceptions
# check example folder for more
except hotrecharge.HotRechargeException as ex:
    print(f"[HOTRECHARGE ERROR] There was a problem: {ex}")

Performing requests

  • this shows how to do basic get requests for different services
import hotrecharge
import pprint

try:
    # get wallet balance
    wallet_bal_response = api.walletBalance()

    # get data bundles
    data_bundles_resp = api.getDataBundles()

    print("Wallet Balance: ")
    pprint.pprint(wallet_bal_response)

    print("Data Bundles Balance: ")
    pprint.pprint(data_bundles_resp)

except Exception as ex:
    print(f"There was a problem: {ex}")

Recharge

Recharge data bundles

  • use bundle product code
  • an optional customer sms can be send together upon request
  • Place holders used include
%AMOUNT% 	    $XXX.XX
%COMPANYNAME%	As Defined by Customer on the website www.hot.co.zw
%ACCESSNAME%	Defined by Customer on website – Teller or Trusted User or branch name
%BUNDLE%	    Name of the Data Bundle
try:
    # option message to send to user
    customer_sms =  " Amount of %AMOUNT% for data %BUNDLE% recharged! " \
                    " %ACCESSNAME%. The best %COMPANYNAME%!"

    # need to update reference manually, if `use_random_ref` is set to False
    api.updateReference('<new-random-string>')

    response = api.dataBundleRecharge(product_code="<bundle-product-code>", number="077xxxxxxx", mesg=customer_sms)

    pprint(response)

except Exception as ex:
    print(f"There was a problem: {ex}")

Recharge pinless

try:
    customer_sms = "Recharge of %AMOUNT% successful" \
                   "Initial balance $%INITIALBALANCE%" \
                   "Final Balance $%FINALBALANCE%" \
                   "%COMPANYNAME%"

    response = api.rechargePinless(amount=3.5, number="077xxxxxxx", mesg=customer_sms)

    print(response)

except Exception as ex:
    print(f"There was a problem: {ex}")

Zesa Recharge

custom Message place holders to use and their representation on end user for zesa transactions:

  • %AMOUNT% - $xxx.xx
  • %KWH% - Unit in Kilowatt Hours(Kwh)
  • %ACOUNTNAME% - Account holdername of meter number
  • %METERNUMBER% - meter number
  • %COMPANYNAME% - as defined by Customer on the website www.hot.co.zw

Note on Zesa Recharges

Requirements

  • A method for Purchasing ZESA Tokens
  • It is a ZESA requirement that any purchase must be verified. As such please ensure that you use the checkZesaCustomer() method
    try:
        customer = api.checkZesaCustomer(meterNumber)

        print(customer)

        # prompt user to confirm their details first before performing a recharge

    except Exception as err:
        print('[ERROR] Error getting zesa customer: ', err)
  • and prompt the customer to confirm the details before calling this method (api.rechargeZesa(...)).
  • There is a new transaction state specifically for ZESA that is Pending verification indicated by reply code 4. Transactions in this state can result in successful transactions after a period of time once ZESA complete transaction.
  • You must call Query ZESA method TBD periodically until a permanent resolution of the transaction occurs. This polling of a pending transaction should not exceed more that 4 request a minute. Resending of transactions that have not yet failed can result in the duplication of transaction and lose of funds.
  • Please note ZESA does not allow refunds so the cost of any errors cannot be recovered.

Query transaction

  • You can now query a previous transaction by its agentReference for reconciliation.
  • It is reccommended to query within the last 30 days of the transaction
try:
    response = api.rechargePinless(amount=3.5, number="077xxxxxxx")

    # save agentReference to query for reconciliation
    prevTransactionAgentReference = response.get("agentReference")

    result = api.queryTransactionReference(prevTransactionAgentReference)

    print(response, result)

except Exception as ex:
    print(f"There was a problem: {ex}")

Note on Exceptions

  • HotRechargeException is the base class for all exceptions
  • All exceptions are subclasses of HotRechargeException
  • All exceptions have a message property that contains the error message
  • All exceptions have a response property that contains the response object(which is a Munch). In some cases this will be None, so dont get mad if you see None😁.
  • One of the best use cases of the response property is when a PendingZesaTransaction exception gets raised. you can save rechargeID, then you can use it later to query the transaction status.

Support 🤿

  • This is not an official hot-recharge python library
  • I initiated, develop and maintain this library on my own spare time
  • A little support can go a long way, i would appreciate 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

hot-recharge-4.0.0.tar.gz (10.8 kB view details)

Uploaded Source

Built Distribution

hot_recharge-4.0.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

Details for the file hot-recharge-4.0.0.tar.gz.

File metadata

  • Download URL: hot-recharge-4.0.0.tar.gz
  • Upload date:
  • Size: 10.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.11

File hashes

Hashes for hot-recharge-4.0.0.tar.gz
Algorithm Hash digest
SHA256 6c9128542861172b9871442ec91db0776fa6232bde59766ffe4bd2e51c6a3f31
MD5 08c086ec52ba4b71e98b2f153b456bfe
BLAKE2b-256 86f194dbe322d245edd4cdc078dc629f6c78cfd6a60ec56fcbb5dfc18994188f

See more details on using hashes here.

File details

Details for the file hot_recharge-4.0.0-py3-none-any.whl.

File metadata

  • Download URL: hot_recharge-4.0.0-py3-none-any.whl
  • Upload date:
  • Size: 12.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.9 tqdm/4.63.0 importlib-metadata/4.11.3 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.11

File hashes

Hashes for hot_recharge-4.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 ea3cd55120ded6c82cd6fd78bc4662cae7e72c5f3ae4f8481241005d0040e499
MD5 0b0c2ac5b8544c247db0c07ab365a80f
BLAKE2b-256 ac9509fe01c414507259faca3ca64d342a5c041e1af02b26741d538447dc2f81

See more details on using hashes here.

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