diff --git a/core/routers/pay/routes.py b/core/routers/pay/routes.py index 3e7cfe9..70ff4da 100644 --- a/core/routers/pay/routes.py +++ b/core/routers/pay/routes.py @@ -15,7 +15,7 @@ from core.db.crud import CRUD from core.db.engine import get_async_session from core.db.models import Order from core.routers.auth.schema import LoginUser -from core.routers.auth.services import get_current_user +from core.routers.auth.services import get_current_user_form_http from core.utils.helper import generate_keyname, generate_order_number from core.wechat.api import wechat_pay_api @@ -26,6 +26,23 @@ logger = logging.getLogger(__name__) pay_router = APIRouter(prefix='/pay', tags=['支付模块']) +@pay_router.get( + '/order/check/{order_id}', + summary='获取订单状态', + response_model=base_schema.BaseResponse[schema.CheckOrderOut]) +async def check_order( + order_id: str, + login_user: LoginUser = Depends(get_current_user_form_http), + db_session: AsyncSession = Depends(get_async_session) +): + order = await CRUD(db_session, Order).get(filters={ + 'order_id': order_id, 'user_id': login_user.user_id + }) + if order is None: + raise HTTPException(status.HTTP_404_NOT_FOUND, detail='订单不存在') + return {'data': order} + + @pay_router.post( '/order/create', summary='订单创建', @@ -34,7 +51,7 @@ pay_router = APIRouter(prefix='/pay', tags=['支付模块']) async def create_order( request: Request, payload: schema.CreateOrderIn, - login_user: LoginUser = Depends(get_current_user), + login_user: LoginUser = Depends(get_current_user_form_http), db_session: AsyncSession = Depends(get_async_session), ): client_ip = ( @@ -44,7 +61,7 @@ async def create_order( ) out_trade_no = generate_order_number() prepay_id = wechat_pay_api.create_unified_order( - **payload.dict(exclude_none=True), + **payload.model_dump(exclude_none=True), out_trade_no=out_trade_no, spbill_create_ip=client_ip ) diff --git a/core/routers/pay/schema.py b/core/routers/pay/schema.py index 27473f0..fd7aafb 100644 --- a/core/routers/pay/schema.py +++ b/core/routers/pay/schema.py @@ -6,6 +6,8 @@ # @Desc : from pydantic import BaseModel +from core.base.schema import OrderStatusType + class CreateOrderIn(BaseModel): product_id: int @@ -26,3 +28,10 @@ class PaymentParamsOut(BaseModel): class CreateOrderOut(BaseModel): payment_params: PaymentParamsOut order_id: str + + +class CheckOrderOut(BaseModel): + order_id: str + status: OrderStatusType + user_id: int + product_id: int