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

如何为Stripe现有Payment Intent创建自定义支付按钮(避开托管发票)

实现方法

可以通过Payment Link实现,步骤如下:

  • 从Stripe webhook推送的事件或后台获取目标发票ID(格式为in_xxx)。
  • 后端调用Stripe API创建Payment Link,请求体中指定invoice字段为目标发票ID,同时可按需配置payment_method_types等支付方式参数。
  • 将返回的Payment Link URL绑定到自有网站的自定义按钮上,用户点击后跳转至Stripe托管的支付页面完成付款;若需在自有网站内嵌支付界面,可通过Stripe.js的loadPaymentLink方法将Payment Link以iframe形式嵌入页面。

方案二:用Stripe Elements自定义集成(完全在自有网站实现)

这种方式可完全自定义支付界面,无需跳转至Stripe托管页面:

  1. 后端处理:
    • 获取状态为open的目标发票,从发票对象中提取关联payment_intent的client_secret(路径为invoice.payment_intent.client_secret)。若发票未生成Payment Intent,可调用invoice.pay API触发生成,该接口会返回包含Payment Intent信息的更新后发票对象。
  2. 前端集成:
    • 加载Stripe.js库,用你的公钥初始化Stripe实例。
    • 创建Payment Element,配置时传入后端获取的client_secret。
    • 给自定义按钮绑定点击事件,调用stripe.confirmPayment发起支付,处理支付成功/失败的回调逻辑。

示例前端代码片段:

// 初始化Stripe实例
const stripe = Stripe('你的公钥');

// 初始化Elements
const elements = stripe.elements({ clientSecret: '后端返回的payment_intent.client_secret' });

// 渲染Payment Element到页面指定容器
const paymentElement = elements.create('payment');
paymentElement.mount('#payment-element-container');

// 自定义支付按钮点击逻辑
document.getElementById('custom-pay-btn').addEventListener('click', async () => {
  const { error } = await stripe.confirmPayment({
    elements,
    confirmParams: {
      return_url: '支付完成后的跳转URL',
    },
  });

  if (error) {
    // 处理支付错误提示
    console.error(error.message);
  } else {
    // 支付成功后的业务逻辑处理
  }
});

注意事项

  • 使用Payment Link时,需确保目标发票状态为open,否则无法关联创建有效的Payment Link。
  • 自定义集成时,client_secret必须通过后端接口返回,禁止在前端直接暴露敏感信息。
  • 无论采用哪种方式,都要监听Stripe的webhook事件(如invoice.paid),在后端完成支付后的业务逻辑处理(如更新订阅状态、用户权限等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:27:07