JavaScript 不能直接处理支付,需前端用 stripe-js 安全采集信息并生成 payment_method ID,后端用 secret key 调用 Payment Intents API 完成支付,严格分离密钥与敏感操作。
JavaScript 本身不能直接处理支付,因为涉及敏感操作(如卡号、密钥)必须在服务端完成。前端 JavaScript 的作用是:安全采集用户支付信息、生成一次性令牌(Payment Method 或 PaymentIntent Client Secret)、与后端协作完成支付流程。Stripe 提供了官方前端库 stripe-js 来实现这一目标。
不直接传卡号到你的服务器,而是通过 Stripe Elements 在页面上渲染安全的输入框,并由 Stripe 生成加密的 payment method ID。
const stripe = Stripe('pk_test_...');
const elements = stripe.elements(); const cardElement = elements.create('card'); cardElement.mount('#card-element');
stripe.createPaymentMethod() 获取 payment_method.id,然后发给你的后端接收前端传来的 payment_method ID,结合订单金额、货币等,在服务端调用 Stripe API 创建支付。推荐使用 Payment Intents API(支持 SCA 强验证)。
const stripe = require('stripe')('sk_test_...');
await stripe.paymentIntents.create({ amount: 2000, currency: 'usd', payment_method: req.body.payment_method_id, confirm: true });
部分卡需要跳转或弹窗验证(SCA),前端需监听并处理 requires_action 状态。
status: 'requires_action',把 client_secret 返回给前端stripe.confirmCardPayment(clientSecret) 触发验证流程succeeded 或 requires_payment_method 状态绕过这些会引发安全风险或被 Stripe 拒绝。
payment_intent.succeeded),不要只依赖前端回调