# 签名生成方法

知识星球 API 使用签名机制验证请求合法性，需要 `x-signature` 和 `x-timestamp` 两个参数。

## 获取签名步骤

### 方法一：从浏览器开发者工具获取（推荐）

1. **登录知识星球网页版**
   - 打开 https://wx.zsxq.com
   - 扫码登录

2. **打开开发者工具**
   - 按 `F12` 或右键选择"检查"
   - 切换到 **Network** 标签

3. **发布一条测试帖子**
   - 在页面上发布任意内容
   - 观察 Network 中的请求

4. **复制签名参数**
   - 找到 `topics` 请求
   - 在 **Request Headers** 中复制：
     - `x-signature`
     - `x-timestamp`

   ![签名位置示意图](https://example.com/signature-location.png)

### 方法二：使用浏览器插件

安装 ModHeader 或类似插件，可以方便地查看和复制请求头。

## 签名时效性

⚠️ **重要提示**：签名具有时效性，通常有效期为几分钟到几小时。

| 情况 | 处理方式 |
|------|---------|
| 签名过期 | 重新从浏览器获取 |
| 频繁发帖 | 每次发帖前获取新签名 |
| 自动化脚本 | 需要实现签名生成算法（逆向工程） |

## 签名算法（参考）

知识星球的签名算法未公开，但大致包含以下要素：

```
signature = HMAC_SHA256(
    key = "secret_key",
    message = timestamp + method + path + body
)
```

由于密钥未知，**目前只能通过浏览器获取签名**。

## 自动化方案

如需完全自动化发帖，可考虑：

1. **浏览器自动化**
   - 使用 Puppeteer/Playwright 模拟浏览器操作
   - 自动登录并发布帖子

2. **逆向工程**
   - 分析前端 JS 代码，找到签名生成逻辑
   - 用 Python/Node.js 复现签名算法

3. **代理抓包**
   - 使用 Charles/Fiddler 拦截请求
   - 自动提取签名参数

## 安全提醒

- 不要将签名提交到代码仓库
- 签名泄露可能导致账号被盗用
- 建议定期更换 access_token