controller.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. msg = "转账成功" if result.status == "SUCCESS" else "转账失败" if result.status == "FAIL" else "转账申请已提交"
  39. return SuccessResponse(data=result, msg=msg)
  40. @OpenapiRouter.post(
  41. "/account/transfer/query",
  42. summary="查询转账",
  43. description="查询转账详情",
  44. )
  45. async def open_transfer_query_controller(
  46. apikey: Annotated[ApiKeyPayload[OpenTransferQuerySchema], Depends(TenantApiKeyAuth(OpenTransferQuerySchema))],
  47. ) -> JSONResponse:
  48. auth = apikey.auth
  49. query_data = apikey.data
  50. if query_data is None:
  51. return ErrorResponse(msg="缺少必需参数")
  52. result = await OpenTransferService.open_query_service(auth=auth, query=query_data)
  53. return SuccessResponse(data=result, msg="查询成功")
  54. # =====================================================================
  55. @OpenapiRouter.get(
  56. "/conf",
  57. summary="查询开放配置",
  58. description="查询当前企业的开放接口配置",
  59. response_model=ResponseSchema[OpenConfOutSchema],
  60. )
  61. async def get_open_conf_controller(
  62. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:conf:query"]))],
  63. ) -> JSONResponse:
  64. """
  65. 查询开放配置接口
  66. 获取当前企业的支付宝开放接口配置信息
  67. """
  68. result = await OpenConfService.get_conf_service(auth=auth)
  69. return SuccessResponse(data=result, msg="查询成功")
  70. @OpenapiRouter.post(
  71. "/conf",
  72. summary="创建/更新开放配置",
  73. description="创建或更新当前企业的开放接口配置(前端只允许配置回调地址)",
  74. response_model=ResponseSchema[OpenConfOutSchema],
  75. )
  76. async def save_open_conf_controller(
  77. data: OpenConfUpdateSchema,
  78. auth: Annotated[AuthSchema, Depends(AuthPermission(["module_system:tenant:conf:update"]))],
  79. ) -> JSONResponse:
  80. """
  81. 创建/更新开放配置接口
  82. 如果配置已存在则更新,不存在则创建(仅更新回调地址)
  83. """
  84. result = await OpenConfService.save_conf_service(auth=auth, data=data)
  85. return SuccessResponse(data=result, msg="配置更新成功")
  86. @OpenapiRouter.post(
  87. "/account/balance/query",
  88. summary="查询资金专户",
  89. description="根据企业ID查询资金专户(调用支付宝接口)",
  90. )
  91. async def open_balance_query_controller(
  92. apikey: Annotated[ApiKeyPayload[OpenBalanceQuerySchema], Depends(TenantApiKeyAuth(OpenBalanceQuerySchema))],
  93. ) -> JSONResponse:
  94. auth = apikey.auth
  95. query_data = apikey.data
  96. if query_data is None:
  97. return ErrorResponse(msg="缺少必需参数")
  98. result = await AccountService.query_account_service(auth=auth, data=query_data)
  99. return SuccessResponse(data=result, msg="查询成功")