mcpField
W
whop-dev

whop-dev

github.com/steve-cooks开发386 次安装3 周前更新
代码仓库

关于 whop-dev

用于开发和维护运行于 Whop 内的应用的技能,提供认证、API、支付、Webhook、界面和部署方面的当前指南,也涵盖旧代码迁移检查。

主要功能

  1. 01应用脚手架与部署指南
  2. 02JWT 验证和访问权限检查
  3. 03Whop SDK 与 API 版本指南
  4. 04结账与 Webhook 处理
  5. 05界面和设计参考

适用场景

  1. 01搭建新的 Whop 应用
  2. 02更新较旧的 Whop 集成
  3. 03实现访问检查或支付流程

MCP 相关

该技能列出 Whop API 和文档的可选 MCP 服务:`https://mcp.whop.com/mcp` 与 `https://docs.whop.com/mcp`。API 服务使用浏览器登录。

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/steve-cooks/skills --skill whop-dev

安装后在 Claude Code 中输入/whop-dev确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
api-and-sdk.md
auth-and-access.md
build-and-ship.md
design-principles.md
payments.md
ui.md
webhooks.md

详细介绍

Whop 应用开发

Whop 应用运行在 whop.com 的 iframe 中。Whop 会将已登录用户作为 JWT 发送,你的服务器会验证该令牌、检查该用户有权访问的内容,并使用 API 密钥与 Whop API 通信。资金通过结账流程流转,你的服务器则通过签名 Webhook 了解相关情况。

Whop 的技术栈在 2026 年 7 月至 10 月间发生了很大变化。教程、旧模板或模型记忆中的代码现在往往已经有误。请优先参考此技能和当前的 Whop 文档,而非记忆。

优秀 Whop 应用的特点(建议)

应用成功指南(并非要求;用户请求优先):

原则描述
赋能创作者提供自定义选项,让每个 whop 都独具特色
促进发现为应用加入某种分享功能或发布潜力,让用户能够吸引更多用户
定价可持续以合理方式盈利,不要过度压榨创作者或客户
保持 UX 简洁核心操作一目了然,尽量减少点击

详情: design-principles.md

变更内容(旧版 → 当前)

旧版(已过时)当前
new Whop({ apiKey, appID, webhookKey })、@whop/api来自 @whop/sdk 2.x 的 new WhopClient({ token })。它不会读取任何环境变量。
TypeScript 中的 whopsdk.verifyUserToken(headers)已移除。请使用 jose 自行验证 JWT(auth-and-access.md)
whopsdk.webhooks.unwrap(...)、btoa(secret)使用来自 @whop/sdk/helpers 的 unwrapWebhook(rawBody, { headers, key }),密钥原样传入
Plans、companies、company_idVariants 和 accounts、account_id。ID 仍保留 plan_ / biz_ 前缀
memberships.cancel 在当前周期结束时取消除非设置 cancel_at_period_end: true,否则会立即终止访问权限
来自 @whop/api 的 chargeUser服务器端使用 checkoutConfigurations.create,然后客户端使用 iframeSdk.inAppPurchase({ planId, id })
来自 @whop/checkout 的 WhopCheckoutEmbed已由 Whop Elements <Checkout><CheckoutElement/></Checkout> 取代
API v2、v5 WebhookAPI v1(https://api.whop.com/api/v1)。v2 将于 2026-11-13 停用
默认使用 Vercel 上的 Next.js 模板使用 Whop 托管的 whop apps init(Vite + TanStack Start)。仍支持自行托管 Next.js
https://mcp.whop.com/ssehttps://mcp.whop.com/mcp

核心规则

  1. 每次处理受保护的请求时,都在服务端验证用户。 对于 iframe 页面、服务端函数和 API 路由,读取 x-whop-user-token,根据 Whop 的 JWKS 验证该令牌,然后调用 users.checkAccess。绝不信任来自客户端或 URL 的用户 ID。Webhook、OAuth 回调和公开结账页面使用各自的验证方式。
  2. 根据视图进行访问控制。 Experience 视图:要求 has_access。Dashboard 视图:要求 access_level === "admin"。
  3. **仅在服务端确认付款后履约,**通常是在验证 payment.succeeded webhook 后,并将其与自己的订单记录核对(浏览器可以设置结账 metadata)。客户端回调和返回 URL 只是提示,并非付款凭证。
  4. 将 webhook 载荷视为不可信数据。 先验证原始请求体上的签名,只读取类型明确的字段,在返回 2xx 前(5 秒内)使用唯一的 webhook-id 持久化存储事件,然后通过重试进行处理。
  5. 固定 API 版本。 @whop/sdk 会发送其构建时对应的 Api-Version-Date,因此应固定 SDK 版本,而不是覆盖 apiVersionDate(覆盖会改变响应,但不会改变 SDK 类型)。原始 REST 调用必须发送 Api-Version-Date;没有存储版本固定值的旧密钥会使用 2025-01-01 的数据结构。Webhook 有自己的 api_version_date 固定值。
  6. 不要将密钥放入聊天、客户端代码、日志或 git。 确认 .env* 文件已加入 git 忽略规则,然后让用户自行填写,或让用户自行运行 whop apps secrets set。只提及变量名。
  7. 进行任何不可逆操作前都要征求确认。 生产部署、退款、取消、转账和付款都需要用户明确确认;会改变资金或访问权限的 API 调用需要使用针对具体操作的幂等键。绝不要主动转移资金。
  8. 在沙盒中测试付款(environment: WhopEnvironment.Sandbox,密钥来自 sandbox.whop.com)。whop CLI 没有沙盒,因此其命令(包括 whop apps init)都会操作真实账户。Elements 目前不支持沙盒。

工作流

**新应用(空文件夹):**阅读 build-and-ship.md。提出几个探索性问题,确认计划,然后搭建项目脚手架。

**现有应用:**跳转到与任务对应的参考文档:

任务参考文档
搭建项目脚手架、本地开发、权限、部署、App Storebuild-and-ship.md
当前用户、访问检查、视图、OAuthauth-and-access.md
SDK 客户端、API 版本、重命名、分页、错误api-and-sdk.md
结账、应用内购买、会员资格、已保存的卡片、Platformspayments.md
Webhook 处理程序、事件、重试webhooks.md
磨砂玻璃 UI、Tailwind、iframe SDK、Elements 主题ui.md
产品和增长创意design-principles.md

**更新旧版 Whop 代码:**根据上表左列扫描代码并替换每种模式。然后端到端重新检查身份验证和 webhook。

内置最佳实践

  • **服务端代码:**使用 Promise.all 并行运行彼此独立的 await 操作。在每个服务端函数或操作中进行身份验证,因为它们都是公共端点。切勿在模块作用域内缓存用户数据。
  • **数据:**任何数据库都可以。使用 Whop ID(user_、biz_、exp_)作为行的键。为外键添加索引;对任何向客户端公开的数据启用行级安全;在无服务器环境中使用连接池;将 Webhook 操作写成 upsert,以便安全处理重试。
  • **界面:**操作使用 <button>,导航使用 <a>;为仅含图标的按钮添加 aria-label;保留可见的 :focus-visible 样式;对破坏性操作进行确认或提供撤销选项;使用 Intl 格式化金额和日期。
  • **设计:**选择符合应用受众的视觉风格,不要使用千篇一律的渐变主视觉。适配 Whop 的浅色/深色主题。优先适配移动端,因为许多成员会使用 Whop 移动应用。
  • **完成意味着已验证:**在真实的 Whop iframe 中打开应用(将其安装到测试账户),运行主要流程,并发送测试 Webhook,然后再宣布工作完成。

资源

评论

支持 Markdown