微信小程序与腾讯云服务器(如云服务器 CVM、轻量应用服务器或云函数 SCF)对接,核心在于安全、合规、高效地实现前后端通信。以下是完整、可落地的对接配置指南(以主流场景:小程序 → 腾讯云 CVM 部署的 Node.js/Java/PHP 后端为例):
✅ 一、前提条件与规范要求
- 小程序已备案并完成主体认证(个人/企业)
- 域名已通过微信小程序后台「开发管理 → 服务器域名」配置(必须是 HTTPS,且需备案)
✅ 支持的域名类型:request(API)、uploadFile、downloadFile、socket
❌ 不支持http://、localhost、127.0.0.1、IP 地址(如https://119.29.29.29) - 腾讯云服务器(CVM)已部署后端服务(如 Express/Nginx + Node.js、Spring Boot、Nginx + PHP 等),并监听
443(HTTPS)端口
🔐 二、关键配置步骤(分步详解)
✅ 步骤 1:为腾讯云服务器配置 HTTPS(强制要求)
微信小程序仅允许 HTTPS 请求,必须配置有效 SSL 证书。
| 方式 | 推荐方案 | 操作指引 |
|---|---|---|
| ① 腾讯云 SSL 证书服务(免费 DV 证书) | ✅ 最推荐(自动续期、一键部署到 CLB/CVM) | 1. 访问 腾讯云 SSL 证书控制台 → 免费申请 DV 证书 2. 域名验证(DNS 解析或文件验证) 3. 下载证书 → 在 CVM 上 Nginx/Apache 配置(或使用「证书托管」功能一键部署到负载均衡 CLB) |
| ② 使用 Nginx 反向X_X + Let’s Encrypt(Certbot) | ⚠️ 需自行维护 | certbot --nginx -d yourdomain.com(需开放 80/443 端口) |
✅ 示例 Nginx HTTPS 配置(
/etc/nginx/conf.d/yourapp.conf):server { listen 443 ssl; server_name yourdomain.com;
ssl_certificate /etc/nginx/ssl/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/yourdomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000; # 转发到本地 Node.js 服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
#### ✅ 步骤 2:在微信小程序后台配置合法域名
1. 登录 [微信公众平台](https://mp.weixin.qq.com/) → 小程序管理后台
2. 进入 **开发管理 → 开发设置 → 服务器域名**
3. 在对应字段填写(必须与证书域名一致):
- `request 合法域名`:`https://yourdomain.com`
- (可选)`uploadFile/downloadFile 合法域名`:同上或子路径(如 `https://api.yourdomain.com`)
4. ✅ **保存后需重新上传小程序代码才能生效**
> ⚠️ 注意:
> - 域名需已完成 ICP 备案(腾讯云备案系统可快速提交)
> - 若用二级域名(如 `api.yourdomain.com`),需单独为该域名申请证书并备案
#### ✅ 步骤 3:CVM 安全组配置(放行必要端口)
登录 [腾讯云 CVM 控制台](https://console.cloud.tencent.com/cvm) → 找到实例 → **安全组** → 编辑入站规则:
| 协议 | 端口 | 来源 | 说明 |
|------|------|------|------|
| TCP | 443 | 0.0.0.0/0 | ✅ 必须开放(HTTPS) |
| TCP | 80 | 0.0.0.0/0 | 可选(用于 HTTP 重定向或 Let's Encrypt 验证) |
| ❌ | 3000/8080 等内部端口 | **禁止对外暴露** | 后端服务应只监听 `127.0.0.1:3000`,由 Nginx 反向X_X |
#### ✅ 步骤 4:后端服务增加微信校验(可选但强烈推荐)
为防止违规调用,建议校验 `X-WX-KEY` 或 `X-WX-SIGN`(自定义 header),或更标准的 **微信登录态校验**:
```javascript
// 小程序端 wx.login() 获取 code → 传给后端
wx.login({
success(res) {
wx.request({
url: 'https://yourdomain.com/api/login',
method: 'POST',
data: { code: res.code },
success: (r) => console.log(r.data)
})
}
})
// 后端(Node.js Express 示例)校验 code 并换取 openid
const axios = require('axios');
app.post('/api/login', async (req, res) => {
const { code } = req.body;
const APPID = 'wx1234567890abcdef';
const SECRET = 'your_app_secret_from_mp';
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${APPID}&secret=${SECRET}&js_code=${code}&grant_type=authorization_code`;
try {
const result = await axios.get(url);
const { openid, session_key, errcode } = result.data;
if (errcode) throw new Error(`WeChat error: ${errcode}`);
// ✅ 生成自定义 token(JWT)返回给小程序,后续请求带 Authorization header
const token = jwt.sign({ openid }, 'your-secret-key', { expiresIn: '7d' });
res.json({ openid, token });
} catch (e) {
res.status(500).json({ error: 'Login failed' });
}
});
✅ 步骤 5:小程序发起 HTTPS 请求(正确写法)
// ✅ 正确:使用配置的合法域名
wx.request({
url: 'https://yourdomain.com/api/user/info',
method: 'GET',
header: {
'Authorization': 'Bearer ' + wx.getStorageSync('token') // 自定义鉴权
},
success(res) {
console.log('✅ 请求成功', res.data);
},
fail(err) {
console.error('❌ 请求失败', err);
// 常见错误:-1(网络错误)、-2(超时)、-100(域名未配置或非HTTPS)
}
});
🚀 进阶优化建议
| 场景 | 推荐方案 | 优势 |
|---|---|---|
| 高并发/免运维 | 使用 腾讯云云函数 SCF + API 网关 | 自动扩缩容、按量付费、天然 HTTPS、无需管理服务器 |
| 静态资源提速 | 将图片/JS/CSS 上传至 腾讯云 COS,开启 CDN 提速 | 提升加载速度,降低 CVM 压力 |
| 实时通信 | 使用 腾讯云 IM SDK 或 WebSocket(需配置 socket 合法域名) | 支持聊天、通知等场景 |
| 安全加固 | 后端启用 WAF(Web 应用防火墙)、CVM 安装云镜(主机安全) | 防御 SQL 注入、CC 攻击等 |
❗ 常见错误排查清单
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
request:fail net::ERR_CONNECTION_REFUSED |
CVM 未启动服务 / Nginx 未运行 / 安全组未放行 443 | systemctl status nginx、curl -I https://yourdomain.com 测试 |
request:fail url not in domain list |
小程序后台未配置域名,或配置了 http:// / IP / 子路径未备案 |
检查后台域名是否为 https://xxx.com(无路径),确认备案状态 |
request:fail invalid url |
请求 URL 包含空格、中文、特殊字符未编码 | encodeURIComponent() 处理参数 |
SSL handshake error |
证书过期 / 域名不匹配 / 未包含中间证书 | 用 SSL Labs 检测证书链完整性 |
✅ 总结:最小可行流程图
小程序前端
↓ (HTTPS request 到合法域名)
你的域名(yourdomain.com)
↓ DNS 解析 → 腾讯云 CVM 公网 IP
CVM 安全组(放行 443)
↓ Nginx 反向X_X(HTTPS→HTTP)
后端服务(127.0.0.1:3000)
↓ 校验微信 code / JWT Token
返回 JSON 数据给小程序
如需我为你提供:
- ✅ Nginx + Node.js 完整部署脚本
- ✅ Spring Boot 后端示例代码(含微信登录鉴权)
- ✅ 云函数 SCF + API 网关替代方案配置
- ✅ COS 图片上传 + CDN 提速完整流程
欢迎随时告诉我你的技术栈(如:Vue 小程序 + Java Spring Boot + CVM),我可为你定制详细配置文档和代码模板 👇
云小栈