controller.py 4.2 KB

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