腾讯云CVM如何配置支持微信小程序的Node.js环境?

在腾讯云 CVM 上部署支持微信小程序的 Node.js 环境,核心是搭建一个能处理 HTTPS、微信回调(如支付、订阅消息)和静态资源服务的服务器。以下是完整配置步骤:


一、基础准备

  1. 购买/创建 CVM

    • 选择 CentOS 7+ / Ubuntu 20.04+ / Debian 10+ 系统。
    • 建议至少 2 核 CPU、2GB 内存(根据业务量调整)。
    • 安全组开放端口:80(HTTP)、443(HTTPS)、22(SSH)。
  2. 安装 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(推荐)

  1. 安装 Nginx:

    sudo apt install nginx  # Ubuntu
    # 或 sudo yum install nginx # CentOS
  2. 申请免费 SSL 证书:

    sudo apt install certbot python3-certbot-nginx
    sudo certbot --nginx -d your-domain.com
  3. 配置 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;
       }
    }
  4. 启动服务:

    sudo systemctl enable nginx
    sudo systemctl start nginx

方案 B:使用腾讯云 SSL 证书

  • 在 腾讯云 SSL 证书控制台 申请证书。
  • 下载 .pem.key 文件上传至 CVM。
  • 修改 Nginx 配置中的 ssl_certificate 路径指向本地证书。

⚠️ 注意:微信小程序后台需在「开发设置」中填写你的域名(含 HTTPS),且该域名必须已备案(国内服务器)。


四、运行与监控

  1. 使用 PM2 管理进程

    npm install -g pm2
    pm2 start server.js --name wechat-backend
    pm2 startup
    pm2 save
  2. 查看日志

    pm2 logs wechat-backend
  3. 防火墙设置(若未用安全组):

    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云枢 » 腾讯云CVM如何配置支持微信小程序的Node.js环境?