FastAPI Middle Office Ware
This is a FastAPI library based on the Safaricom MPESA daraja API.
FastAPI is a modern, fast (high-performance) web framework for building APIs with Python 3.7+ based on standard Python type hints.
For the M-Pesa client, this library uses the python asynchronous client called aiohttp. aiohttp is a versatile asynchronous HTTP client/server framework for Python that supports both client and server-side applications.
MPESA Daraja API documentation can be found at https://developer.safaricom.co.ke
The technology stack used to create the backend of this application is as follows:
- Framework
- FastAPI and Starlette
- ASGI Server
- Uvicorn and Gunicorn
- Containerization
- Docker
- Database
- tbc
- Authentication
- Bcrypt
- Passlib
- JWT Tokens with Pyjwt
- Testing
- Pytest
- Development
- PyCharm
Please create a .env file in the app folder with your configuration:
# M-Pesa Settings:
C2B_CONSUMER_KEY="xxx"
C2B_CONSUMER_SECRET="xxx"
LIPA_NA_MPESA_CONSUMER_KEY="xx"
LIPA_NA_MPESA_CONSUMER_SECRET="xxx"
LIPA_NA_MPESA_PASSKEY="xxx"
C2B_CONFIRMATION_URL=""
C2B_VALIDATION_URL=""
LIPA_NA_MPESA_CALLBACK_URL="xxxx"
LIPA_NA_MPESA_BUSINESS_SHORT_CODE="xxx"
Project structure:
├── docker-compose.yml
├── Dockerfile
├── requirements.txt
├── app
├── main.py
├── __init__.py
version: '3.8'
services:
api:
build:
context: .
dockerfile: Dockerfile
container_name: fastapi-daraja
command: uvicorn app.main:app --reload --workers 1 --host 0.0.0.0 --port 8000
env_file:
- .env
ports:
- "8000:8000"
restart: "always"
docker-compose up -d --build
Listing containers must show one container running and the port mapping as below:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7087a6e79610 fastapi-daraja "/start.sh" About a minute ago Up About a minute 80/tcp, 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp fastapi-daraja
After the application starts, navigate to http://localhost:8000
in your web browser and you should see the swagger ui.