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

获取Stripe Token时出错求助:Stripe新手实现订阅功能遇问题

搞定Stripe订阅:前端获取Token并对接后端(基于V3版本)

嘿,作为Stripe新手确实容易被旧文档绕晕,别担心!现在Stripe.js V3已经是官方主推的版本了,V2早就被弃用,我给你一步步梳理怎么实现你要的订阅流程:


第一步:引入最新的Stripe.js V3脚本

先把旧的V2脚本换掉,用官方最新的:

<script src="https://js.stripe.com/v3/"></script>

第二步:初始化Stripe实例

用你从仪表盘拿到的发布密钥(以pk_开头的那个)初始化:

const stripe = Stripe('你的发布密钥');

敲黑板:绝对不能把后端用的密钥密钥(sk_开头)放到前端,会泄露!

第三步:创建卡片输入元素

Stripe会帮你渲染安全合规的卡片输入框,不用自己写原生表单:

  1. 先在页面里放两个容器:
<!-- 卡片输入框的容器 -->
<div id="card-element"></div>
<!-- 错误提示的容器 -->
<div id="card-errors" role="alert"></div>
  1. 然后初始化并挂载卡片元素:
const elements = stripe.elements();
// 创建卡片元素
const cardElement = elements.create('card');
// 把元素挂载到页面容器里
cardElement.mount('#card-element');

// 监听卡片输入的错误,实时提示用户
cardElement.on('change', function(event) {
  const displayError = document.getElementById('card-errors');
  if (event.error) {
    displayError.textContent = event.error.message;
  } else {
    displayError.textContent = '';
  }
});

第四步:表单提交时获取Token并传给后端

假设你有个订阅表单,给表单绑定提交事件,获取Token后发请求到后端:

const subscriptionForm = document.getElementById('subscription-form');
subscriptionForm.addEventListener('submit', async (e) => {
  e.preventDefault(); // 阻止默认表单提交

  // 调用Stripe的createToken方法生成卡片Token
  const {error, token} = await stripe.createToken(cardElement);

  if (error) {
    // 有错误就显示给用户
    const errorElement = document.getElementById('card-errors');
    errorElement.textContent = error.message;
  } else {
    // 没有错误就把Token和订阅方案ID传给后端
    fetch('/api/create-subscription', {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({
        stripeToken: token.id, // 拿到的卡片Token
        planId: '你的订阅方案ID' // 就是你在仪表盘配置的每月5美元方案的ID
      })
    })
    .then(response => response.json())
    .then(data => {
      // 处理后端返回的结果
      if (data.success) {
        alert('订阅成功!');
        // 可以跳转到成功页面
        window.location.href = '/subscription-success';
      } else {
        alert('订阅失败:' + data.error);
      }
    });
  }
});

后端关键提示(必看)

前端拿到Token只是第一步,真正创建订阅要靠后端调用Stripe的服务器端API:

  1. 后端要用Stripe对应的服务器SDK(比如Node.js、Python、PHP等),用密钥密钥初始化
  2. 接收前端传的stripeToken和planId,先创建Stripe客户,再创建订阅
    举个Node.js的简单示例:
const stripe = require('stripe')('你的密钥密钥');

// 后端接口
app.post('/api/create-subscription', async (req, res) => {
  const {stripeToken, planId} = req.body;

  try {
    // 先创建Stripe客户
    const customer = await stripe.customers.create({
      source: stripeToken,
      email: req.user.email // 这里可以用你系统里用户的邮箱,或者从前端传
    });

    // 创建订阅
    const subscription = await stripe.subscriptions.create({
      customer: customer.id,
      items: [{plan: planId}],
      payment_behavior: 'default_incomplete', // 处理支付失败的场景,可选但推荐
      expand: ['latest_invoice.payment_intent']
    });

    res.json({success: true, subscriptionId: subscription.id});
  } catch (error) {
    res.json({success: false, error: error.message});
  }
});

额外注意事项

  • 测试的时候用Stripe的测试卡号:4242 4242 4242 4242,过期日期填未来的月份(比如12/30),CVV随便填3位数字
  • 如果要支持更多支付方式(比如Apple Pay、Google Pay),推荐用Payment Element代替Card Element,官方文档里有详细说明
  • 一定要确保前后端用的Stripe版本兼容,避免出现API调用错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:44:03