Stripe 支付与账单平台 Skill
Stripe 现在的官方默认首选是 Checkout Sessions 配合 Payment Element,而不是多数训练语料里仍当作「现代方案」的 PaymentIntents 直连——这条推荐在抓取时点又变过一次。test 模式与 live 模式是两个完全隔离的数据世界,对象 ID 格式一模一样却互不相通,是代码审查最容易漏掉的坑。本 skill 只用于帮助写对、审查集成代码,不能用来让 Agent 自主发起真实资金的转移,任何涉及真钱的操作都必须先经人工确认。
安装
选你用的 Agent,复制命令。
npx -y skills add fxp/skillify --skill stripe --agent claude-code --yes装到项目的 .claude/skills/;加 -g 装到全局。装完需要你手动执行 /reload-plugins,这一步 Agent 代劳不了。
npx -y skills add fxp/skillify --skill stripe --agent codex --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill stripe --agent cursor --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill stripe --agent opencode --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill stripe --agent gemini-cli --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill stripe --agent github-copilot --yes装到项目的 .agents/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill stripe --agent trae --yes装到项目的 .trae/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill stripe --agent windsurf --yes装到项目的 .windsurf/skills/;加 -g 装到全局。
npx -y skills add fxp/skillify --skill stripe --agent qwen-code --yes把 --agent 换成你用的 Agent 标识,可以一次写多个。skills CLI 1.5.25 共支持 79 个,例如 qwen-code、kimi-code-cli、trae-cn、qoder、lingma、cline、roo。
或者让 Agent 自己装
读 https://github.com/fxp/skillify/blob/main/skills/stripe/prompt.md 并照它执行装对了的标志:references/ 下有 7 份文档。
装好后,可以这样问你的 Agent
这份 Skill 覆盖的典型任务。点一下复制。
7 类能力
每类能力对应一份 reference,Agent 按任务只打开需要的那份。
鉴权与 Test/Live 隔离
Basic Auth 精确格式、pk/rk/sk 三种 key 的权限边界、test 与 live 两套隔离数据、给 Agent 用的 Restricted Key 与两方审批机制
接受支付:Checkout Sessions / PaymentIntents
选型判断、PaymentIntent 生命周期与创建/确认参数、金额与货币的 100 倍陷阱、测试卡号
客户与已保存的支付方式
Customer 增删改查、PaymentMethod 创建、三种关联支付方式的方式怎么选、SetupIntent 只保存不收款
订阅与账单
Product/Price/Subscription/Invoice 对象关系、创建订阅前置条件、payment_behavior 首期扣款陷阱、取消与更新、该监听的 webhook 事件
Webhook 与签名校验
为什么不验证签名是安全漏洞、官方库与手写验证算法、框架改写原始请求体导致校验失败、常见事件类型、可靠性实践
幂等与重试
Idempotency-Key 精确行为、key 生成策略、4xx 与 5xx 该怎么重试、SDK 自动重试、幂等键不等于业务层去重
错误处理与限流
HTTP 状态码与 error 对象字段、四种错误类型、卡拒付测试卡号、全局与资源级限流、SDK 异常映射
当前事实
整理自官方文档(抓取于 2026-09-21),还没有用真实凭证验证。
| 项 | 值 |
|---|---|
| Base URL | https://api.stripe.com/v1;少数较新资源(event destinations、approval requests)挂在 /v2 下,需额外带 Stripe-Version header |
| 鉴权格式 | API key 作 HTTP Basic Auth 的用户名、密码留空:curl -u sk_test_xxx:(冒号不能省);跨域场景用 Authorization: Bearer sk_test_xxx,没有 X-Api-Key 之类的自定义 header |
| Test / Live 隔离 | 两套完全独立的数据世界:sk_test_... 创建的 cus_/pi_/sub_ 对象 ID 与 live 模式格式完全相同但互不可访问,只能靠「这个 ID 是哪个 key 返回的」来判断模式 |
| 金额单位 | amount 永远是目标货币最小单位的整数:amount=1099 对 USD 是 $10.99;零小数货币(JPY/KRW 等)整数本身就是金额,不用再乘 100 |
| 幂等重试 | 创建类 POST 重试时带同一个 Idempotency-Key header(最长 255 字符),Stripe 返回缓存结果而不是重复执行,key 至少 24 小时后失效 |
照通用经验写容易错的 6 件事
来自官方文档,还没有用真实凭证验证。
- 本 skill 不能用于让 Agent 自主发起真实资金的转移。任何创建真实收费、退款、订阅变更的代码,连接 live 环境前必须有人工确认;给 Agent 用的 key 建议用
rk_...Restricted Key 并在创建时标记 agent-tagged,让敏感操作(退款、取消订阅等)先返回approval_required走人工审批,而不是把无限制的sk_live_...直接交给 Agent。 - 框架在你验证签名前就把原始请求体改写了,签名必然对不上。Express 要在
express.json()之前给 webhook 路由单独用express.raw({type: 'application/json'}),Next.js 要关闭默认 body parsing,否则会报No signatures found matching the expected signature for payload。 - 用同一个 Idempotency-Key 重试 4xx 错误只会拿到缓存的同一个错误,不会重新校验参数。修正参数后必须换一个新 key 再发;5xx 则可以用同一个 key 安全重试。
- Stripe 现在的默认首选是 Checkout Sessions + Payment Element,不再是 PaymentIntents 直连。官方文档说除非用户明确要求自定义流程,否则不要直接手搭 PaymentIntents + Elements,因为代码量明显更大——这和多数训练语料里的「现代方案」已经不一致。
- 创建订阅时不显式传 payment_behavior,默认的 allow_incomplete 会在同一个请求里偷偷尝试首期扣款。要让扣款完全由自己代码显式触发,必须传
payment_behavior=default_incomplete,否则一次POST /v1/subscriptions调用可能已经真实扣了款。 - 直接调 /attach 绑定支付方式不是推荐路径。
POST /v1/payment_methods/{id}/attach跳过了 SetupIntent/PaymentIntent 里「为未来复用优化」的必要步骤,官方文档说会导致以后用这张卡扣款时拒付率和认证摩擦更高;保存卡应该用 SetupIntent 或 PaymentIntent 的setup_future_usage。