Skip to content

davidmuraya/fastapi-daraja

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

M-PESA Daraja APIs with FastAPI

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

Configuration

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"

Python/FastAPI Daraja App

Project structure:

├── docker-compose.yml ├── Dockerfile ├── requirements.txt ├── app    ├── main.py    ├── __init__.py 

docker-compose.yml

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" 

Deploy with docker compose

docker-compose up -d --build

Expected result

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.