能否不修改Django项目接入FastAPI实现Square支付功能?
方案1:Django与FastAPI同时运行(无需修改现有Django业务)
完全可以实现二者并行运行,互相不干扰:
- 两个服务独立开发部署:FastAPI只实现Square支付相关的接口,和Django使用不同端口启动,比如Django默认跑8000,FastAPI跑8001即可。
- 流量转发用Nginx配置反向代理即可,比如把所有
/payment/前缀的请求转发到FastAPI服务,其余请求走原有Django服务,用户侧完全感知不到后端是两个服务。 - 若需要数据互通,直接在FastAPI中复用Django的数据库配置读取数据即可,不需要做额外的适配。
方案2:直接迁移Square逻辑到Django(更推荐,无FastAPI学习成本)
Square官方的Python SDK本身是完全框架无关的,给出的FastAPI示例只是做了路由和请求参数解析的外层封装,核心支付逻辑可以100%平移到Django中,完全不需要额外部署FastAPI服务:
- 第一步安装官方SDK:
pip install squareup - 把官方示例中Square客户端初始化、创建支付、回调校验的核心逻辑直接复制到Django的视图函数中即可,只需要把FastAPI的参数解析逻辑替换成Django的请求参数读取逻辑即可,核心调用代码不需要任何修改。
- 最简Django支付创建视图参考:
from square.client import Client from django.http import JsonResponse import os def create_payment(request): if request.method != "POST": return JsonResponse({"error": "Method not allowed"}, status=405) # 初始化Square客户端,代码和官方示例完全一致 square_client = Client( access_token=os.getenv("SQUARE_ACCESS_TOKEN"), environment="sandbox" # 生产环境替换为production ) # 从请求中获取前端Square SDK生成的支付凭证,对应FastAPI示例中的入参 payment_nonce = request.POST.get("payment_nonce") pay_amount = int(request.POST.get("amount")) # 创建支付的核心逻辑,完全复用官方示例代码 create_result = square_client.payments.create_payment( idempotency_key=os.urandom(16).hex(), amount_money={ "amount": pay_amount, "currency": "USD" }, source_id=payment_nonce ) if create_result.is_success(): # 支付成功后的业务逻辑,比如更新订单状态 return JsonResponse({"status": "success", "payment_info": create_result.body}) return JsonResponse({"status": "fail", "errors": create_result.errors}, status=400)
- 支付回调接口的实现逻辑同理,把FastAPI的回调处理逻辑直接平移到Django视图中即可,签名校验等工具代码可以完全复用官方示例。
内容的提问来源于stack exchange,提问作者illymarev
相关产品推荐
相关产品推荐

