关于 stripe-integration
stripe-integration 是面向开发者的 Stripe 支付集成指南,涵盖 Node.js 服务端和 React Stripe.js 客户端流程。内容涉及一次性付款、订阅、托管结账和 Webhook 验证。
主要功能
- 01创建 Payment Intents 和订阅
- 02集成托管结账与支付表单
- 03管理客户账单门户
- 04验证 Webhook 签名
- 05处理支付确认与身份验证
适用场景
- 01构建一次性付款流程
- 02实现定期订阅和账单管理
- 03通过 Webhook 触发履约
- 04排查支付确认与事件处理问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oakoss/ agent-skills --skill stripe-integration安装后在 Claude Code 中输入/stripe-integration确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/checkout-and-payments.mdstripe-elements.mdsubscriptions.mdwebhooks.md详细介绍
Stripe 集成
概览
Stripe 提供完整的支付平台,包含服务端 SDK(Node.js)和客户端库(Stripe.js、React Stripe.js)。Node.js SDK 处理创建 Payment Intent、管理订阅和验证 Webhook 等服务端操作。React Stripe.js 库提供预构建的 UI 组件(PaymentElement、Elements 提供程序),用于安全地收集客户端支付信息。
适用场景: 一次性付款、周期性订阅、按用量计费、Marketplace 付款、托管结账页面、自定义支付表单、由 Webhook 驱动的履约。
不适用场景: 加密货币支付(不支持)、Stripe 不可用的地区、无需处理支付的简单静态商品销售(请使用托管店面)。
快速参考
| 模式 | API | 要点 |
|---|---|---|
| 托管结账 | stripe.checkout.sessions.create() | Stripe 托管页面,支持 payment、subscription、setup 模式 |
| Payment Intent | stripe.paymentIntents.create() | 服务端操作,返回用于客户端确认的 client_secret |
| 确认支付 | stripe.confirmPayment({ elements, clientSecret }) | 客户端操作,需要 Elements 实例 |
| 创建订阅 | stripe.subscriptions.create() | 对于 SCA,使用 payment_behavior: 'default_incomplete' |
| 更新订阅 | stripe.subscriptions.update() | 明确设置 proration_behavior |
| 取消订阅 | stripe.subscriptions.cancel() | 使用 prorate: true 抵扣未使用的时间 |
| 客户门户 | stripe.billingPortal.sessions.create() | 自助式账单管理,返回短时有效的 URL |
| 验证 Webhook | stripe.webhooks.constructEvent() | 需要原始请求体、签名标头和端点密钥 |
| Elements 提供程序 | <Elements stripe={stripePromise} options={options}> | 包装支付组件,传入 clientSecret 或 mode |
| PaymentElement | <PaymentElement /> | 自动呈现所有受支持的支付方式 |
| 检索并展开 | stripe.checkout.sessions.retrieve(id, { expand }) | 展开嵌套对象以减少 API 调用 |
| 搜索 | stripe.paymentIntents.search({ query }) | 使用 Stripe Query Language 进行筛选 |
常见错误
| 错误 | 正确做法 |
|---|---|
| 验证前将 webhook 请求体解析为 JSON | 使用 express.raw({ type: 'application/json' }) 将原始请求体传递给 constructEvent |
| 将支付方式类型硬编码 | 使用 automatic_payment_methods,或让 Checkout 根据币种和地区进行选择 |
| 在客户端创建 PaymentIntent | 在服务端创建,仅将 client_secret 传递给客户端 |
确认前未等待 elements.submit() | 先调用 elements.submit() 触发验证,然后调用 confirmPayment |
在 confirmPayment 中缺少 return_url | 始终为基于重定向的支付方式提供 return_url |
| 在生产环境中使用测试密钥 | 将密钥存储在环境变量中,并验证 STRIPE_SECRET_KEY 前缀(sk_live_ 与 sk_test_) |
未处理 requires_action 状态 | 确认后检查 PaymentIntent 状态,并处理 3D Secure 或其他身份验证 |
| 创建 Customer Portal 会话时未配置设置 | 先在 Dashboard 中保存 Portal 设置,否则 API 会返回错误 |
| 未展开相关对象 | 使用 expand 参数包含嵌套对象,例如 latest_invoice.payment_intent |
| 忽略 webhook 幂等性 | 使用 event.id 去重;webhook 事件可能会多次送达 |
委派
- 支付流程架构:使用
ExploreAgent 查找集成模式 - Webhook 调试:使用
TaskAgent 进行端到端事件追踪 - 代码审查:委派给
code-reviewerAgent,对支付处理程序进行安全审查
参考资料
评论
支持 Markdown