用途 该技能面向在马来西亚进行 Stripe 支付网关集成的工作,可用于搭建、构建、调试、审查和讲解相关集成。它提供一套围绕 Stripe Checkout Sessions、Payment Intents、Payment Links、Elements、Webhook 与 CLI 测试的参考与工作流程。
主要能力 技能内置三份参考文档:references/stripe-api.md 提供 API 事实依据,包括来源 URL、环境基址、认证方式、Checkout Sessions 流程、Payment Intents 指引、Webhook(Stripe-Signature 验证)、Stripe.js 初始化、CLI 测试、测试卡以及结算与安全注意事项;references/account-setup.md 用于回答注册、所需凭据、密钥来源、沙箱设置、仪表盘设置、支付方式激活、马来西亚特有支付方式、定价或运营状态等问题;references/source-map.md 用于判断哪一页 Stripe 文档适用于 API 结账、Webhook、CLI、SDK、Elements、Payment Links、订阅或示例。
核心工作流程 先识别环境(测试模式或生产模式),再识别集成面(Checkout Sessions 的托管页、嵌入表单或嵌入 Elements,Payment Intents,Payment Links,或仅 Elements)。确认仪表盘设置:API 密钥(可发布密钥与密钥)、Webhook 端点、Webhook 签名密钥、已启用支付方式及环境专属配置。在创建 Stripe Checkout Session 或 PaymentIntent 之前,先创建本地待处理支付。使用密钥在服务端创建 Checkout Session 或 PaymentIntent。托管结账时把客户重定向到返回的 url;嵌入时把 client_secret 传给前端。success_url 重定向仅视为浏览器用户体验,不能仅凭重定向完成履约。使用 Stripe 库的 constructEvent 方法,基于原始请求体与 Webhook 签名密钥验证 Stripe-Signature。仅在会话/PaymentIntent ID、本地引用、金额、币种、支付状态和环境均符合预期后,才进行幂等结算。当 Webhook 延迟或失败时,可用会话/PaymentIntent 检索作为回退,但不得用轮询替代 Webhook。
核心事实 API 基址为 https://api.stripe.com;认证使用 HTTP Bearer Authorization: Bearer {secret_key}。密钥以 sk_live_ 或 sk_test_ 开头;可发布密钥以 pk_live_ 或 pk_test_ 开头,可安全用于客户端。Checkout Sessions 端点为 POST /v1/checkout/sessions;Payment Intents 端点为 POST /v1/payment_intents(仅在 Checkout Sessions 无法满足需求时使用)。Webhook 签名密钥以 whsec_ 开头,每个 Webhook 端点有各自密钥。Webhook 签名使用 Stripe-Signature 头,对 {timestamp}.{raw_body} 做 HMAC-SHA256。对于 Checkout Sessions,Stripe 建议从 checkout.session.completed Webhook 事件履约;对于异步支付方式(如 FPX 银行重定向),使用 checkout.session.async_payment_succeeded。Checkout Session 的 payment_status 值有 paid、unpaid、no_payment_required。测试卡:4242 4242 4242 4242(Visa),任意未来有效期,任意 CVC。Stripe CLI:stripe listen --forward-to 用于本地 Webhook 测试,stripe trigger 用于生成事件。马来西亚 Stripe 账户支持 MYR、卡、FPX 和 GrabPay,需在仪表盘核实当前可用性。Stripe 全球支持 125+ 支付方式。
关键规则 密钥 API 密钥与 Webhook 签名密钥仅保留在服务端;绝不在前端代码、移动应用或客户端环境变量中使用密钥。不得仅凭 success_url 重定向或客户端状态标记已支付。解析 JSON 前,始终使用 Stripe 库的 constructEvent/construct_event 基于原始请求体验证 Webhook 签名。使用与接收事件的端点完全匹配的 Webhook 签名密钥。在重定向客户前,存储提供商会话 ID、本地引用、预期金额、预期币种和环境。通过记录已处理事件 ID 使 Webhook 处理幂等;重复事件或重试不得重复履约。标记已支付前确认金额、币种、会话/PaymentIntent ID、本地引用和支付状态。测试模式与生产模式使用不同的 Webhook URL。默认以 Webhook 确认作为结算路径,API 检索仅作回退。不要硬编码 stripe listen 的临时 Webhook 密钥,它每次重启都会变化,仅用于本地开发。在声称生产确定性前,先在仪表盘/文档/状态页核实生产支付方式可用性、激活、费用、结算时间和当前事件。Stripe 建议大多数集成使用 Checkout Sessions 而非 Payment Intents;仅当用户明确需要自定义支付 UI 或深度自有结账状态时才使用 Payment Intents。
完成标准 Stripe 集成仅在满足以下条件时算完成:Checkout Session 或 PaymentIntent 创建在服务端使用密钥运行;重定向结账、嵌入结账或 Elements 只向后端返回提供商状态,不直接履约访问;Webhook 端点在 Stripe 仪表盘注册或使用 stripe listen 测试;Webhook 处理器基于原始请求体与正确 Webhook 签名密钥验证 Stripe-Signature;结算检查会话/PaymentIntent ID、本地引用、金额、币种和支付状态;重复 Webhook 与事件重试幂等;测试覆盖无效签名、重复 Webhook/事件重放、错误金额/币种/引用、失败/过期状态以及成功完成的支付;部署文档包含 STRIPE_SECRET_KEY、STRIPE_PUBLISHABLE_KEY、STRIPE_WEBHOOK_SECRET、重定向 URL、Webhook URL 以及测试/生产分离。
漏洞审查循环 当被问及 Stripe 策略是否“100% 确信”时,运行该循环直到没有事实缺口:列出信任边界(浏览器重定向、结账页、后端支付创建器、Stripe API、Webhook 接收器、原始体解析器、数据库、履约任务、退款任务、仪表盘设置、状态页和支付方式激活);检查绕过(伪造成功重定向、伪造 Webhook、对解析后 JSON 而非原始体验证签名、错误 Webhook 密钥、测试/生产模式混用、错误 API 密钥、错误金额、错误币种、错误引用、过期状态轮询、重复 Webhook、部分处理后 Webhook 重试、未激活支付方式、Stripe 服务不可用、重复退款);添加修复(服务端创建 Checkout Session/PaymentIntent、先创建本地待处理支付、使用 Stripe 库基于原始体验证签名、严格金额/币种/引用检查、持久事件日志、幂等键、分离环境配置、必要时 IP 允许列表、状态页检查、API 检索回退和仪表盘能力核实);重新阅读 references/stripe-api.md 中与任何缺口相关的章节;如果剩余不确定性取决于当前账户验证、已启用支付方式、激活窗口、结算时间、定价或实时运营状态,则说明该不确定性。
适用场景与限制 适用于马来西亚 Stripe 支付集成相关的开发、调试、审查与讲解。技能本身不提供具体定价、费用或结算时间等实时数据,这些需在仪表盘、文档或状态页核实;马来西亚账户支持的支付方式(MYR、卡、FPX、GrabPay)也需在仪表盘确认当前可用性。