(20241217) Payment message capture improved.
This commit is contained in:
@@ -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}'"
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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")
|
||||||
|
|||||||
Reference in New Issue
Block a user