在腾讯云 CVM 上部署支持微信小程序的 Node.js 环境,核心是搭建一个能处理 HTTPS、微信回调(如支付、订阅消息)和静态资源服务的服务器。以下是完整配置步骤:
一、基础准备
-
购买/创建 CVM
- 选择 CentOS 7+ / Ubuntu 20.04+ / Debian 10+ 系统。
- 建议至少 2 核 CPU、2GB 内存(根据业务量调整)。
- 安全组开放端口:
80(HTTP)、443(HTTPS)、22(SSH)。
-
安装 Node.js
# Ubuntu/Debian curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt-get install -y nodejs # CentOS/RHEL curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash - sudo yum install -y nodejs验证版本:
node -v && npm -v
二、部署微信小程序后端服务
1. 初始化项目
mkdir wechat-app-backend && cd wechat-app-backend
npm init -y
npm install express axios cors body-parser dotenv
2. 编写基础服务(server.js)
require('dotenv').config();
const express = require('express');
const axios = require('axios');
const crypto = require('crypto');
const app = express();
app.use(express.json());
app.use(cors());
// 获取微信 access_token(示例)
async function getAccessToken() {
const appId = process.env.WX_APPID;
const appSecret = process.env.WX_APPSECRET;
const cacheKey = 'access_token';
// 实际项目中应缓存 token 并定时刷新
return (await axios.get(`https://api.weixin.qq.com/cgi-bin/token`, {
params: { grant_type: 'client_credential',appid: appId, secret: appSecret }
})).data.access_token;
}
// 小程序登录接口(code2Session)
app.post('/auth/login', async (req, res) => {
const { code } = req.body;
const accessToken = await getAccessToken();
const result = await axios.get('https://api.weixin.qq.com/sns/jscode2session', {
params: { appid: process.env.WX_APPID, secret: process.env.WX_APPSECRET, js_code: code, grant_type: 'authorization_code' }
});
res.json(result.data);
});
// 支付回调(需验证签名)
app.post('/pay/callback', (req, res) => {
const notifyData = req.body;
// 验签逻辑(根据微信文档实现)
const sign = notifyData.sign || '';
delete notifyData.sign;
const sortedKeys = Object.keys(notifyData).sort();
let str = '';
for (let k of sortedKeys) {
if (k !== 'sign') str += `${k}=${notifyData[k]}&`;
}
str += `key=${process.env.PAY_KEY}`;
const md5 = crypto.createHash('md5').update(str.toLowerCase()).digest('hex').toUpperCase();
if (md5 === sign) {
// 处理支付成功逻辑
res.send('<xml><return_code><![CDATA[SUCCESS]]></return_code></xml>');
} else {
res.send('<xml><return_code><![CDATA[FAIL]]></return_code></xml>');
}
});
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
3. 配置环境变量(.env)
WX_APPID=your_appid
WX_APPSECRET=your_appsecret
PAY_KEY=your_payment_key
PORT=3000
三、配置 HTTPS(关键!微信小程序强制要求)
方案 A:使用 Nginx + Let’s Encrypt(推荐)
-
安装 Nginx:
sudo apt install nginx # Ubuntu # 或 sudo yum install nginx # CentOS -
申请免费 SSL 证书:
sudo apt install certbot python3-certbot-nginx sudo certbot --nginx -d your-domain.com -
配置 Nginx 反向X_X到 Node.js:
/etc/nginx/sites-available/wechat-backend:server { listen 80; server_name your-domain.com; return 301 https://$server_name$request_uri; } server { listen 443 ssl http2; server_name your-domain.com; ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem; location / { proxy_pass http://localhost:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } -
启动服务:
sudo systemctl enable nginx sudo systemctl start nginx
方案 B:使用腾讯云 SSL 证书
- 在 腾讯云 SSL 证书控制台 申请证书。
- 下载
.pem和.key文件上传至 CVM。 - 修改 Nginx 配置中的
ssl_certificate路径指向本地证书。
⚠️ 注意:微信小程序后台需在「开发设置」中填写你的域名(含 HTTPS),且该域名必须已备案(国内服务器)。
四、运行与监控
-
使用 PM2 管理进程:
npm install -g pm2 pm2 start server.js --name wechat-backend pm2 startup pm2 save -
查看日志:
pm2 logs wechat-backend -
防火墙设置(若未用安全组):
sudo ufw allow 3000/tcp # Ubuntu # 或 firewalld sudo firewall-cmd --permanent --add-port=3000/tcp sudo firewall-cmd --reload
五、微信小程序端对接要点
- 前端请求必须走 HTTPS:
https://your-domain.com/auth/login - 登录流程:调用
wx.login()获取 code → 传给后端 → 后端换取 openid/session_key - 支付流程:后端生成预支付订单 → 返回给前端 → 前端调起微信支付
- 订阅消息:需用户主动授权 + 模板 ID 配置
常见问题排查
| 问题 | 解决方案 |
|---|---|
| “域名未备案”错误 | 确保域名已在工信部备案(国内 CVM 必需) |
| HTTPS 报错 | 检查证书是否有效、Nginx 配置是否正确、浏览器清除缓存 |
| Token 过期 | 实现 token 缓存机制(Redis 或内存缓存+定时刷新) |
| 支付回调失败 | 核对 pay_key、验签逻辑、POST 数据格式 |
通过以上步骤,即可在腾讯云 CVM 上构建符合微信小程序规范的 Node.js 后端服务。如需高可用,可结合负载均衡(CLB)+ 多实例部署。
CLOUD云枢