SuperAPI AI 工具集

stripe-payments

编程与开发

查看项目

更新于 10-15 07:49

技能介绍

用途

Stripe Payments 是一项用于集成 Stripe 支付能力的技能,涵盖收款、订阅和收银台(Checkout)。当用户提到 "stripe"、"payment processing"、"checkout"、"subscriptions" 等关键词时适用。

设置与密钥

Stripe 使用两对密钥:可发布密钥(客户端)与私密密钥(服务端)。密钥管理面板地址为 https://dashboard.stripe.com/apikeys 。测试密钥以 pk_test_ 和 sk_test_ 开头,正式密钥以 pk_live_ 和 sk_live_ 开头。私密密钥应存放在环境变量中,绝不要写进源码。也可以创建权限受限的密钥(Restricted keys)用于特定服务。

环境变量示例: export STRIPE_SECRET_KEY="sk_test_..." export STRIPE_PUBLISHABLE_KEY="pk_test_..."

SDK 安装: Node.js:npm install stripe Python:pip install stripe

测试模式:使用测试密钥发起的所有 API 调用都会命中测试环境,不会产生真实扣款。开发与 CI 中使用测试模式,仅在生产环境切换到正式密钥。

Stripe CLI

安装:brew install stripe/stripe-cli/stripe 登录:stripe login 本地监听 webhook:stripe listen --forward-to localhost:4242/webhook 触发测试事件:stripe trigger payment_intent.succeeded、stripe trigger customer.subscription.created 查看近期日志:stripe logs tail 列出资源:stripe customers list --limit 5、stripe payments list --limit 5、stripe subscriptions list --limit 3 从 CLI 创建资源:stripe customers create --email="test@example.com"、stripe prices create --unit-amount=2000 --currency=usd --recurring[interval]=month --product=prod_xxx

Checkout Sessions

一次性支付:创建 session 时 mode 为 'payment',line_items 中可内联 price_data(含 currency、product_data、unit_amount,单位是分,2000 代表 $20.00)与 quantity,并提供 success_url 与 cancel_url。 订阅收银台:mode 为 'subscription',line_items 引用已有 price,可选用 customer 绑定已有客户。 内嵌 Checkout(Embedded Checkout):ui_mode 设为 'embedded',使用 return_url,并把 session.client_secret 返回给前端。

Payment Intents

创建并确认:paymentIntents.create 传入 amount、currency、payment_method、confirm: true,并启用 automatic_payment_methods。 手动捕获(先授权后扣款):capture_method 设为 'manual',之后调用 paymentIntents.capture(intent.id) 捕获授权金额。

客户、订阅与按量计费

客户:customers.create 可设置 email、name、metadata;customers.update 更新信息;paymentMethods.attach 将支付方式绑定到客户;通过 invoice_settings.default_payment_method 设置默认支付方式。 订阅创建:subscriptions.create 传入 customer、items、default_payment_method,可设置 payment_behavior: 'default_incomplete' 并 expand latest_invoice.payment_intent。 更新/取消/试用:subscriptions.update 更换 plan(自动处理按比例计费 proration);cancel_at_period_end 表示期末取消;subscriptions.cancel 立即取消;trial_period_days 设置试用天数。 按量计费:使用 subscriptionItems.createUsageRecord('si_xxx', ...) 上报用量,action 可为 'increment' 或 'set'。

Webhooks

在 Node.js/Express 中,路由需使用 express.raw({ type: 'application/json' }),通过 stripe.webhooks.constructEvent(req.body, sig, endpointSecret) 校验签名,并返回 2xx。 常见事件:checkout.session.completed、payment_intent.succeeded、payment_intent.payment_failed、invoice.paid、invoice.payment_failed、customer.subscription.created、customer.subscription.updated、customer.subscription.deleted。 重试逻辑:Stripe 在 72 小时内以指数退避重试失败的 webhook 投递。应快速返回 2xx,耗时任务异步处理,并使用幂等检查处理重复投递。

产品与价格

products.create 创建产品;prices.create 可创建一次性价格、周期性价格(recurring.interval)与按量价格(recurring.usage_type 为 'metered',配合 billing_scheme 与 unit_amount)。

Stripe Elements

推荐使用 Payment Element:客户端用 Stripe('pk_test_...') 初始化,elements 传入 clientSecret 与 appearance,elements.create('payment') 并 mount,表单提交时调用 stripe.confirmPayment。 Card Element(旧版、更简单):elements.create('card'),配合 stripe.confirmCardPayment(clientSecret, { payment_method: { card: cardElement } })。

退款与发票

退款:refunds.create 传入 payment_intent 可全额退款;传入 amount 可部分退款;可附带 reason('requested_by_customer'、'duplicate'、'fraudulent')。 发票:invoices.create 创建草稿;invoiceItems.create 添加行项目;finalizeInvoice 定稿;sendInvoice 发送给客户;invoices.pay 直接支付发票。

Python 集成

通过 import stripe 并设置 stripe.api_key 使用。可创建 Checkout Session、PaymentIntent、Customer;Webhook 校验(Flask)使用 stripe.Webhook.construct_event(payload, sig, endpoint_secret),并捕获 stripe.error.SignatureVerificationError。

测试

测试卡号:4242424242424242(Visa,成功)、4000000000000002(通用拒付)、4000002500003155(需要 3DS)、4000000000009995(余额不足)、4000000000000069(卡过期)。使用任意未来有效期、任意 3 位 CVC 与任意邮编。 测试时钟(Test Clocks):testHelpers.testClocks.create 创建时钟,customers.create 时传入 test_clock 绑定客户,testHelpers.testClocks.advance 推进时间以触发续费、试用结束等。

错误处理

拒付码:处理 err.code 值,包括 card_declined、expired_card、incorrect_cvc、processing_error、insufficient_funds。向用户显示友好信息,不要暴露原始错误细节。 幂等键:在创建或更新操作中传入 idempotencyKey(例如 'order_123')以防止重试导致重复扣款;键在 24 小时后过期。 通用错误模式:捕获后根据 err.type 区分 StripeCardError、StripeInvalidRequestError、StripeAPIError(Stripe 侧问题,退避重试)、StripeRateLimitError(请求过多,退避重试)。

常见模式

SaaS 计费:为每个档位创建产品与周期性价格;使用订阅模式 Checkout 或直接创建订阅;监听 invoice.paid 与 customer.subscription.updated 以开通/关闭访问权限;通过订阅更新与按比例计费处理升降级;使用 cancel_at_period_end 优雅取消。 一次性购买:创建 payment 模式 Checkout Session;在 checkout.session.completed 时履约;保存 payment_intent ID 以便退款。 Marketplace(Connect):stripe.accounts.create({ type: 'express' }) 创建关联账户;使用带 transfer_data 或 on_behalf_of 的 payment_intents;通过 application_fee_amount 收取平台费用;处理向关联账户的付款。 按量计费:创建 usage_type 为 'metered' 的周期性价格;用该价格创建订阅;通过 subscriptionItems.createUsageRecord 上报用量;Stripe 在每个计费周期结束时根据上报用量开具发票。

限制

资料未提供具体收费、价格、平台支持范围或除上述内容外的效果承诺;相关事实暂未提供。