| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- from typing import Annotated, Optional
- from fastapi import APIRouter, Depends
- from starlette.responses import JSONResponse
- from app.core.dependencies import AuthPermission
- from app.core.router_class import OperationLogRoute
- from app.common.response import ResponseSchema, SuccessResponse, ErrorResponse
- from app.core.apikey import TenantApiKeyAuth
- from app.api.v1.module_system.auth.schema import AuthSchema
- from app.plugin.module_payment.account.service import AccountService
- from app.plugin.module_payment.apikey.schema import ApiKeyPayload
- from app.plugin.module_payment.openapi.service import OpenConfService, OpenTransferService
- from app.plugin.module_payment.openapi.schema import OpenBalanceQuerySchema, OpenConfOutSchema, OpenConfUpdateSchema, \
- OpenTransferSchema, OpenTransferOutSchema, OpenTransferQuerySchema
- OpenapiRouter = APIRouter(
- route_class=OperationLogRoute,
- prefix="/openapi",
- tags=["开放接口"],
- )
- @OpenapiRouter.post(
- "/account/transfer",
- summary="资金专户转账",
- description="从资金专户转账到支付宝账户/银行卡/资金专户",
- response_model=ResponseSchema[OpenTransferOutSchema],
- )
- async def open_transfer_controller(
- apikey: Annotated[ApiKeyPayload[OpenTransferSchema], Depends(TenantApiKeyAuth(OpenTransferSchema))],
- ) -> JSONResponse:
- """
- 租户资金专户转账接口
- 支持通过API Key进行认证,适用于平台租户调用
- """
- auth = apikey.auth
- transfer_data = apikey.data
- if transfer_data is None:
- return ErrorResponse(msg="缺少必需参数")
- transfer_data.api_key = apikey.api_key
- result = await OpenTransferService.open_transfer_service(auth=auth, data=transfer_data)
- msg = "转账成功" if result.status == "SUCCESS" else "转账失败" if result.status == "FAIL" else "转账申请已提交"
- return SuccessResponse(data=result, msg=msg)
- @OpenapiRouter.post(
- "/account/transfer/query",
- summary="查询转账",
- description="查询转账详情",
- )
- async def open_transfer_query_controller(
- apikey: Annotated[ApiKeyPayload[OpenTransferQuerySchema], Depends(TenantApiKeyAuth(OpenTransferQuerySchema))],
- ) -> JSONResponse:
- auth = apikey.auth
- query_data = apikey.data
- if query_data is None:
- return ErrorResponse(msg="缺少必需参数")
- result = await OpenTransferService.open_query_service(auth=auth, query=query_data)
- return SuccessResponse(data=result, msg="查询成功")
- # =====================================================================
- @OpenapiRouter.get(
- "/conf",
- summary="查询开放配置",
- description="查询当前企业的开放接口配置",
- response_model=ResponseSchema[OpenConfOutSchema],
- )
- async def get_open_conf_controller(
- auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:conf:query"]))],
- ) -> JSONResponse:
- """
- 查询开放配置接口
-
- 获取当前企业的支付宝开放接口配置信息
- """
- result = await OpenConfService.get_conf_service(auth=auth)
- return SuccessResponse(data=result, msg="查询成功")
- @OpenapiRouter.post(
- "/conf",
- summary="创建/更新开放配置",
- description="创建或更新当前企业的开放接口配置(前端只允许配置回调地址)",
- response_model=ResponseSchema[OpenConfOutSchema],
- )
- async def save_open_conf_controller(
- data: OpenConfUpdateSchema,
- auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:conf:update"]))],
- ) -> JSONResponse:
- """
- 创建/更新开放配置接口
-
- 如果配置已存在则更新,不存在则创建(仅更新回调地址)
- """
- result = await OpenConfService.save_conf_service(auth=auth, data=data)
- return SuccessResponse(data=result, msg="配置更新成功")
- @OpenapiRouter.post(
- "/account/balance/query",
- summary="查询资金专户",
- description="根据企业ID查询资金专户(调用支付宝接口)",
- )
- async def open_balance_query_controller(
- apikey: Annotated[ApiKeyPayload[OpenBalanceQuerySchema], Depends(TenantApiKeyAuth(OpenBalanceQuerySchema))],
- ) -> JSONResponse:
- auth = apikey.auth
- query_data = apikey.data
- if query_data is None:
- return ErrorResponse(msg="缺少必需参数")
- result = await AccountService.query_account_service(auth=auth, data=query_data)
- return SuccessResponse(data=result, msg="查询成功")
|