(20241217) Payment callback ready for Safaricom M-Pesa Express.
This commit is contained in:
+21
-11
@@ -157,6 +157,12 @@ class PaymentEvent(BaseModel):
|
||||
frozen = False
|
||||
)
|
||||
|
||||
message: str | None = Field(
|
||||
description = "a hint about what happened at this stage",
|
||||
frozen = True,
|
||||
default = None
|
||||
)
|
||||
|
||||
initByPG: bool = Field(
|
||||
description = "to figure out whether the payment gateway initiated this event or we did",
|
||||
frozen = True
|
||||
@@ -258,10 +264,15 @@ class CorePaymentModel(BaseModel):
|
||||
tags: List[Any] = Field(
|
||||
description = "a list of keywords to apply to this file/dir to filter it later",
|
||||
frozen = False,
|
||||
default = [],
|
||||
examples = ["renewal", "subscription"]
|
||||
)
|
||||
|
||||
serviceType: Literal["paymentGateway"] = Field(
|
||||
description = "to identify the kind of service",
|
||||
frozen = True,
|
||||
default = None
|
||||
)
|
||||
|
||||
client: Literal["razorpay", "safaricomMPesaExpress"] = Field(
|
||||
description = "the third-part client that was used",
|
||||
frozen = True
|
||||
@@ -275,8 +286,7 @@ class CorePaymentModel(BaseModel):
|
||||
|
||||
events: List[PaymentEvent] = Field(
|
||||
description = "an array of all the events that happened in the process of this payment",
|
||||
frozen = False,
|
||||
default = []
|
||||
frozen = False
|
||||
)
|
||||
|
||||
# ┏┓ ┏•
|
||||
@@ -299,9 +309,9 @@ class CorePaymentModel(BaseModel):
|
||||
@property
|
||||
def full(self):
|
||||
payment_json = {
|
||||
"paymentId": str(self.messageId),
|
||||
"user": self.user,
|
||||
"customer": self.customer,
|
||||
"paymentId": str(self.paymentId),
|
||||
"user": self.user.model_dump(),
|
||||
"customer": self.customer.model_dump(),
|
||||
"ts": self.ts.isoformat(),
|
||||
"lastEventTs": self.lastEventTs,
|
||||
"lastPaymentStatus": self.lastPaymentStatus,
|
||||
@@ -324,9 +334,9 @@ class CorePaymentModel(BaseModel):
|
||||
@property
|
||||
def preview(self):
|
||||
return {
|
||||
"paymentId": str(self.messageId),
|
||||
"user": self.user,
|
||||
"customer": self.customer,
|
||||
"paymentId": str(self.paymentId),
|
||||
"user": self.user.model_dump(),
|
||||
"customer": self.customer.model_dump(),
|
||||
"ts": self.ts.isoformat(),
|
||||
"lastEventTs": self.lastEventTs,
|
||||
"lastPaymentStatus": self.lastPaymentStatus,
|
||||
@@ -360,8 +370,8 @@ class CorePaymentModel(BaseModel):
|
||||
if currency is None: raise ValueError("invalid currency code, please use iso 4217 standard")
|
||||
return value
|
||||
|
||||
@field_validator("tags", mode = "before")
|
||||
def validate_tags(cls, value):
|
||||
@field_validator("tags", "events", mode = "before")
|
||||
def validate_null_lists(cls, value):
|
||||
if value is None: value = []
|
||||
return value
|
||||
|
||||
|
||||
Reference in New Issue
Block a user