from typing import Annotated from fastapi import APIRouter, Depends from starlette.responses import JSONResponse from app.core.dependencies import db_getter from app.core.router_class import OperationLogRoute from app.common.response import ResponseSchema, SuccessResponse, ErrorResponse from app.core.apikey import TenantApiKeyAuth from app.plugin.module_payment.account import AccountService from app.plugin.module_payment.account.schema import AccountTransferSchema from app.api.v1.module_system.auth.schema import AuthSchema from sqlalchemy.ext.asyncio import AsyncSession from app.core.logger import log from app.plugin.module_payment.apikey.schema import ApiKeyPayload OpenapiRouter = APIRouter( route_class=OperationLogRoute, prefix="/openapi", tags=["开放接口"], ) @OpenapiRouter.post( "/account/transfer", summary="资金专户转账", description="从资金专户转账到支付宝账户/银行卡/资金专户", response_model=ResponseSchema[dict], ) async def openapi_transfer_controller( apikey: Annotated[ApiKeyPayload[AccountTransferSchema], Depends(TenantApiKeyAuth(AccountTransferSchema))], ) -> JSONResponse: """ 租户资金专户转账接口 支持通过API Key进行认证,适用于平台租户调用 """ auth = apikey.auth transfer_data = apikey.data if transfer_data is None: return ErrorResponse(msg="缺少必需参数") # 执行转账 result = await AccountService.transfer_service(auth=auth, data=transfer_data) log.info(f"租户资金专户转账发起成功: 企业: {transfer_data.enterprise_id}, 金额: {transfer_data.amount}") return SuccessResponse(data=result, msg="转账申请已提交")