微信小程序调用deepseek api key的流程,使用将api key放在云函数,在小程序前端调用的方法,流程是怎样的
时间: 2025-07-22 20:21:06 AIGC 浏览: 27 评论: 5
<think>我们正在讨论如何在微信小程序中通过云函数调用DeepSeek API,并安全地存储和使用API Key。根据微信小程序的架构,云函数运行在云端(腾讯云),因此可以避免将API Key暴露给客户端。以下是步骤:
1. **创建云函数**:在小程序项目中创建一个云函数,例如`callDeepSeek`。
2. **在云函数中设置API Key**:将DeepSeek API Key添加到云函数的环境变量中(在云开发控制台设置,这样就不会暴露在代码中)。
3. **编写云函数逻辑**:在云函数中编写调用DeepSeek API的代码,使用环境变量中的API Key。
4. **小程序调用云函数**:小程序通过wx.cloud.callFunction调用云函数,传递必要的参数(如用户输入)。
5. **云函数调用DeepSeek API**:云函数收到请求后,使用API Key向DeepSeek API发送请求,并将结果返回给小程序。
这样,API Key只存储在云端,不会泄露到客户端。
### 具体步骤
#### 1. 初始化云开发
在微信小程序中,首先需要开通云开发,并创建一个环境。然后在app.js中初始化云开发:
```javascript
App({
onLaunch: function () {
wx.cloud.init({
env: 'your-env-id', // 替换为你的环境ID
traceUser: true,
})
}
})
```
#### 2. 创建云函数
在项目根目录的`cloudfunctions`文件夹上右键,选择新建Node.js云函数,命名为`callDeepSeek`。
#### 3. 设置环境变量
- 在云开发控制台(https://console.cloud.tencent.com/tcb)中,进入你的环境。
- 在左侧菜单选择“设置”>“环境设置”,在“环境变量”标签页中添加环境变量,例如:
- 变量名:DEEPSEEK_API_KEY
- 变量值:你的DeepSeek API Key(从DeepSeek平台获取)
#### 4. 编写云函数代码
在云函数`callDeepSeek`的index.js中编写代码。注意:需要安装`axios`(或其他http库)来发送请求。在云函数目录下运行`npm install axios`安装。
```javascript
const cloud = require('wx-server-sdk')
const axios = require('axios')
cloud.init({
env: cloud.DYNAMIC_CURRENT_ENV
})
exports.main = async (event, context) => {
// 从环境变量中获取API Key
const apiKey = process.env.DEEPSEEK_API_KEY
// 用户输入,由小程序调用云函数时传入
const { messages } = event
// 调用DeepSeek API
try {
const response = await axios({
method: 'post',
url: 'https://api.deepseek.com/v1/chat/completions', // 假设这是DeepSeek API的URL,请根据实际文档修改
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
data: {
model: "deepseek-chat", // 模型名称,根据实际情况修改
messages: messages, // 消息数组
stream: false // 是否流式输出
}
})
return response.data
} catch (error) {
console.error('调用DeepSeek API失败:', error)
return {
error: error.message
}
}
}
```
#### 5. 在小程序中调用云函数
在小程序页面的js文件中,调用云函数:
```javascript
Page({
data: {
result: null
},
callDeepSeek: function() {
wx.cloud.callFunction({
name: 'callDeepSeek',
data: {
messages: [
{ role: "user", content: "你好,请介绍一下你自己。" }
]
},
success: res => {
console.log('云函数返回:', res.result)
this.setData({
result: res.result
})
},
fail: err => {
console.error('调用云函数失败:', err)
}
})
}
})
```
### 安全注意事项
- **API Key安全**:通过环境变量配置API Key,避免在代码中硬编码。环境变量在云开发控制台中设置,只有有权限的用户才能查看。
- **云函数权限**:确保云函数被正确调用,可以在云函数中增加安全校验(例如,检查调用来源,使用微信的openid进行用户鉴权等)。
- **限制调用频率**:可以在云函数中或DeepSeek API层面设置调用频率限制,防止滥用。
### 相关引用
在微信小程序中使用云函数调用第三方API并保护API Key是一种常见的安全实践[^1][^2]。
§§相关问题§§
1. 微信小程序云函数如何设置环境变量?
2. 除了环境变量,还有哪些方法可以安全存储API Key?
3. 如何对云函数进行权限控制,防止未授权调用?</think>### 微信小程序通过云函数调用 DeepSeek API 的安全流程
#### 1. **创建云函数**
在小程序项目中创建云函数(如 `deepseekApi`),用于代理 API 请求:
```javascript
// cloudfunctions/deepseekApi/index.js
const axios = require('axios');
exports.main = async (event) => {
const { messages } = event; // 接收小程序传入的对话内容
try {
const response = await axios.post(
'https://api.deepseek.com/v1/chat/completions', // DeepSeek API 地址
{
model: "deepseek-chat", // 模型名称
messages,
stream: false // 关闭流式输出
},
{
headers: {
"Authorization": `Bearer ${process.env.DEEPSEEK_API_KEY}`, // 从环境变量读取 Key
"Content-Type": "application/json"
}
}
);
return response.data;
} catch (error) {
console.error('API 调用失败:', error);
return { error: error.message };
}
};
```
#### 2. **安全存储 API Key**
在**微信云开发控制台**配置环境变量:
1. 进入云开发控制台 → 环境设置 → 环境变量
2. 添加变量:
- 变量名:`DEEPSEEK_API_KEY`
- 变量值:您的 DeepSeek API Key(从[平台获取](https://platform.deepseek.com/))
3. 保存后**云函数自动重启生效**
✅ Key 不会出现在代码中,仅云端可访问[^1]
#### 3. **小程序端调用**
在小程序页面中调用云函数:
```javascript
Page({
callDeepSeek() {
wx.cloud.callFunction({
name: 'deepseekApi',
data: {
messages: [{ role: "user", content: "你好!" }] // 用户输入
},
success: (res) => {
console.log('API 返回:', res.result.choices[0].message.content);
},
fail: (err) => {
console.error('调用失败', err);
}
});
}
})
```
#### 4. **安全增强措施**
- 🔒 **IP 白名单**:在 DeepSeek 平台设置仅允许微信云函数的 IP 访问(云函数 IP 可在控制台查看)
- ⏱️ **频率限制**:在云函数中添加调用频率控制:
```javascript
// 在云函数开头添加
const timestamp = Date.now();
if (timestamp - context.lastCall < 1000) {
return { error: "请求过于频繁" };
}
```
- 🔑 **临时密钥**:通过小程序登录态生成临时 token,验证用户身份后再调用云函数
#### 5. **部署流程**
1. 右键云函数目录 → 上传并部署
2. 在小程序 `app.js` 初始化云环境:
```javascript
wx.cloud.init({ env: "your-env-id" }) // 替换为实际环境ID
```
### 关键安全优势
1. **API Key 零暴露**:Key 仅存储在云端环境变量,不传输到客户端[^2]
2. **HTTPS 加密**:小程序 ↔ 云函数 ↔ DeepSeek API 全程 HTTPS
3. **权限隔离**:云函数自动鉴权,非注册用户无法直接调用
> ⚠️ 注意:避免在小程序前端硬编码 API Key,否则可能被反编译获取。通过云函数代理是最佳实践[^1][^2]。
阅读全文
相关推荐




















评论

余青葭
2025.08.31
小程序与云函数交互的代码示例清晰。

love彤彤
2025.08.23
微信小程序调用API的流程讲解详细且安全。

彥爷
2025.07.25
加强安全措施如IP白名单和频率限制很有必要。

蒋寻
2025.06.27
部署流程简明,易于开发者理解和操作。

乖巧是我姓名
2025.05.14
通过环境变量存储API Key是关键的安全策略。