(20241217) Payment message capture improved.

This commit is contained in:
2024-12-17 13:58:50 +05:30
parent 9de9542fda
commit 8b39393ed3
5 changed files with 23 additions and 12 deletions
@@ -198,11 +198,12 @@ async def safaricom_m_pesa_express_callback(
# Figure out which of the above codes is relevant to you:
pg_reference_id = inbound_data["Body"]["stkCallback"]["CheckoutRequestID"]
pg_result_code = int(inbound_data["Body"]["stkCallback"]["ResultCode"])
pg_result_desc = inbound_data["Body"]["stkCallback"]["ResultDesc"]
relevant_code = code_map.get(
pg_result_code,
{
"status": "unknown",
"message": f"Unknown code '{pg_result_code}' from the payment gateway."
"message": f"Unknown code '{pg_result_code}' from the payment gateway. PG: '{pg_result_desc}'"
}
)
+8 -6
View File
@@ -231,6 +231,7 @@ class PaymentController:
payment_id = payment_id,
event = PaymentEvent(
paymentStatus = "initiated" if client_response.success else "initFailed",
message = f"PG: {client_response.message}",
initByPG = False,
httpCode = client_response.httpCode,
headers = await client_response.get_headers(),
@@ -241,12 +242,12 @@ class PaymentController:
# Done here:
result.success = client_response.success and event_note_success
result.message = "; ".join([
"payment requested successfully" if client_response.success
else f"payment request failed (PG: {client_response.message})",
"event noted successfully" if event_note_success
else "event noting failed",
])
result.message = " ".join([
"Payment requested successfully." if client_response.success
else f"Payment request FAILED (PG: '{client_response.message}').",
" " if event_note_success
else "Event noting FAILED.",
]).strip()
return result
async def request_payment(
@@ -272,6 +273,7 @@ class PaymentController:
payerNo = payment_request.payerNo,
email = payment_request.email
),
lastEventMessage = "Payment Request Queued",
lastPaymentStatus = "queued",
tokenId = auth_token.authTokenId,
amount = payment_request.amount,
+5 -3
View File
@@ -317,8 +317,9 @@ class CorePaymentController(BaseModel):
"events": event.model_dump()
},
"$set": {
"lastEventTs": date_time.get_current_ist_date_time(as_string = False),
"lastPaymentStatus": event.paymentStatus
"lastEventTs": event.eventTs,
"lastEventMessage": event.message,
"lastPaymentStatus": event.paymentStatus,
}
}
if client_reference_id: update_json["$set"]["clientPaymentReferenceId"] = client_reference_id
@@ -354,7 +355,8 @@ class CorePaymentController(BaseModel):
"events": event.model_dump()
},
"$set": {
"lastEventTs": date_time.get_current_ist_date_time(as_string = False),
"lastEventTs": event.eventTs,
"lastEventMessage": event.message,
"lastPaymentStatus": event.paymentStatus
}
}
+6
View File
@@ -235,6 +235,12 @@ class CorePaymentModel(BaseModel):
default = None
)
lastEventMessage: str | None = Field(
description = "a short, human-readable message",
frozen = False,
default = None
)
lastPaymentStatus: str = Field(
description = "the status of the payment request to see what stage of the process we are in",
frozen = False
@@ -346,12 +346,12 @@ class SafaricomMPesaExpress:
)
# If the call failed:
if api_response.httpCode == 400:
if api_response.httpCode not in [200]:
api_json = await api_response.get_json()
api_response.message = f"{api_json['errorCode']} -> {api_json['errorMessage']}"
# If the call failed:
if api_response.httpCode in [200]:
else:
api_json = await api_response.get_json()
success = True if str(api_json.get("ResponseCode")) == "0" else False
api_response.message = api_json.get("ResponseDescription", "N/A")