加油
努力

轻量服务器搭建API后,微信小程序请求接口需要注意什么?

在轻量服务器(如腾讯云轻量应用服务器、阿里云轻量、Vultr等)上搭建 API 后,微信小程序请求该接口时需特别注意以下关键点(涵盖安全、合规、网络、开发规范等方面),否则极易出现 请求失败、404、403、超时、数据为空、审核不通过 等问题:


✅ 一、域名与 HTTPS 强制要求(最核心!)

项目 要求 说明
必须使用 HTTPS ❗强制 微信小程序所有 wx.request 请求仅支持 HTTPS 协议(HTTP 会被拦截且报错 net::ERR_INSECURE_RESPONSE)。
域名白名单 ❗强制 域名必须在 小程序管理后台 → 开发管理 → 开发者工具 → 服务器域名 中配置:
request 合法域名(必填)
• 若用 WebSocket,还需 socket 合法域名
• 不支持 IP 地址、端口(如 https://118.24.123.45:3000 ❌)、localhost127.0.0.1
域名备案 ⚠️ 强烈建议 国内服务器(含轻量)部署的 API 域名必须完成 ICP 备案(否则微信可能拒绝请求或审核不通过)。腾讯云/阿里云轻量通常提供一键备案入口。

操作建议:

  • 申请一个已备案的二级域名(如 api.yourdomain.com),解析到轻量服务器公网 IP;
  • 使用 Nginx + Let’s Encrypt(Certbot)免费配置 HTTPS(推荐自动续期);
  • 配置后务必在小程序后台填写 https://api.yourdomain.com不能带路径或端口)。

✅ 二、服务端 CORS 配置(避免跨域拦截)

虽然小程序 wx.request 不是浏览器环境,不走浏览器 CORS 机制,但:

  • 若你在开发中用 H5 调试或后续扩展 Web 端,CORS 仍需配置;
  • 某些X_X/网关(如 Nginx 反向X_X)若配置不当,可能返回非标准响应头,导致小程序解析异常。

建议服务端响应头包含:

Access-Control-Allow-Origin: https://your-miniprogram-domain.com  // 或 *(生产环境慎用)
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, Authorization, X-Requested-With
Access-Control-Allow-Credentials: true  // 如需携带 cookie(小程序默认不带,一般不用)

💡 小程序 wx.request 不发送 Cookie,也不读取 Set-Cookie(除非显式设置 withCredentials: true 且服务端支持),但登录态建议用 token(Header 传递)更可靠。


✅ 三、轻量服务器网络与安全组配置

项目 检查项 常见错误
安全组/防火墙 ✅ 开放 443(HTTPS)端口(必要)
✅ 若调试用 80 端口,也需开放(但上线必须用 443)
❌ 只开了 223000,未开 443 → 小程序无法连接
Nginx 反向X_X(推荐) ✅ 将 https://api.xxx.com X_X到本地 http://127.0.0.1:3000
✅ 正确配置 SSL 证书(证书链完整)
❌ 直接用 Node.js 监听 443(需 root 权限,不安全)
❌ 证书过期或格式错误(如 .pem 缺少中间证书)→ 微信提示“证书无效”
后端监听地址 0.0.0.0:3000(而非 127.0.0.1:3000 ❌ 绑定 localhost → Nginx 无法反向X_X

✅ 四、小程序端请求规范(避坑指南)

// ✅ 正确示例(HTTPS + 白名单域名 + token 认证)
wx.request({
  url: 'https://api.yourdomain.com/v1/user/info',
  method: 'GET',
  header: {
    'Authorization': 'Bearer ' + wx.getStorageSync('token'), // 推荐 token 方式
    'Content-Type': 'application/json'
  },
  success(res) {
    console.log('success', res.data);
  },
  fail(err) {
    console.error('request failed', err); // 👈 关键!打印 err.errMsg 查具体原因
  }
});

⚠️ 常见错误写法:

  • url: 'http://...' → ❌ 直接报错 request:fail url not in domain list
  • url: 'https://118.24.123.45/api' → ❌ IP 地址不在白名单,且无 HTTPS 证书
  • url: 'https://api.yourdomain.com:8080/' → ❌ 端口不被允许(白名单只认域名,不认端口)
  • 忘记在 fail 回调中打印 err.errMsg → 难以定位是网络、证书还是域名问题

✅ 五、其他关键注意事项

类别 要点
Token / 登录态 ✅ 小程序登录推荐使用 wx.login() 获取 code → 传给服务端调用微信接口换取 openid/unionid不要依赖 session+cookie(小程序不共享 cookie)
请求超时 ✅ 设置 timeout: 10000(默认 6s,弱网易超时)
内容类型 header['Content-Type'] 显式指定(如 application/json),避免服务端解析失败
大小限制 ✅ 单次 wx.request 响应体 ≤ 5MB;URL 长度 ≤ 2048 字符
审核风险 ⚠️ 若接口返回用户隐私数据(手机号、地址等),需在小程序后台提交《隐私协议》并勾选对应权限,否则审核驳回

✅ 六、快速排障清单(遇到请求失败时逐项检查)

  1. ✅ 小程序后台是否已添加 https://api.yourdomain.com 到「request 合法域名」?
  2. ✅ 域名是否已 ICP 备案?(国内服务器必需)
  3. ✅ 用浏览器访问 https://api.yourdomain.com/health 是否显示正常且 无证书警告?(关键!)
  4. ✅ 服务器安全组是否开放 443 端口?
  5. ✅ Nginx 是否正确配置 SSL 并X_X到后端?curl -I https://api.yourdomain.com 返回 200
  6. ✅ 小程序 fail 回调中 err.errMsg 是什么?(如 request:fail net::ERR_CERT_INVALID = 证书问题)
  7. ✅ 后端是否返回了正确的 Content-Type: application/json200 状态码?

✅ 附:轻量服务器推荐配置(以腾讯云轻量为例)

  • 系统:Ubuntu 22.04 LTS
  • 安装:Nginx + Node.js(或 Python/PHP)
  • HTTPS:sudo apt install certbot python3-certbot-nginxsudo certbot --nginx -d api.yourdomain.com
  • Nginx 示例:
    server {
      listen 443 ssl;
      server_name api.yourdomain.com;
      ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
      ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;
      location / {
          proxy_pass http://127.0.0.1:3000;
          proxy_set_header Host $host;
          proxy_set_header X-Real-IP $remote_addr;
      }
    }

如有具体问题(如证书配置报错、Nginx 502、小程序提示“不在合法域名列表”但已配置),欢迎补充细节,我可帮你逐行分析日志和配置 👇

祝你 API 顺利上线!🚀

云服务器