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

Django电商项目中Stripe支付token获取失败求助

Django Stripe支付:前端token无法传递到后端的问题解决

问题现象

前端通过JavaScript创建隐藏input传递Stripe的token.id,alert能看到有效值,但后端form.cleaned_data里的stripetoken字段为空,其他字段正常获取值。

核心原因

  1. 前后端字段名大小写不匹配:前端input的name是stripeToken(驼峰格式),但后端表单字段定义的是stripetoken(全小写),Django表单会严格匹配字段名,导致无法映射参数值。
  2. 表单类未声明对应字段:如果表单类里没有定义stripeToken/stripetoken字段,即使前端传了参数,cleaned_data也只会返回默认空值。

解决方法

方法1:统一字段名大小写

  • 修改前端JS,把input的name改成全小写,和后端表单字段名保持一致:
var form = document.getElementById('stripe-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripetoken'); // 改为全小写
hiddenInput.setAttribute('value', token.id);

form.appendChild(hiddenInput);
form.submit()
  • 或者修改后端表单类,将字段名改为stripeToken,并在视图中对应获取:
# 表单类示例
class StripePaymentForm(forms.Form):
    stripeToken = forms.CharField(required=True, widget=forms.HiddenInput)
    save = forms.BooleanField(required=False)
    use_default = forms.BooleanField(required=False)

# 视图中获取
token = form.cleaned_data.get('stripeToken')

方法2:确保表单包含对应字段

检查你的表单类,必须包含接收token的字段,否则表单不会处理该参数。比如上面的表单类示例,添加与前端name一致的stripeToken或stripetoken字段。

方法3:直接从request.POST调试确认

如果暂时不想修改表单,可以直接从请求对象中获取参数,验证前端是否成功传递:

token = request.POST.get('stripeToken')
print(token) # 查看是否有值

如果能拿到值,说明问题出在表单字段定义上,再调整表单即可。

额外检查

打开浏览器开发者工具(F12),切换到Network标签,查看表单提交的请求,检查Form Data中是否存在stripeToken(或stripetoken)字段及对应的值,确认前端参数是否正确发送。

内容的提问来源于stack exchange,提问作者Brainiedude

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:57:23