controller.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from typing import Annotated, Optional
  2. from fastapi import APIRouter, Depends
  3. from starlette.responses import JSONResponse
  4. from app.core.dependencies import AuthPermission
  5. from app.core.router_class import OperationLogRoute
  6. from app.common.response import ResponseSchema, SuccessResponse, ErrorResponse
  7. from app.core.apikey import TenantApiKeyAuth
  8. from app.api.v1.module_system.auth.schema import AuthSchema
  9. from app.plugin.module_payment.apikey.schema import ApiKeyPayload
  10. from app.plugin.module_payment.openapi.service import OpenConfService, OpenTransferService
  11. from app.plugin.module_payment.openapi.schema import OpenConfOutSchema, OpenConfUpdateSchema, OpenTransferSchema, \
  12. OpenTransferOutSchema, OpenTransferQuerySchema
  13. OpenapiRouter = APIRouter(
  14. route_class=OperationLogRoute,
  15. prefix="/openapi",
  16. tags=["开放接口"],
  17. )
  18. @OpenapiRouter.post(
  19. "/account/transfer",
  20. summary="资金专户转账",
  21. description="从资金专户转账到支付宝账户/银行卡/资金专户",
  22. response_model=ResponseSchema[OpenTransferOutSchema],
  23. )
  24. async def open_transfer_controller(
  25. apikey: Annotated[ApiKeyPayload[OpenTransferSchema], Depends(TenantApiKeyAuth(OpenTransferSchema))],
  26. ) -> JSONResponse:
  27. """
  28. 租户资金专户转账接口
  29. 支持通过API Key进行认证,适用于平台租户调用
  30. """
  31. auth = apikey.auth
  32. transfer_data = apikey.data
  33. if transfer_data is None:
  34. return ErrorResponse(msg="缺少必需参数")
  35. result = await OpenTransferService.open_transfer_service(auth=auth, data=transfer_data)
  36. return SuccessResponse(data=result, msg="转账申请已提交")
  37. @OpenapiRouter.post(
  38. "/account/transfer/query",
  39. summary="查询转账",
  40. description="查询转账详情",
  41. )
  42. async def open_transfer_query_controller(
  43. apikey: Annotated[ApiKeyPayload[OpenTransferQuerySchema], Depends(TenantApiKeyAuth(OpenTransferQuerySchema))],
  44. ) -> JSONResponse:
  45. auth = apikey.auth
  46. query_data = apikey.data
  47. if query_data is None:
  48. return ErrorResponse(msg="缺少必需参数")
  49. result = await OpenTransferService.open_query_service(auth=auth, query=query_data)
  50. return SuccessResponse(data=result, msg="查询成功")
  51. # =====================================================================
  52. @OpenapiRouter.get(
  53. "/conf",
  54. summary="查询开放配置",
  55. description="查询当前企业的开放接口配置",
  56. response_model=ResponseSchema[OpenConfOutSchema],
  57. )
  58. async def get_open_conf_controller(
  59. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:conf:query"]))],
  60. ) -> JSONResponse:
  61. """
  62. 查询开放配置接口
  63. 获取当前企业的支付宝开放接口配置信息
  64. """
  65. result = await OpenConfService.get_conf_service(auth=auth)
  66. return SuccessResponse(data=result, msg="查询成功")
  67. @OpenapiRouter.post(
  68. "/conf",
  69. summary="创建/更新开放配置",
  70. description="创建或更新当前企业的开放接口配置(前端只允许配置回调地址)",
  71. response_model=ResponseSchema[OpenConfOutSchema],
  72. )
  73. async def save_open_conf_controller(
  74. data: OpenConfUpdateSchema,
  75. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:conf:update"]))],
  76. ) -> JSONResponse:
  77. """
  78. 创建/更新开放配置接口
  79. 如果配置已存在则更新,不存在则创建(仅更新回调地址)
  80. """
  81. result = await OpenConfService.save_conf_service(auth=auth, data=data)
  82. return SuccessResponse(data=result, msg="配置更新成功")