feat(pay): 增加支付状态paid 已支付

This commit is contained in:
xingc
2025-05-12 12:01:44 +08:00
parent 8df69dff9c
commit 56c2a8aedb
8 changed files with 16 additions and 9 deletions

View File

@@ -74,4 +74,5 @@ class OrderStatusType(enum.Enum):
FAIL = 'fail'
OK = 'ok'
WAIT_PAYMENT = 'wait_payment'
PAID = 'paid'
CANCEL = 'cancel'

View File

@@ -244,10 +244,10 @@ class Order(BaseModel, DateModel):
total_fee: Mapped[int] = mapped_column(Integer, nullable=True, comment='发起的总金额,单位为分')
notify_total_fee: Mapped[int] = mapped_column(Integer, nullable=True, comment='回调成功支付的总金额,单位为分')
pay_url: Mapped[str] = mapped_column(String(255), nullable=True, comment='支付地址')
status: Mapped[str] = mapped_column(
status: Mapped[base_schema.OrderStatusType] = mapped_column(
Enum(base_schema.OrderStatusType, inherit_schema=True),
server_default=base_schema.OrderStatusType.INIT.value,
comment='订单状态init初始化 fail失败 ok完成 wait payment待支付 cancel. 取消'
comment='订单状态init初始化 fail失败 ok完成 wait payment待支付 paid已支付 cancel. 取消'
)
ip_address: Mapped[str] = mapped_column(String(255), nullable=True, comment='操作ip')

View File

@@ -57,7 +57,7 @@ async def get_current_user(
if user_id is None:
raise HTTPException(status_code=status.HTTP_401_UNAUTHORIZED, detail="Invalid token")
keyname = generate_keyname(f'login_cache', use_today=True)
keyname = generate_keyname('login_cache', use_today=True)
user_str = await redis_conn.hget(keyname, user_id)
if user_str is None:
user_model = await CRUD(db_session, User).get(filters={'user_id': user_id})

View File

@@ -7,12 +7,10 @@
import logging
from datetime import timedelta, datetime
from fastapi import Depends
from sqlalchemy.ext.asyncio import AsyncSession
from core.base.schema import ProductCategory, ProductAction, OrderStatusType
from core.db.crud import CRUD
from core.db.engine import get_async_session
from core.db.models import User, Order, Product, PointsTransaction
logger = logging.getLogger(__name__)
@@ -54,6 +52,13 @@ async def actions_after_payment(
)
await actions_handler(db_crud, gift_product, user)
record = {
'order_id': notify_params['out_trade_no'],
'transaction_id': notify_params['transaction_id'],
'status': OrderStatusType.OK,
}
await db_crud.update(data=record, filters={'order_id': record['order_id']})
except Exception as e:
logger.error(f'Payment Actions Exception occurred -> {e}')
logger.exception(e)

View File

@@ -126,7 +126,7 @@ async def wechat_notify(
if params['return_code'] == 'SUCCESS' and params['result_code'] == 'SUCCESS':
record.update({
'notify_total_fee': params['total_fee'],
'status': base_schema.OrderStatusType.OK
'status': base_schema.OrderStatusType.PAID
})
result = {'status': 200, 'message': 'OK'}
background_tasks.add_task(actions_after_payment, notify_params=params, db_session=db_session)