from datetime import datetime from enum import Enum from pydantic import BaseModel, Field, field_validator from typing import Optional, NamedTuple AlipayResponseCode = NamedTuple("AlipayResponseCode", [("code", str), ("msg", str)]) class AlipayResponseCodeEnum(Enum): """支付宝响应码枚举""" SUCCESS = AlipayResponseCode("10000", "接口调用成功") SERVICE_UNAVAILABLE = AlipayResponseCode("20000", "服务不可用") AUTH_INSUFFICIENT = AlipayResponseCode("20001", "授权权限不足") MISSING_REQUIRED_PARAM = AlipayResponseCode("40001", "缺少必选参数") INVALID_PARAM = AlipayResponseCode("40002", "非法的参数") CONDITION_ABNORMAL = AlipayResponseCode("40003", "条件异常") SERVICE_NOT_EXIST = AlipayResponseCode("40004", "服务不存在") METHOD_NOT_SUPPORTED = AlipayResponseCode("40005", "不支持请求方式") PERMISSION_DENIED = AlipayResponseCode("40006", "权限不足") @classmethod def from_code(cls, code: str) -> AlipayResponseCode: for item in cls: if item.value.code == code: return item.value return AlipayResponseCode(code, "未知错误") # class AlipayResponse(BaseModel): # """支付宝响应基础模型""" # code: str = Field(..., description="网关返回码,10000表示成功") # msg: str = Field(..., description="网关返回码描述") # sub_code: Optional[str] = Field(None, description="业务错误码,业务失败时返回") # sub_msg: Optional[str] = Field(None, description="业务错误描述,业务失败时返回") # @property # def success(self) -> bool: # return self.code == AlipayResponseCodeEnum.SUCCESS.value.code # class AlipayCommerceEcEnterpriseRegisterInviteCreateResponse(AlipayResponse): # """邀请企业注册响应""" # pc_invite_url: Optional[str] = Field(None, description="企业注册/认证/签约三合一页面的链接地址") # expire_time: Optional[datetime] = Field(None, description="链接过期时间,格式:yyyy-MM-dd HH:mm:ss") # @field_validator("expire_time", mode="before") # @classmethod # def parse_expire_time(cls, v: Optional[str]) -> Optional[datetime]: # if v is None: # return None # return datetime.strptime(v, "%Y-%m-%d %H:%M:%S")