controller.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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. transfer_data.api_key = apikey.api_key
  36. result = await OpenTransferService.open_transfer_service(auth=auth, data=transfer_data)
  37. return SuccessResponse(data=result, msg="转账申请已提交")
  38. @OpenapiRouter.post(
  39. "/account/transfer/query",
  40. summary="查询转账",
  41. description="查询转账详情",
  42. )
  43. async def open_transfer_query_controller(
  44. apikey: Annotated[ApiKeyPayload[OpenTransferQuerySchema], Depends(TenantApiKeyAuth(OpenTransferQuerySchema))],
  45. ) -> JSONResponse:
  46. auth = apikey.auth
  47. query_data = apikey.data
  48. if query_data is None:
  49. return ErrorResponse(msg="缺少必需参数")
  50. result = await OpenTransferService.open_query_service(auth=auth, query=query_data)
  51. return SuccessResponse(data=result, msg="查询成功")
  52. # =====================================================================
  53. @OpenapiRouter.get(
  54. "/conf",
  55. summary="查询开放配置",
  56. description="查询当前企业的开放接口配置",
  57. response_model=ResponseSchema[OpenConfOutSchema],
  58. )
  59. async def get_open_conf_controller(
  60. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:conf:query"]))],
  61. ) -> JSONResponse:
  62. """
  63. 查询开放配置接口
  64. 获取当前企业的支付宝开放接口配置信息
  65. """
  66. result = await OpenConfService.get_conf_service(auth=auth)
  67. return SuccessResponse(data=result, msg="查询成功")
  68. @OpenapiRouter.post(
  69. "/conf",
  70. summary="创建/更新开放配置",
  71. description="创建或更新当前企业的开放接口配置(前端只允许配置回调地址)",
  72. response_model=ResponseSchema[OpenConfOutSchema],
  73. )
  74. async def save_open_conf_controller(
  75. data: OpenConfUpdateSchema,
  76. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:conf:update"]))],
  77. ) -> JSONResponse:
  78. """
  79. 创建/更新开放配置接口
  80. 如果配置已存在则更新,不存在则创建(仅更新回调地址)
  81. """
  82. result = await OpenConfService.save_conf_service(auth=auth, data=data)
  83. return SuccessResponse(data=result, msg="配置更新成功")