Skip to content

MainaKamau92/JengaAPIPythonWrapper

Repository files navigation

Pytest CI codecov Maintainability

JengaAPIPythonWrapper

A simple python wrapper around the JengaAPI from Equity Bank

Setup

Installation

pip install python-jengaapi

A sample of the .env variables required include:

MERCHANT_CODE=1234567
CONSUMER_SECRET=XXXXXXXXXXXXX
API_KEY=123XXX222
ACCOUNT_NAME=John Doe
ACCOUNT_NUMBER=12345678
CURRENCY_CODE=KES
COUNTRY_CODE=KE
FOREIGN_CURRENCY_CODE=USD
PRIVATE_KEY_PATH=path_to_privatekey.pem

Authorization Service

Fetch Authorization token

# script.py
from jengaapi.configs.config import app_config
from jengaapi.services.authorization_service import AuthorizationService

uat_config = app_config.get('uat')

# Get the environment variables
MERCHANT_CODE = uat_config.MERCHANT_CODE
CONSUMER_SECRET = uat_config.CONSUMER_SECRET
COUNTRY_CODE = os.getenv('COUNTRY_CODE')
ACCOUNT_NUMBER = os.getenv('ACCOUNT_NUMBER')


auth = AuthorizationService(config=uat_config)
auth_token = auth.auth_token
print(auth_token)
$ python script.py
Bearer eexxxxx.xx.xxxxxx

Account Service

Fetch Account Balance

account_service = AccountServices(config=uat_config)
# Get account balance
signature = auth.signature((COUNTRY_CODE, ACCOUNT_NO))
account_balance = account_service.account_balance(signature, auth_token, COUNTRY_CODE, ACCOUNT_NO)
print(account_balance)
$ python script.py
{
   "status":true,
   "code":0,
   "message":"success",
   "data":{
      "balances":[
         {
            "amount":"485115080.54",
            "type":"Available"
         },
         {
            "amount":"485115080.54",
            "type":"Current"
         }
      ],
      "currency":"KES"
   }
}

Fetch Account Mini Statement

account_service = AccountServices(config=uat_config)
signature = auth.signature((COUNTRY_CODE, ACCOUNT_NO))
account_mini_statement = account_service.account_mini_statement(signature, auth_token, COUNTRY_CODE, ACCOUNT_NO)
print(account_mini_statement)
{
   "status":true,
   "code":0,
   "message":"success",
   "data":{
      "balance":484837600.0,
      "currency":"KES",
      "accountNumber":"1450160649886",
      "transactions":[
         {
            "date":"2023-01-12T00:00:00.000",
            "amount":"1",
            "description":"JENGA CHARGE CREDIT 673579628084879",
            "chequeNumber":"None",
            "type":"Credit"
         },
         {
            "date":"2023-01-12T00:00:00.000",
            "amount":"1",
            "description":"JENGA CHARGE DEBIT 673579628084879",
            "chequeNumber":"None",
            "type":"Debit"
         },
         {
            "date":"2023-01-12T00:00:00.000",
            "amount":"1",
            "description":"JENGA CHARGE CREDIT 673579623845546",
            "chequeNumber":"None",
            "type":"Credit"
         },
         {
            "date":"2023-01-12T00:00:00.000",
            "amount":"1",
            "description":"REV-(673540528125447)JENGA CHARGE DEBIT 6735405275",
            "chequeNumber":"None",
            "type":"Debit"
         }
      ]
   }
}

Fetch Account Opening and Closing Balance

ep_signature = auth.signature((ACCOUNT_NO, COUNTRY_CODE, "2023-01-01"))
payload = dict(
    countryCode=COUNTRY_CODE,
    accountId=ACCOUNT_NO,
    date="2023-01-01",
)
opening_closing = account_service.opening_closing_account_balance(ep_signature, auth_token, **payload)
print(opening_closing)
{
   "status":true,
   "code":0,
   "message":"success",
   "data":{
      "balances":[
         {
            "amount":"0",
            "type":"Closing Balance"
         },
         {
            "amount":"0",
            "type":"Opening Balance"
         }
      ]
   }
}

Send Money Service

Send within Equity

send_money_service = SendMoneyService(config=uat_config)
payload = {
    "source": {
        "countryCode": COUNTRY_CODE,
        "name": "CATHERINE MURANDITSI MUKABWA",
        "accountNumber": ACCOUNT_NO
    },
    "destination": {
        "type": "bank",
        "countryCode": "KE",
        "name": "Tom Doe",
        "accountNumber": "0250163591202"
    },
    "transfer": {
        "type": "InternalFundsTransfer",
        "amount": "1000.00",
        "currencyCode": "KES",
        "reference": "692494625798",
        "date": "2023-08-18",
        "description": "some remarks here"
    }
}
ep_signature = auth.signature((ACCOUNT_NO,"1000.00", "KES", "692494625798"))
send_money_within_equity = send_money_service.send_within_equity(ep_signature, auth_token, **payload)
print(send_money_within_equity)
{
  "status": true,
  "code": 0,
  "message": "success",
  "data": {
    "transactionId": "54154",
    "status": "SUCCESS"
  }
}

Send to mobile wallets

payload = {
    "source": {
        "countryCode": "KE",
        "name": "CATHERINE MURANDITSI MUKABWA",
        "accountNumber": ACCOUNT_NO
    },
    "destination": {
        "type": "mobile",
        "countryCode": "KE",
        "name": "A N.Other",
        "mobileNumber": "0722123456",
        "walletName": "Mpesa"
    },
    "transfer": {
        "type": "MobileWallet",
        "amount": "1000",
        "currencyCode": "KES",
        "date": "2023-01-13",
        "description": "some remarks here"
    }
}
ep_signature = auth.signature(("1000", "KES", "692494625799", ACCOUNT_NO))
send_money_within_equity = send_money_service.send_to_mobile_wallets(ep_signature, auth_token, **payload)
print(send_money_within_equity)
{
    "status": true,
    "code": 0,
    "message": "success",
    "data": {
      "transactionId": "",
      "status": "SUCCESS"
    }
}

Jenga API docs

For official documentatio the Equity bank api refer here