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

基于Django+Stripe实现免费商品发布列表的技术方案咨询

Django+Stripe 免费商品发布解决方案

核心思路

Stripe压根不支持0金额的支付请求,别硬往Stripe里塞0金额了,直接把免费和付费的发布流程拆分开——免费商品跳过Stripe支付环节,直接走创建逻辑就行。

具体实现步骤

1. 修改create_ad_func函数逻辑

先算出用户最终应付金额(原价减优惠券折扣),判断金额是否≤0:

  • 若为免费,直接创建商品并保存到数据库,完全不用碰Stripe
  • 若为付费,正常执行Stripe支付流程

给你个代码修改示例(对应你views.py里的函数):

def create_ad_func(request):
    # 从管理员配置或表单中获取原价,计算优惠券折扣后得到最终金额
    original_price = ... 
    coupon_discount = ... 
    final_amount = original_price - coupon_discount

    if final_amount <= 0:
        # 免费发布逻辑:直接创建商品实例并保存
        ad = Ad(
            user=request.user,
            title=request.POST.get('title'),
            # 补充其他商品必填字段
            is_paid=True, # 标记为已支付(免费等同于完成支付)
            amount_paid=0
        )
        ad.save()
        # 跳转到商品发布成功页面
        return redirect('ad_success')
    else:
        # 付费发布逻辑:正常调用Stripe API生成支付Intent
        stripe.api_key = settings.STRIPE_SECRET_KEY
        try:
            intent = stripe.PaymentIntent.create(
                amount=int(final_amount * 100), # Stripe要求金额以分为单位
                currency='usd',
                metadata={'user_id': request.user.id, 'ad_info': ...}
            )
            return JsonResponse({'clientSecret': intent.client_secret})
        except stripe.error.StripeError as e:
            return JsonResponse({'error': str(e)}, status=400)

2. 前端配合调整

免费商品的表单提交后,直接触发后端的免费创建逻辑即可,无需加载Stripe支付组件;只有付费商品才渲染Stripe支付按钮。

3. 数据库字段优化

给你的商品模型(比如Ad)添加amount_paid或is_free字段,标记该商品是否为免费发布,后续列表展示时也能方便区分。

需要规避的坑

  • 别尝试强制给Stripe传0金额,一定会触发API错误
  • 免费发布前要校验规则,比如是否符合管理员设置的免费条件、优惠券是否合法,防止恶意刷免费发布
  • 免费发布完成后要同步更新用户的发布记录,保证数据一致性

内容的提问来源于stack exchange,提问作者Masabo Simplice franck

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:40:58