导读:本期聚焦于小伙伴创作的《如何在不暴露密钥的情况下在客户端创建Stripe Payment Link》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《如何在不暴露密钥的情况下在客户端创建Stripe Payment Link》有用,将其分享出去将是对创作者最好的鼓励。

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

如何在不暴露密钥的情况下在客户端创建Stripe Payment Link

核心实现思路

整个流程分为三个角色:客户端、你自己的后端服务、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

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。