Skip to main content

你将构建什么

本教程将带你从零构建一个 Next.js 14+(App Router)全栈应用,采用双客户端架构
  • Profy(API Key) — 你的应用自己的 API Key,用于调用专家和 AI 模型
  • ProfyApp(OAuth) — 用户的 OAuth Token,用于向袋袋上报计费事件

前置条件

袋袋开发者账号

已注册袋袋账号并在开发者后台创建 App,获取 Client ID、Client Secret 和 API Key

开发环境

Node.js 18+、npm/pnpm/bun、基础 Next.js 和 React 经验

Step 1: 创建项目并安装依赖

Step 2: 配置环境变量

.env.local
永远不要将 .env.local 提交到版本控制。确保 .gitignore 包含该文件。

Step 3: 初始化双客户端

lib/profy.ts
两个客户端各司其职:client(Profy)持有你的 API Key,用于 AI 调用;app(ProfyApp)持有 OAuth 凭证,用于用户授权和计费。

Step 4: OAuth 登录页面

app/page.tsx

Step 5: 处理 OAuth 回调

app/api/callback/route.ts
exchangeCode 返回的 OAuthToken 包含 accessTokenrefreshTokenexpiresAtscopeexpiresAt 是 Unix 时间戳(毫秒),用于判断何时刷新。

Step 6: Token 持久化

手动实现 Token 存储。生产环境使用数据库(Drizzle / Prisma / etc.),这里用 Map 演示核心模式:
lib/token-store.ts
生产环境必须用持久化存储(数据库/Redis)。Map 在服务重启后会丢失所有 Token。参考 Token 管理最佳实践

Step 7: 上报计费事件

用户触发付费动作时,通过 ProfyAppreportEvent 上报计费事件:
app/api/report-event/route.ts
onRefresh 回调在 Token 自动刷新时触发。因为 Profy 的 Refresh Token 是一次性的(rotation),必须在回调中持久化新 Token。

Step 8: 调用 AI

使用 Profy(API Key)客户端调用专家或 AI 模型——这与用户 OAuth Token 无关:
app/api/chat/route.ts
流式版本:
app/api/chat-stream/route.ts

Step 9: 客户端页面

app/dashboard/page.tsx

完整项目结构

常见问题

下一步

按次计费实战

ProfyApp reportEvent 按次扣费

Token 管理最佳实践

多用户、并发刷新、安全存储

专家调用

使用 Profy SDK 调用平台专家

AI 按量计费

chat.completions 按 token 计费