微信小程序调用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是关键的安全策略。