JavaScript 不能直接处理支付,需前端用 stripe-js 安全采集信息并生成 payment_method ID,后端用 secret key 调用 Payment Intents API 完成支付,严格分离密钥与敏感操作。

JavaScript 本身不能直接处理支付,因为涉及敏感操作(如卡号、密钥)必须在服务端完成。前端 JavaScript 的作用是:安全采集用户支付信息、生成一次性令牌(Payment Method 或 PaymentIntent Client Secret)、与后端协作完成支付流程。Stripe 提供了官方前端库 stripe-js 来实现这一目标。
前端:用 stripe-js 收集支付信息
不直接传卡号到你的服务器,而是通过 Stripe Elements 在页面上渲染安全的输入框,并由 Stripe 生成加密的 payment method ID。
- 引入 Stripe.js:
- 初始化 Stripe 对象(使用 publishable key,不是 secret key):
const stripe = Stripe('pk_test_...'); - 创建 Elements 实例并挂载信用卡表单:
const elements = stripe.elements(); const cardElement = elements.create('card'); cardElement.mount('#card-element'); - 提交时调用
stripe.createPaymentMethod()获取payment_method.id,然后发给你的后端
后端:用 Stripe SDK 创建支付
接收前端传来的 payment_method ID,结合订单金额、货币等,在服务端调用 Stripe API 创建支付。推荐使用 Payment Intents API(支持 SCA 强验证)。
- 用 secret key 初始化 Stripe SDK(Node.js 示例):
const stripe = require('stripe')('sk_test_...'); - 创建 PaymentIntent:
await stripe.paymentIntents.create({ amount: 2000, currency: 'usd', payment_method: req.body.payment_method_id, confirm: true }); - 返回结果给前端,用于展示成功/失败状态
处理 3D Secure 等异步验证
部分卡需要跳转或弹窗验证(SCA),前端需监听并处理 requires_action 状态。
一套面向小企业用户的企业网站程序!功能简单,操作简单。实现了小企业网站的很多实用的功能,如文章新闻模块、图片展示、产品列表以及小型的下载功能,还同时增加了邮件订阅等相应模块。公告,友情链接等这些通用功能本程序也同样都集成了!同时本程序引入了模块功能,只要在系统默认模板上创建模块,可以在任何一个语言环境(或任意风格)的适当位置进行使用!
立即学习“Java免费学习笔记(深入)”;
- 后端创建 PaymentIntent 时若返回
status: 'requires_action',把client_secret返回给前端 - 前端调用
stripe.confirmCardPayment(clientSecret)触发验证流程 - 验证完成后,PaymentIntent 自动进入
succeeded或requires_payment_method状态
安全与合规要点
绕过这些会引发安全风险或被 Stripe 拒绝。
- 永远不在前端暴露 secret key —— 只用 publishable key 初始化 stripe-js
- 所有关键操作(创建 intent、确认支付、退款)必须在后端完成
- 前端提交前校验金额、商品一致性(防篡改),但最终以服务端为准
- Webhook 必须配置,用于可靠接收支付结果(如
payment_intent.succeeded),不要只依赖前端回调









