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