Callbacks¶
parse_stk_callback ¶
Parse an STK Push callback payload from M-Pesa.
Call this inside your webhook handler when M-Pesa POSTs a payment notification to your callback URL.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
body
|
dict[str, Any]
|
The full JSON payload received from M-Pesa. Must contain
the |
required |
Returns:
| Type | Description |
|---|---|
STKPushStatus
|
An |
STKPushStatus
|
Check |
Raises:
| Type | Description |
|---|---|
APIError
|
If the callback payload is malformed or missing required fields. |
Example
.. code-block:: python
@app.post("/mpesa/callback")
async def handle_callback(request):
body = await request.json()
result = parse_stk_callback(body)
if result.success:
print(f"✅ Paid KES {result.amount} — {result.receipt}")
else:
print(f"❌ Failed: {result.result_description}")
return {"ResultCode": 0, "ResultDesc": "Success"}
Source code in safcom/callbacks.py
extract_payment_info ¶
Extract a clean payment summary from a callback result.
Useful for logging, database storage, or API responses.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
result
|
STKPushStatus
|
An |
required |
Returns:
| Type | Description |
|---|---|
dict[str, Any]
|
A dictionary with cleaned-up payment info. |
Example
info = extract_payment_info(status) info["paid"] True info["receipt"] 'NLJ91HA6ES'
Source code in safcom/callbacks.py
Response Models¶
STKPushResponse¶
STKPushResponse
dataclass
¶
STKPushStatus¶
STKPushStatus
dataclass
¶
Status of a completed STK push transaction.
Source code in safcom/models.py
Attributes¶
Methods:¶
__init__ ¶
__init__(
response_code: str,
response_description: str,
merchant_request_id: str,
checkout_request_id: str,
result_code: str | None = None,
result_description: str | None = None,
amount: float | None = None,
receipt: str | None = None,
transaction_date: datetime | None = None,
phone: str | None = None,
raw: dict = dict(),
) -> None