微信小程序连接腾讯云 Node.js 后端,核心在于网络互通、身份认证和安全配置。以下是需要完成的关键配置步骤:
一、基础环境准备
-
注册并登录腾讯云控制台
- 开通「云开发」(CloudBase)或自建云服务器(如 CVM)。
- 若使用云开发(推荐新手),可直接在小程序后台绑定云开发环境;若自建 Node.js 服务(如部署在 CVM/容器服务),需自行搭建。
-
创建/获取 AppID
- 确保你的微信小程序已申请正式 AppID(测试号也可用于开发,但功能受限)。
二、网络与域名配置(关键!)
✅ 方案 A:使用腾讯云云开发(CloudBase)
- 无需手动配置域名,云函数自动支持 HTTPS。
- 只需在小程序端调用
wx.cloud.callFunction()即可。 - 优势:免运维、自动鉴权、内置数据库。
✅ 方案 B:自建 Node.js 后端(CVM / TKE / SCF)
需完成以下配置:
| 配置项 | 操作说明 |
|---|---|
| 1. 服务器 HTTPS | 必须部署 HTTPS(微信强制要求)。可使用 Nginx + Let’s Encrypt 免费证书,或购买 SSL 证书。 |
| 2. 域名备案 | 若域名在中国大陆,需在工信部完成 ICP 备案(icp.beian.miit.gov.cn)。未备案域名无法被微信允许访问。 |
| 3. 添加业务域名 | 登录 微信公众平台 → 开发 → 开发管理 → 开发设置 → 服务器域名 → 添加: • request合法域名• socket合法域名(如需 WebSocket)• 格式: https://your-domain.com(不可用 IP 地址) |
| 4. 开放端口 & 安全组 | 云服务器安全组放行 443(HTTPS)端口;防火墙规则允许该域名 IP 访问。 |
⚠️ 注意:开发阶段可用“本地调试”模式绕过域名限制(见下文),但发布前必须完成上述配置。
三、身份认证与安全
1. 用户登录态传递
- 前端调用
wx.login()获取临时 code。 - 将 code 发送给后端,后端通过
auth.code2Session(code)换取 openid + session_key。 - 推荐使用 JWT 或自定义 token 机制维持会话(避免每次请求传 code)。
2. 接口鉴权
- 所有敏感接口需校验用户身份(如检查 JWT 是否有效、签名是否正确)。
- 可结合腾讯云 CAM(访问控制)对 API 做更细粒度权限管理。
3. 防重放攻击 & 数据加密
- 重要操作建议加入时间戳 + nonce + 签名验证。
- 敏感数据(如手机号、X_X)传输时启用 TLS 1.2+,必要时应用层二次加密。
四、Node.js 后端示例(Express + 云开发 SDK / 自研)
// 示例:Express 接收 wx.login 的 code
app.post('/api/login', async (req, res) => {
const { code } = req.body;
// 调用微信接口换 session_key
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${APPSECRET}&js_code=${code}&grant_type=authorization_code`;
const result = await axios.get(url);
const { openid, session_key } = result.data;
// 生成自定义 token(可选)
const token = jwt.sign({ openid }, process.env.JWT_SECRET, { expiresIn: '7d' });
res.json({ success: true, token, openid });
});
🔐 环境变量中存储
APPID、APPSECRET、JWT_SECRET,切勿硬编码。
五、开发与调试技巧
| 场景 | 方法 |
|---|---|
| 本地开发不配域名 | 微信开发者工具 → 详情 → 本地设置 → 勾选「不校验合法域名」⚠️ 仅开发可用,发布必关 |
| 测试 HTTPS | 用 curl -v https://your-domain.com/api/test 验证证书有效性 |
| 日志监控 | 开启 CloudWatch / 云函数日志 / Nginx access.log 分析请求失败原因 |
六、常见错误排查
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
request:fail url not in domain list |
域名未加白名单 | 检查微信公众平台「服务器域名」配置 |
SSL certificate problem |
证书过期/无效 | 更新证书,确保证书链完整 |
login failed |
code 失效/重复使用 | code 仅一次有效,立即交换 session |
| 403 Forbidden | 缺少鉴权头 | 检查 Authorization 字段格式(如 Bearer xxx) |
需要我提供:
- 完整的 Express + MySQL + JWT 项目模板?
- 云开发(CloudBase)一键部署指南?
- 如何配置 Nginx 反向X_X + HTTPS?
欢迎告诉我你的技术栈偏好,我可以给出针对性方案。
PHPWP博客