You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否不修改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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:09:04