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

如何在Python中从表单POST提交获取Stripe令牌?

解决Stripe令牌在Flask后端无法提取ID的问题

看起来你是在前端成功拿到了Stripe令牌,但传到Flask后端后,只能看到[object Object]这样的输出,没法拿到里面的令牌ID和其他数据对吧?这大概率是前端传递令牌的方式出了问题,我来一步步帮你解决:

先搞定前端:传递令牌ID而非整个对象

Stripe的createToken方法返回的是一个包含token对象的结果,这个对象里有你需要的id(就是令牌ID)、card(卡片详情)等属性。如果你直接把整个token对象塞到隐藏输入框的value里,浏览器会自动把它转成[object Object]这个没用的字符串——这就是问题的根源。

正确的做法是提取token.id,再放到隐藏输入里:

// 假设你用Stripe.js创建令牌的代码
stripe.createToken(cardElement).then(function(result) {
  if (result.error) {
    // 这里处理错误提示,比如显示给用户
  } else {
    // 取出真正需要的令牌ID
    const stripeTokenId = result.token.id;
    // 把ID赋值给隐藏输入框
    document.getElementById('stripe-token').value = stripeTokenId;
    // 提交表单到你的Flask后端
    document.getElementById('payment-form').submit();
  }
});

对应的HTML隐藏输入框要设置好name属性,方便后端获取:

<input type="hidden" id="stripe-token" name="stripe_token">

再处理后端:Flask轻松提取令牌ID

当前端正确传递了令牌ID后,在Flask里就可以直接从request.form中获取了:

from flask import Flask, request

app = Flask(__name__)

@app.route('/newForm', methods=['POST', 'GET'])
def newForm():
    if request.method == 'POST':
        # 直接拿到令牌ID
        stripe_token_id = request.form.get('stripe_token')
        
        # 拿到ID后,你就可以调用Stripe的API做后续操作了,比如创建收费
        # 举个例子(记得先导入stripe库并设置密钥):
        # import stripe
        # stripe.api_key = "你的Stripe密钥"
        # charge = stripe.Charge.create(
        #   amount=1000,  # 单位是分,这里是10美元
        #   currency='usd',
        #   source=stripe_token_id,
        #   description='测试收费'
        # )
        
        # 如果前端不小心传了整个Token对象(比如用JSON.stringify转成了字符串),那可以这样解析:
        # import json
        # stripe_token_data = json.loads(request.form.get('stripe_token'))
        # stripe_token_id = stripe_token_data['id']
        # card_brand = stripe_token_data['card']['brand']  # 获取卡片品牌,比如Visa
        # last4 = stripe_token_data['card']['last4']  # 获取卡片最后四位
        
        # 处理其他表单数据
        other_form_data = request.form.to_dict()
        return f"成功获取令牌ID: {stripe_token_id}"
    else:
        # GET请求时渲染你的表单页面
        return render_template('payment_form.html')

快速排查小技巧

  • 打开浏览器的开发者工具(F12),切换到Network标签,提交表单后看请求的Form Data里,stripe_token的值是不是类似tok_xxxxxx的字符串,而不是[object Object]。
  • 前端控制台打印result.token确认它确实有id属性,避免因为Stripe API版本更新导致属性名变化。

内容的提问来源于stack exchange,提问作者Johnny John Boy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:11:53