在微信小程序中对接部署在阿里云上的后端接口,核心是确保网络连通性、域名备案合规以及跨域安全。以下是完整步骤和关键注意事项:
一、前置条件检查
- 后端服务已部署并可公网访问
- 确认阿里云 ECS/容器服务/API网关等已启动服务。
- 测试本地或浏览器能否通过
http://your-domain.com/api/xxx正常访问(注意:小程序仅支持 HTTPS)。
- 域名已完成 ICP 备案
- 微信小程序强制要求使用 已备案的域名 + HTTPS。
- 未备案域名无法在真机调试或发布后调用接口。
- SSL 证书配置正确
- 在阿里云控制台申请免费 DV SSL 证书(或通过其他方式),并在 Nginx/Apache 或负载均衡上配置 HTTPS。
- 证书需由受信任 CA 颁发(微信内置信任链),自签名证书无效。
二、配置小程序后台
- 登录 微信公众平台
- 进入「开发」→「开发设置」→「服务器域名」
- 添加你的后端域名到以下类别:
- request 合法域名(必填):例如
https://api.yourdomain.com - (可选)其他如 socket、uploadFile 等按需求添加
- request 合法域名(必填):例如
- ✅ 点击保存后等待审核(通常几分钟内生效)
⚠️ 注意:
- 域名必须与请求 URL 完全一致(包括协议
https://)。- 最多可配置 20 个域名,但建议主业务只配一个稳定域名。
- 修改后需重启小程序项目或清除缓存才能生效。
三、代码示例(WXML + JS)
// pages/index/index.js
Page({
data: {
userInfo: null
},
onLoad() {
this.fetchUserInfo();
},
fetchUserInfo() {
wx.request({
url: 'https://api.yourdomain.com/user/info', // 必须匹配已配置的域名
method: 'POST',
header: {
'Content-Type': 'application/json',
// 如需认证,可加 Authorization 头
// 'Authorization': 'Bearer ' + token
},
data: {
userId: '123'
},
success(res) {
console.log('接口响应:', res.data);
if (res.statusCode === 200) {
this.setData({ userInfo: res.data });
} else {
wx.showToast({ title: '获取失败', icon: 'none' });
}
},
fail(err) {
console.error('请求失败:', err);
wx.showToast({ title: '网络错误', icon: 'none' });
}
});
}
});
四、阿里云侧关键配置
1. 安全组放行端口
- 登录阿里云 ECS → 安全组规则
- 确保 443 端口(HTTPS) 对
0.0.0.0/0开放(或限制为特定 IP 段更安全) - 若使用 Nginx,确认监听
443 ssl
2. Nginx 示例配置(启用 HTTPS)
server {
listen 443 ssl;
server_name api.yourdomain.com;
ssl_certificate /path/to/fullchain.pem;
ssl_certificate_key /path/to/privkey.pem;
# 强制 HTTP 重定向到 HTTPS(可选但推荐)
# return 301 https://$host$request_uri;
location /api/ {
proxy_pass http://127.0.0.1:3000; # 转发至实际后端服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 解决跨域问题(若前端非小程序直接调用)
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
add_header Access-Control-Allow-Headers 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
if ($request_method = 'OPTIONS') {
return 204;
}
}
}
🔐 提示:
- 小程序不需要 CORS 配置(因走原生
wx.request),但保留可增加兼容性。- 务必开启 HSTS(HTTP Strict Transport Security)提升安全性。
五、调试技巧
| 场景 | 方法 |
|---|---|
| 真机调试 | 扫码登录开发者账号 → 选择“开发版”体验 |
| 本地模拟 | 使用「微信开发者工具」→ 勾选「不校验合法域名」临时绕过(仅限开发环境) |
| 日志排查 | 查看微信开发者工具 Console + 阿里云 Nginx 访问日志 /var/log/nginx/access.log |
| 超时问题 | 默认超时 60s;长任务需异步处理或轮询 |
六、常见问题速查
❓ Q:提示“不在 request 合法域名列表中”
✅ A:检查域名是否已备案、是否配置了 HTTPS、是否在小程序后台正确填写(含 https:// 前缀)。
❓ Q:iOS 真机报错,Android 正常?
✅ A:常见于证书链不完整。确保上传的是 .crt + .key 组合,且中间证书包含在内(可用 OpenSSL 验证:openssl verify -CAfile ca-bundle.crt your-cert.crt)。
❓ Q:需要动态域名怎么办?
✅ A:使用阿里云 DNS 解析 + 云解析 API 动态更新 A/CNAME,但每个子域名仍需单独备案;更推荐固定主域名 + 路径区分功能模块。
需要我提供:
- 完整的 Docker+Nginx+Node.js 部署模板?
- 如何申请免费 SSL 证书的详细教程?
- 带 JWT 认证的完整前后端交互示例?
欢迎告诉我你的技术栈(如 Java/Spring Boot、Node.js、Python Flask 等),我可给出针对性方案 🚀
PHPWP博客