在集成Stripe支付功能时,很多开发者会尝试直接在客户端调用Stripe的API创建支付链接,但Stripe的私密密钥一旦暴露在前端代码中,攻击者可以随意调用支付相关接口,甚至盗刷账户资金,因此绝对不能将私密密钥放在客户端。正确的做法是通过后端作为中间层处理所有和Stripe相关的请求,客户端只和自己的后端通信,全程不接触Stripe私密密钥,就能安全完成支付链接的创建。

核心实现思路
整个流程分为三个角色:客户端、你自己的后端服务、Stripe服务端。核心逻辑是客户端不直接请求Stripe,而是将创建支付链接需要的参数发送给自己的后端,后端使用存储的Stripe私密密钥调用Stripe API创建支付链接,再把链接返回给客户端,客户端拿到链接后跳转即可完成支付。
角色职责划分
- 客户端:收集支付相关的业务参数,调用自己的后端接口,接收返回的支付链接并跳转
- 自己的后端:存储Stripe私密密钥,接收客户端请求后调用Stripe API,返回结果给客户端
- Stripe服务端:提供支付链接创建的官方API,仅接受携带合法私密密钥的请求
后端接口实现示例
这里以Node.js的Express框架为例,演示后端如何调用Stripe API创建支付链接,后端需要提前安装stripe依赖,并且将Stripe私密密钥配置在环境变量中,不要硬编码在代码里。
// 引入依赖
const express = require('express');
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
const app = express();
// 解析JSON请求体
app.use(express.json());
// 创建支付链接的接口
app.post('/api/create-payment-link', async (req, res) => {
try {
const { priceId, quantity = 1 } = req.body;
// 调用Stripe API创建支付链接
const paymentLink = await stripe.paymentLinks.create({
line_items: [
{
price: priceId,
quantity: quantity,
},
],
});
// 返回支付链接给客户端
res.json({
success: true,
paymentLink: paymentLink.url,
});
} catch (error) {
console.error('创建支付链接失败:', error);
res.status(500).json({
success: false,
message: '创建支付链接失败,请稍后重试',
});
}
});
// 启动服务
app.listen(3000, () => {
console.log('后端服务运行在3000端口');
});
客户端调用示例
客户端只需要调用自己的后端接口,不需要任何Stripe相关的密钥,这里以浏览器端的JavaScript为例,演示如何请求后端接口并跳转支付链接。
// 客户端调用后端接口创建支付链接
async function createPaymentLink() {
try {
// 这里替换为你的后端接口地址,示例中使用本地地址
const response = await fetch('http://127.0.0.1:3000/api/create-payment-link', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
// 替换为你在Stripe后台创建的商品价格ID
priceId: 'price_xxxxxx',
quantity: 1,
}),
});
const result = await response.json();
if (result.success) {
// 跳转到支付链接
window.location.href = result.paymentLink;
} else {
alert(result.message);
}
} catch (error) {
console.error('请求失败:', error);
alert('创建支付链接失败,请稍后重试');
}
}
// 给按钮绑定点击事件
document.getElementById('pay-btn').addEventListener('click', createPaymentLink);
关键注意事项
- Stripe的私密密钥必须只存储在后端,绝对不能出现在客户端的任何代码、配置文件或者网络请求中
- 后端接口需要做身份验证,避免未授权的用户随意调用你的接口创建支付链接,造成资损
- 如果客户端是前端项目,需要注意跨域问题,后端需要配置对应的CORS规则允许客户端域名访问
- Stripe的
price_id可以放在客户端,因为它是公开的商品标识,不会带来安全风险
常见问题解答
能不能用Stripe的公钥创建支付链接
不能,Stripe的公钥只能用于前端展示支付组件等场景,创建支付链接等涉及资金操作的接口必须使用私密密钥,因此必须通过后端调用。
客户端能不能直接调用Stripe的公开API
Stripe没有公开的无需密钥就能创建支付链接的API,所有创建支付链接的接口都需要私密密钥鉴权,因此客户端无法直接调用。
Stripe_Payment_Link客户端密钥安全后端代理接口Stripe_API支付链接生成修改时间:2026-07-03 07:48:23